hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/s390/cio/qdio.h
....@@ -15,7 +15,6 @@
1515 #define QDIO_BUSY_BIT_PATIENCE (100 << 12) /* 100 microseconds */
1616 #define QDIO_BUSY_BIT_RETRY_DELAY 10 /* 10 milliseconds */
1717 #define QDIO_BUSY_BIT_RETRIES 1000 /* = 10s retry time */
18
-#define QDIO_INPUT_THRESHOLD (500 << 12) /* 500 microseconds */
1918
2019 enum qdio_irq_states {
2120 QDIO_IRQ_STATE_INACTIVE,
....@@ -82,6 +81,7 @@
8281 #define QDIO_SIGA_WRITE 0x00
8382 #define QDIO_SIGA_READ 0x01
8483 #define QDIO_SIGA_SYNC 0x02
84
+#define QDIO_SIGA_WRITEM 0x03
8585 #define QDIO_SIGA_WRITEQ 0x04
8686 #define QDIO_SIGA_QEBSM_FLAG 0x80
8787
....@@ -165,34 +165,21 @@
165165 } ____cacheline_aligned;
166166
167167 struct qdio_queue_perf_stat {
168
- /*
169
- * Sorted into order-2 buckets: 1, 2-3, 4-7, ... 64-127, 128.
170
- * Since max. 127 SBALs are scanned reuse entry for 128 as queue full
171
- * aka 127 SBALs found.
172
- */
168
+ /* Sorted into order-2 buckets: 1, 2-3, 4-7, ... 64-127, 128. */
173169 unsigned int nr_sbals[8];
174170 unsigned int nr_sbal_error;
175171 unsigned int nr_sbal_nop;
176172 unsigned int nr_sbal_total;
177173 };
178174
179
-enum qdio_queue_irq_states {
180
- QDIO_QUEUE_IRQS_DISABLED,
175
+enum qdio_irq_poll_states {
176
+ QDIO_IRQ_DISABLED,
181177 };
182178
183179 struct qdio_input_q {
184
- /* input buffer acknowledgement flag */
185
- int polling;
186
- /* first ACK'ed buffer */
187
- int ack_start;
188
- /* how much sbals are acknowledged with qebsm */
189
- int ack_count;
190
- /* last time of noticing incoming data */
191
- u64 timestamp;
192
- /* upper-layer polling flag */
193
- unsigned long queue_irq_state;
194
- /* callback to start upper-layer polling */
195
- void (*queue_start_poll) (struct ccw_device *, int, unsigned long);
180
+ /* Batch of SBALs that we processed while polling the queue: */
181
+ unsigned int batch_start;
182
+ unsigned int batch_count;
196183 };
197184
198185 struct qdio_output_q {
....@@ -206,8 +193,6 @@
206193 struct qdio_outbuf_state *sbal_state;
207194 /* timer to check for more outbound work */
208195 struct timer_list timer;
209
- /* used SBALs before tasklet schedule */
210
- int scan_threshold;
211196 };
212197
213198 /*
....@@ -227,12 +212,6 @@
227212 * outbound: next buffer to check if adapter processed it
228213 */
229214 int first_to_check;
230
-
231
- /* first_to_check of the last time */
232
- int last_move;
233
-
234
- /* beginning position for calling the program */
235
- int first_to_kick;
236215
237216 /* number of buffers in use by the adapter */
238217 atomic_t nr_buf_used;
....@@ -257,13 +236,9 @@
257236 /* input or output queue */
258237 int is_input_q;
259238
260
- /* list of thinint input queues */
261
- struct list_head entry;
262
-
263239 /* upper-layer program handler */
264240 qdio_handler_t (*handler);
265241
266
- struct dentry *debugfs_q;
267242 struct qdio_irq *irq_ptr;
268243 struct sl *sl;
269244 /*
....@@ -277,8 +252,8 @@
277252 struct qib qib;
278253 u32 *dsci; /* address of device state change indicator */
279254 struct ccw_device *cdev;
255
+ struct list_head entry; /* list of thinint devices */
280256 struct dentry *debugfs_dev;
281
- struct dentry *debugfs_perf;
282257
283258 unsigned long int_parm;
284259 struct subchannel_id schid;
....@@ -298,6 +273,7 @@
298273 struct qdio_ssqd_desc ssqd_desc;
299274 void (*orig_handler) (struct ccw_device *, unsigned long, struct irb *);
300275
276
+ unsigned int scan_threshold; /* used SBALs before tasklet schedule */
301277 int perf_stat_enabled;
302278
303279 struct qdr *qdr;
....@@ -305,6 +281,11 @@
305281
306282 struct qdio_q *input_qs[QDIO_MAX_QUEUES_PER_IRQ];
307283 struct qdio_q *output_qs[QDIO_MAX_QUEUES_PER_IRQ];
284
+ unsigned int max_input_qs;
285
+ unsigned int max_output_qs;
286
+
287
+ void (*irq_poll)(struct ccw_device *cdev, unsigned long data);
288
+ unsigned long poll_state;
308289
309290 debug_info_t *debug_area;
310291 struct mutex setup_mutex;
....@@ -321,12 +302,14 @@
321302
322303 #define qperf(__qdev, __attr) ((__qdev)->perf_stat.(__attr))
323304
324
-#define qperf_inc(__q, __attr) \
305
+#define QDIO_PERF_STAT_INC(__irq, __attr) \
325306 ({ \
326
- struct qdio_irq *qdev = (__q)->irq_ptr; \
307
+ struct qdio_irq *qdev = __irq; \
327308 if (qdev->perf_stat_enabled) \
328309 (qdev->perf_stat.__attr)++; \
329310 })
311
+
312
+#define qperf_inc(__q, __attr) QDIO_PERF_STAT_INC((__q)->irq_ptr, __attr)
330313
331314 static inline void account_sbals_error(struct qdio_q *q, int count)
332315 {
....@@ -341,8 +324,7 @@
341324 (q->nr == q->irq_ptr->nr_output_qs - 1);
342325 }
343326
344
-#define pci_out_supported(q) \
345
- (q->irq_ptr->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED)
327
+#define pci_out_supported(irq) ((irq)->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED)
346328 #define is_qebsm(q) (q->irq_ptr->sch_token != 0)
347329
348330 #define need_siga_in(q) (q->irq_ptr->siga_flag.input)
....@@ -360,14 +342,10 @@
360342 for (i = 0; i < irq_ptr->nr_output_qs && \
361343 ({ q = irq_ptr->output_qs[i]; 1; }); i++)
362344
363
-#define prev_buf(bufnr) \
364
- ((bufnr + QDIO_MAX_BUFFERS_MASK) & QDIO_MAX_BUFFERS_MASK)
365
-#define next_buf(bufnr) \
366
- ((bufnr + 1) & QDIO_MAX_BUFFERS_MASK)
367
-#define add_buf(bufnr, inc) \
368
- ((bufnr + inc) & QDIO_MAX_BUFFERS_MASK)
369
-#define sub_buf(bufnr, dec) \
370
- ((bufnr - dec) & QDIO_MAX_BUFFERS_MASK)
345
+#define add_buf(bufnr, inc) QDIO_BUFNR((bufnr) + (inc))
346
+#define next_buf(bufnr) add_buf(bufnr, 1)
347
+#define sub_buf(bufnr, dec) QDIO_BUFNR((bufnr) - (dec))
348
+#define prev_buf(bufnr) sub_buf(bufnr, 1)
371349
372350 #define queue_irqs_enabled(q) \
373351 (test_bit(QDIO_QUEUE_IRQS_DISABLED, &q->u.in.queue_irq_state) == 0)
....@@ -379,14 +357,11 @@
379357 /* prototypes for thin interrupt */
380358 int qdio_establish_thinint(struct qdio_irq *irq_ptr);
381359 void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
382
-void tiqdio_add_input_queues(struct qdio_irq *irq_ptr);
383
-void tiqdio_remove_input_queues(struct qdio_irq *irq_ptr);
360
+void tiqdio_add_device(struct qdio_irq *irq_ptr);
361
+void tiqdio_remove_device(struct qdio_irq *irq_ptr);
384362 void tiqdio_inbound_processing(unsigned long q);
385
-int tiqdio_allocate_memory(void);
386
-void tiqdio_free_memory(void);
387
-int tiqdio_register_thinints(void);
388
-void tiqdio_unregister_thinints(void);
389
-void clear_nonshared_ind(struct qdio_irq *);
363
+int qdio_thinint_init(void);
364
+void qdio_thinint_exit(void);
390365 int test_nonshared_ind(struct qdio_irq *);
391366
392367 /* prototypes for setup */
....@@ -401,12 +376,11 @@
401376 int qdio_setup_get_ssqd(struct qdio_irq *irq_ptr,
402377 struct subchannel_id *schid,
403378 struct qdio_ssqd_desc *data);
404
-int qdio_setup_irq(struct qdio_initialize *init_data);
405
-void qdio_print_subchannel_info(struct qdio_irq *irq_ptr,
406
- struct ccw_device *cdev);
407
-void qdio_release_memory(struct qdio_irq *irq_ptr);
408
-int qdio_setup_create_sysfs(struct ccw_device *cdev);
409
-void qdio_setup_destroy_sysfs(struct ccw_device *cdev);
379
+int qdio_setup_irq(struct qdio_irq *irq_ptr, struct qdio_initialize *init_data);
380
+void qdio_shutdown_irq(struct qdio_irq *irq);
381
+void qdio_print_subchannel_info(struct qdio_irq *irq_ptr);
382
+void qdio_free_queues(struct qdio_irq *irq_ptr);
383
+void qdio_free_async_data(struct qdio_irq *irq_ptr);
410384 int qdio_setup_init(void);
411385 void qdio_setup_exit(void);
412386 int qdio_enable_async_operation(struct qdio_output_q *q);