Lines Matching full:q
103 * @q: queue to manipulate
112 static int qdio_do_eqbs(struct qdio_q *q, unsigned char *state, in qdio_do_eqbs() argument
115 int tmp_count = count, tmp_start = start, nr = q->nr; in qdio_do_eqbs()
118 qperf_inc(q, eqbs); in qdio_do_eqbs()
120 if (!q->is_input_q) in qdio_do_eqbs()
121 nr += q->irq_ptr->nr_input_qs; in qdio_do_eqbs()
123 ccq = do_eqbs(q->irq_ptr->sch_token, state, nr, &tmp_start, &tmp_count, in qdio_do_eqbs()
133 qperf_inc(q, eqbs_partial); in qdio_do_eqbs()
134 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "EQBS part:%02x", in qdio_do_eqbs()
139 DBF_DEV_EVENT(DBF_WARN, q->irq_ptr, "EQBS again:%2d", ccq); in qdio_do_eqbs()
142 DBF_ERROR("%4x ccq:%3d", SCH_NO(q), ccq); in qdio_do_eqbs()
143 DBF_ERROR("%4x EQBS ERROR", SCH_NO(q)); in qdio_do_eqbs()
145 q->handler(q->irq_ptr->cdev, QDIO_ERROR_GET_BUF_STATE, q->nr, in qdio_do_eqbs()
146 q->first_to_check, count, q->irq_ptr->int_parm); in qdio_do_eqbs()
153 * @q: queue to manipulate
162 static int qdio_do_sqbs(struct qdio_q *q, unsigned char state, int start, in qdio_do_sqbs() argument
167 int nr = q->nr; in qdio_do_sqbs()
171 qperf_inc(q, sqbs); in qdio_do_sqbs()
173 if (!q->is_input_q) in qdio_do_sqbs()
174 nr += q->irq_ptr->nr_input_qs; in qdio_do_sqbs()
176 ccq = do_sqbs(q->irq_ptr->sch_token, state, nr, &tmp_start, &tmp_count); in qdio_do_sqbs()
186 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "SQBS again:%2d", ccq); in qdio_do_sqbs()
187 qperf_inc(q, sqbs_partial); in qdio_do_sqbs()
190 DBF_ERROR("%4x ccq:%3d", SCH_NO(q), ccq); in qdio_do_sqbs()
191 DBF_ERROR("%4x SQBS ERROR", SCH_NO(q)); in qdio_do_sqbs()
193 q->handler(q->irq_ptr->cdev, QDIO_ERROR_SET_BUF_STATE, q->nr, in qdio_do_sqbs()
194 q->first_to_check, count, q->irq_ptr->int_parm); in qdio_do_sqbs()
203 static inline int get_buf_states(struct qdio_q *q, unsigned int bufnr, in get_buf_states() argument
210 if (is_qebsm(q)) in get_buf_states()
211 return qdio_do_eqbs(q, state, bufnr, count, auto_ack); in get_buf_states()
214 __state = q->slsb.val[bufnr]; in get_buf_states()
228 q->slsb.val[bufnr] == SLSB_P_OUTPUT_PENDING && in get_buf_states()
233 if (q->slsb.val[bufnr] != __state) in get_buf_states()
242 static inline int get_buf_state(struct qdio_q *q, unsigned int bufnr, in get_buf_state() argument
245 return get_buf_states(q, bufnr, state, 1, auto_ack, 0); in get_buf_state()
249 static inline int set_buf_states(struct qdio_q *q, int bufnr, in set_buf_states() argument
254 if (is_qebsm(q)) in set_buf_states()
255 return qdio_do_sqbs(q, state, bufnr, count); in set_buf_states()
261 WRITE_ONCE(q->slsb.val[bufnr], state); in set_buf_states()
271 static inline int set_buf_state(struct qdio_q *q, int bufnr, in set_buf_state() argument
274 return set_buf_states(q, bufnr, state, 1); in set_buf_state()
280 struct qdio_q *q; in qdio_init_buf_states() local
283 for_each_input_queue(irq_ptr, q, i) in qdio_init_buf_states()
284 set_buf_states(q, 0, SLSB_P_INPUT_NOT_INIT, in qdio_init_buf_states()
286 for_each_output_queue(irq_ptr, q, i) in qdio_init_buf_states()
287 set_buf_states(q, 0, SLSB_P_OUTPUT_NOT_INIT, in qdio_init_buf_states()
291 static inline int qdio_siga_sync(struct qdio_q *q, unsigned int output, in qdio_siga_sync() argument
294 unsigned long schid = *((u32 *) &q->irq_ptr->schid); in qdio_siga_sync()
298 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-s:%1d", q->nr); in qdio_siga_sync()
299 qperf_inc(q, siga_sync); in qdio_siga_sync()
301 if (is_qebsm(q)) { in qdio_siga_sync()
302 schid = q->irq_ptr->sch_token; in qdio_siga_sync()
308 DBF_ERROR("%4x SIGA-S:%2d", SCH_NO(q), cc); in qdio_siga_sync()
312 static inline int qdio_siga_sync_q(struct qdio_q *q) in qdio_siga_sync_q() argument
314 if (q->is_input_q) in qdio_siga_sync_q()
315 return qdio_siga_sync(q, 0, q->mask); in qdio_siga_sync_q()
317 return qdio_siga_sync(q, q->mask, 0); in qdio_siga_sync_q()
320 static int qdio_siga_output(struct qdio_q *q, unsigned int count, in qdio_siga_output() argument
323 unsigned long schid = *((u32 *) &q->irq_ptr->schid); in qdio_siga_output()
328 if (queue_type(q) == QDIO_IQDIO_QFMT && !multicast_outbound(q)) { in qdio_siga_output()
335 if (is_qebsm(q)) { in qdio_siga_output()
336 schid = q->irq_ptr->sch_token; in qdio_siga_output()
340 cc = do_siga_output(schid, q->mask, busy_bit, fc, aob); in qdio_siga_output()
354 DBF_DEV_EVENT(DBF_WARN, q->irq_ptr, in qdio_siga_output()
355 "%4x cc2 BB1:%1d", SCH_NO(q), q->nr); in qdio_siga_output()
356 DBF_DEV_EVENT(DBF_WARN, q->irq_ptr, "count:%u", retries); in qdio_siga_output()
361 static inline int qdio_siga_input(struct qdio_q *q) in qdio_siga_input() argument
363 unsigned long schid = *((u32 *) &q->irq_ptr->schid); in qdio_siga_input()
367 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-r:%1d", q->nr); in qdio_siga_input()
368 qperf_inc(q, siga_read); in qdio_siga_input()
370 if (is_qebsm(q)) { in qdio_siga_input()
371 schid = q->irq_ptr->sch_token; in qdio_siga_input()
375 cc = do_siga_input(schid, q->mask, fc); in qdio_siga_input()
377 DBF_ERROR("%4x SIGA-R:%2d", SCH_NO(q), cc); in qdio_siga_input()
381 #define qdio_siga_sync_out(q) qdio_siga_sync(q, ~0U, 0) argument
382 #define qdio_siga_sync_all(q) qdio_siga_sync(q, ~0U, ~0U) argument
384 static inline void qdio_sync_queues(struct qdio_q *q) in qdio_sync_queues() argument
387 if (pci_out_supported(q->irq_ptr)) in qdio_sync_queues()
388 qdio_siga_sync_all(q); in qdio_sync_queues()
390 qdio_siga_sync_q(q); in qdio_sync_queues()
393 int debug_get_buf_state(struct qdio_q *q, unsigned int bufnr, in debug_get_buf_state() argument
396 if (need_siga_sync(q)) in debug_get_buf_state()
397 qdio_siga_sync_q(q); in debug_get_buf_state()
398 return get_buf_state(q, bufnr, state, 0); in debug_get_buf_state()
401 static inline void qdio_stop_polling(struct qdio_q *q) in qdio_stop_polling() argument
403 if (!q->u.in.batch_count) in qdio_stop_polling()
406 qperf_inc(q, stop_polling); in qdio_stop_polling()
409 set_buf_states(q, q->u.in.batch_start, SLSB_P_INPUT_NOT_INIT, in qdio_stop_polling()
410 q->u.in.batch_count); in qdio_stop_polling()
411 q->u.in.batch_count = 0; in qdio_stop_polling()
414 static inline void account_sbals(struct qdio_q *q, unsigned int count) in account_sbals() argument
416 q->q_stats.nr_sbal_total += count; in account_sbals()
417 q->q_stats.nr_sbals[ilog2(count)]++; in account_sbals()
420 static void process_buffer_error(struct qdio_q *q, unsigned int start, in process_buffer_error() argument
423 q->qdio_error = QDIO_ERROR_SLSB_STATE; in process_buffer_error()
426 if (queue_type(q) == QDIO_IQDIO_QFMT && !q->is_input_q && in process_buffer_error()
427 q->sbal[start]->element[15].sflags == 0x10) { in process_buffer_error()
428 qperf_inc(q, target_full); in process_buffer_error()
429 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "OUTFULL FTC:%02x", start); in process_buffer_error()
433 DBF_ERROR("%4x BUF ERROR", SCH_NO(q)); in process_buffer_error()
434 DBF_ERROR((q->is_input_q) ? "IN:%2d" : "OUT:%2d", q->nr); in process_buffer_error()
437 q->sbal[start]->element[14].sflags, in process_buffer_error()
438 q->sbal[start]->element[15].sflags); in process_buffer_error()
441 static inline void inbound_handle_work(struct qdio_q *q, unsigned int start, in inbound_handle_work() argument
446 set_buf_state(q, add_buf(start, count - 1), SLSB_P_INPUT_ACK); in inbound_handle_work()
448 if (!q->u.in.batch_count) in inbound_handle_work()
449 q->u.in.batch_start = start; in inbound_handle_work()
450 q->u.in.batch_count += count; in inbound_handle_work()
453 static int get_inbound_buffer_frontier(struct qdio_q *q, unsigned int start) in get_inbound_buffer_frontier() argument
458 q->timestamp = get_tod_clock_fast(); in get_inbound_buffer_frontier()
460 count = atomic_read(&q->nr_buf_used); in get_inbound_buffer_frontier()
468 count = get_buf_states(q, start, &state, count, 1, 0); in get_inbound_buffer_frontier()
474 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in prim:%1d %02x", q->nr, in get_inbound_buffer_frontier()
477 inbound_handle_work(q, start, count, is_qebsm(q)); in get_inbound_buffer_frontier()
478 if (atomic_sub_return(count, &q->nr_buf_used) == 0) in get_inbound_buffer_frontier()
479 qperf_inc(q, inbound_queue_full); in get_inbound_buffer_frontier()
480 if (q->irq_ptr->perf_stat_enabled) in get_inbound_buffer_frontier()
481 account_sbals(q, count); in get_inbound_buffer_frontier()
484 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in err:%1d %02x", q->nr, in get_inbound_buffer_frontier()
487 process_buffer_error(q, start, count); in get_inbound_buffer_frontier()
488 inbound_handle_work(q, start, count, false); in get_inbound_buffer_frontier()
489 if (atomic_sub_return(count, &q->nr_buf_used) == 0) in get_inbound_buffer_frontier()
490 qperf_inc(q, inbound_queue_full); in get_inbound_buffer_frontier()
491 if (q->irq_ptr->perf_stat_enabled) in get_inbound_buffer_frontier()
492 account_sbals_error(q, count); in get_inbound_buffer_frontier()
495 if (q->irq_ptr->perf_stat_enabled) in get_inbound_buffer_frontier()
496 q->q_stats.nr_sbal_nop++; in get_inbound_buffer_frontier()
497 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in nop:%1d %#02x", in get_inbound_buffer_frontier()
498 q->nr, start); in get_inbound_buffer_frontier()
504 dev_WARN_ONCE(&q->irq_ptr->cdev->dev, 1, in get_inbound_buffer_frontier()
506 state, start, q->nr); in get_inbound_buffer_frontier()
511 static int qdio_inbound_q_moved(struct qdio_q *q, unsigned int start) in qdio_inbound_q_moved() argument
513 return get_inbound_buffer_frontier(q, start); in qdio_inbound_q_moved()
516 static inline int qdio_inbound_q_done(struct qdio_q *q, unsigned int start) in qdio_inbound_q_done() argument
520 if (!atomic_read(&q->nr_buf_used)) in qdio_inbound_q_done()
523 if (need_siga_sync(q)) in qdio_inbound_q_done()
524 qdio_siga_sync_q(q); in qdio_inbound_q_done()
525 get_buf_state(q, start, &state, 0); in qdio_inbound_q_done()
534 static inline unsigned long qdio_aob_for_buffer(struct qdio_output_q *q, in qdio_aob_for_buffer() argument
539 if (!q->aobs[bufnr]) { in qdio_aob_for_buffer()
541 q->aobs[bufnr] = aob; in qdio_aob_for_buffer()
543 if (q->aobs[bufnr]) { in qdio_aob_for_buffer()
544 q->aobs[bufnr]->user1 = (u64) q->sbal_state[bufnr].user; in qdio_aob_for_buffer()
545 phys_aob = virt_to_phys(q->aobs[bufnr]); in qdio_aob_for_buffer()
549 q->sbal_state[bufnr].flags = 0; in qdio_aob_for_buffer()
553 static void qdio_kick_handler(struct qdio_q *q, unsigned int start, in qdio_kick_handler() argument
556 if (unlikely(q->irq_ptr->state != QDIO_IRQ_STATE_ACTIVE)) in qdio_kick_handler()
559 if (q->is_input_q) { in qdio_kick_handler()
560 qperf_inc(q, inbound_handler); in qdio_kick_handler()
561 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "kih s:%02x c:%02x", start, count); in qdio_kick_handler()
563 qperf_inc(q, outbound_handler); in qdio_kick_handler()
564 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "koh: s:%02x c:%02x", in qdio_kick_handler()
568 q->handler(q->irq_ptr->cdev, q->qdio_error, q->nr, start, count, in qdio_kick_handler()
569 q->irq_ptr->int_parm); in qdio_kick_handler()
572 q->qdio_error = 0; in qdio_kick_handler()
575 static inline int qdio_tasklet_schedule(struct qdio_q *q) in qdio_tasklet_schedule() argument
577 if (likely(q->irq_ptr->state == QDIO_IRQ_STATE_ACTIVE)) { in qdio_tasklet_schedule()
578 tasklet_schedule(&q->tasklet); in qdio_tasklet_schedule()
584 static void __qdio_inbound_processing(struct qdio_q *q) in __qdio_inbound_processing() argument
586 unsigned int start = q->first_to_check; in __qdio_inbound_processing()
589 qperf_inc(q, tasklet_inbound); in __qdio_inbound_processing()
591 count = qdio_inbound_q_moved(q, start); in __qdio_inbound_processing()
595 qdio_kick_handler(q, start, count); in __qdio_inbound_processing()
597 q->first_to_check = start; in __qdio_inbound_processing()
599 if (!qdio_inbound_q_done(q, start)) { in __qdio_inbound_processing()
601 qperf_inc(q, tasklet_inbound_resched); in __qdio_inbound_processing()
602 if (!qdio_tasklet_schedule(q)) in __qdio_inbound_processing()
606 qdio_stop_polling(q); in __qdio_inbound_processing()
611 if (!qdio_inbound_q_done(q, start)) { in __qdio_inbound_processing()
612 qperf_inc(q, tasklet_inbound_resched2); in __qdio_inbound_processing()
613 qdio_tasklet_schedule(q); in __qdio_inbound_processing()
619 struct qdio_q *q = (struct qdio_q *)data; in qdio_inbound_processing() local
620 __qdio_inbound_processing(q); in qdio_inbound_processing()
623 static void qdio_check_pending(struct qdio_q *q, unsigned int index) in qdio_check_pending() argument
627 if (get_buf_state(q, index, &state, 0) > 0 && in qdio_check_pending()
629 q->u.out.aobs[index]) { in qdio_check_pending()
630 q->u.out.sbal_state[index].flags |= in qdio_check_pending()
632 q->u.out.aobs[index] = NULL; in qdio_check_pending()
636 static int get_outbound_buffer_frontier(struct qdio_q *q, unsigned int start) in get_outbound_buffer_frontier() argument
641 q->timestamp = get_tod_clock_fast(); in get_outbound_buffer_frontier()
643 if (need_siga_sync(q)) in get_outbound_buffer_frontier()
644 if (((queue_type(q) != QDIO_IQDIO_QFMT) && in get_outbound_buffer_frontier()
645 !pci_out_supported(q->irq_ptr)) || in get_outbound_buffer_frontier()
646 (queue_type(q) == QDIO_IQDIO_QFMT && in get_outbound_buffer_frontier()
647 multicast_outbound(q))) in get_outbound_buffer_frontier()
648 qdio_siga_sync_q(q); in get_outbound_buffer_frontier()
650 count = atomic_read(&q->nr_buf_used); in get_outbound_buffer_frontier()
654 count = get_buf_states(q, start, &state, count, 0, q->u.out.use_cq); in get_outbound_buffer_frontier()
662 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, in get_outbound_buffer_frontier()
663 "out empty:%1d %02x", q->nr, count); in get_outbound_buffer_frontier()
665 atomic_sub(count, &q->nr_buf_used); in get_outbound_buffer_frontier()
666 if (q->irq_ptr->perf_stat_enabled) in get_outbound_buffer_frontier()
667 account_sbals(q, count); in get_outbound_buffer_frontier()
670 process_buffer_error(q, start, count); in get_outbound_buffer_frontier()
671 atomic_sub(count, &q->nr_buf_used); in get_outbound_buffer_frontier()
672 if (q->irq_ptr->perf_stat_enabled) in get_outbound_buffer_frontier()
673 account_sbals_error(q, count); in get_outbound_buffer_frontier()
677 if (q->irq_ptr->perf_stat_enabled) in get_outbound_buffer_frontier()
678 q->q_stats.nr_sbal_nop++; in get_outbound_buffer_frontier()
679 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "out primed:%1d", in get_outbound_buffer_frontier()
680 q->nr); in get_outbound_buffer_frontier()
687 dev_WARN_ONCE(&q->irq_ptr->cdev->dev, 1, in get_outbound_buffer_frontier()
689 state, start, q->nr); in get_outbound_buffer_frontier()
695 static inline int qdio_outbound_q_done(struct qdio_q *q) in qdio_outbound_q_done() argument
697 return atomic_read(&q->nr_buf_used) == 0; in qdio_outbound_q_done()
700 static inline int qdio_outbound_q_moved(struct qdio_q *q, unsigned int start) in qdio_outbound_q_moved() argument
704 count = get_outbound_buffer_frontier(q, start); in qdio_outbound_q_moved()
707 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "out moved:%1d", q->nr); in qdio_outbound_q_moved()
709 if (q->u.out.use_cq) { in qdio_outbound_q_moved()
713 qdio_check_pending(q, QDIO_BUFNR(start + i)); in qdio_outbound_q_moved()
720 static int qdio_kick_outbound_q(struct qdio_q *q, unsigned int count, in qdio_kick_outbound_q() argument
726 if (!need_siga_out(q)) in qdio_kick_outbound_q()
729 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-w:%1d", q->nr); in qdio_kick_outbound_q()
731 qperf_inc(q, siga_write); in qdio_kick_outbound_q()
733 cc = qdio_siga_output(q, count, &busy_bit, aob); in qdio_kick_outbound_q()
743 DBF_ERROR("%4x cc2 BBC:%1d", SCH_NO(q), q->nr); in qdio_kick_outbound_q()
746 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-w cc2:%1d", q->nr); in qdio_kick_outbound_q()
752 DBF_ERROR("%4x SIGA-W:%1d", SCH_NO(q), cc); in qdio_kick_outbound_q()
757 DBF_ERROR("%4x cc2 BB2:%1d", SCH_NO(q), q->nr); in qdio_kick_outbound_q()
763 static void __qdio_outbound_processing(struct qdio_q *q) in __qdio_outbound_processing() argument
765 unsigned int start = q->first_to_check; in __qdio_outbound_processing()
768 qperf_inc(q, tasklet_outbound); in __qdio_outbound_processing()
769 WARN_ON_ONCE(atomic_read(&q->nr_buf_used) < 0); in __qdio_outbound_processing()
771 count = qdio_outbound_q_moved(q, start); in __qdio_outbound_processing()
773 q->first_to_check = add_buf(start, count); in __qdio_outbound_processing()
774 qdio_kick_handler(q, start, count); in __qdio_outbound_processing()
777 if (queue_type(q) == QDIO_ZFCP_QFMT && !pci_out_supported(q->irq_ptr) && in __qdio_outbound_processing()
778 !qdio_outbound_q_done(q)) in __qdio_outbound_processing()
781 if (q->u.out.pci_out_enabled) in __qdio_outbound_processing()
789 if (qdio_outbound_q_done(q)) in __qdio_outbound_processing()
790 del_timer_sync(&q->u.out.timer); in __qdio_outbound_processing()
792 if (!timer_pending(&q->u.out.timer) && in __qdio_outbound_processing()
793 likely(q->irq_ptr->state == QDIO_IRQ_STATE_ACTIVE)) in __qdio_outbound_processing()
794 mod_timer(&q->u.out.timer, jiffies + 10 * HZ); in __qdio_outbound_processing()
798 qdio_tasklet_schedule(q); in __qdio_outbound_processing()
804 struct qdio_q *q = (struct qdio_q *)data; in qdio_outbound_processing() local
805 __qdio_outbound_processing(q); in qdio_outbound_processing()
810 struct qdio_q *q = from_timer(q, t, u.out.timer); in qdio_outbound_timer() local
812 qdio_tasklet_schedule(q); in qdio_outbound_timer()
830 struct qdio_q *q = (struct qdio_q *)data; in tiqdio_inbound_processing() local
832 if (need_siga_sync(q) && need_siga_sync_after_ai(q)) in tiqdio_inbound_processing()
833 qdio_sync_queues(q); in tiqdio_inbound_processing()
836 qdio_check_outbound_pci_queues(q->irq_ptr); in tiqdio_inbound_processing()
838 __qdio_inbound_processing(q); in tiqdio_inbound_processing()
863 struct qdio_q *q; in qdio_int_handler_pci() local
874 for_each_input_queue(irq_ptr, q, i) in qdio_int_handler_pci()
875 tasklet_schedule(&q->tasklet); in qdio_int_handler_pci()
881 for_each_output_queue(irq_ptr, q, i) { in qdio_int_handler_pci()
882 if (qdio_outbound_q_done(q)) in qdio_int_handler_pci()
884 if (need_siga_sync(q) && need_siga_sync_out_after_pci(q)) in qdio_int_handler_pci()
885 qdio_siga_sync_q(q); in qdio_int_handler_pci()
886 qdio_tasklet_schedule(q); in qdio_int_handler_pci()
894 struct qdio_q *q; in qdio_handle_activate_check() local
901 q = irq_ptr->input_qs[0]; in qdio_handle_activate_check()
903 q = irq_ptr->output_qs[0]; in qdio_handle_activate_check()
909 q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE, in qdio_handle_activate_check()
910 q->nr, q->first_to_check, 0, irq_ptr->int_parm); in qdio_handle_activate_check()
1016 struct qdio_q *q; in qdio_shutdown_queues() local
1019 for_each_input_queue(irq_ptr, q, i) in qdio_shutdown_queues()
1020 tasklet_kill(&q->tasklet); in qdio_shutdown_queues()
1022 for_each_output_queue(irq_ptr, q, i) { in qdio_shutdown_queues()
1023 del_timer_sync(&q->u.out.timer); in qdio_shutdown_queues()
1024 tasklet_kill(&q->tasklet); in qdio_shutdown_queues()
1198 struct qdio_q *q = irq_ptr->input_qs[0]; in qdio_detect_hsicq() local
1201 if (irq_ptr->nr_input_qs > 1 && queue_type(q) == QDIO_IQDIO_QFMT) in qdio_detect_hsicq()
1204 for_each_output_queue(irq_ptr, q, i) { in qdio_detect_hsicq()
1206 if (multicast_outbound(q)) in qdio_detect_hsicq()
1208 if (qdio_enable_async_operation(&q->u.out) < 0) { in qdio_detect_hsicq()
1213 qdio_disable_async_operation(&q->u.out); in qdio_detect_hsicq()
1277 /* establish q */ in qdio_establish()
1383 * @q: queue containing the buffers
1388 static int handle_inbound(struct qdio_q *q, unsigned int callflags, in handle_inbound() argument
1393 qperf_inc(q, inbound_call); in handle_inbound()
1396 overlap = min_t(int, count - sub_buf(q->u.in.batch_start, bufnr), in handle_inbound()
1397 q->u.in.batch_count); in handle_inbound()
1399 q->u.in.batch_start = add_buf(q->u.in.batch_start, overlap); in handle_inbound()
1400 q->u.in.batch_count -= overlap; in handle_inbound()
1403 count = set_buf_states(q, bufnr, SLSB_CU_INPUT_EMPTY, count); in handle_inbound()
1404 atomic_add(count, &q->nr_buf_used); in handle_inbound()
1406 if (need_siga_in(q)) in handle_inbound()
1407 return qdio_siga_input(q); in handle_inbound()
1414 * @q: queue containing the buffers
1419 static int handle_outbound(struct qdio_q *q, unsigned int callflags, in handle_outbound() argument
1422 const unsigned int scan_threshold = q->irq_ptr->scan_threshold; in handle_outbound()
1426 qperf_inc(q, outbound_call); in handle_outbound()
1428 count = set_buf_states(q, bufnr, SLSB_CU_OUTPUT_PRIMED, count); in handle_outbound()
1429 used = atomic_add_return(count, &q->nr_buf_used); in handle_outbound()
1432 qperf_inc(q, outbound_queue_full); in handle_outbound()
1435 q->u.out.pci_out_enabled = 1; in handle_outbound()
1436 qperf_inc(q, pci_request_int); in handle_outbound()
1438 q->u.out.pci_out_enabled = 0; in handle_outbound()
1440 if (queue_type(q) == QDIO_IQDIO_QFMT) { in handle_outbound()
1443 if (q->u.out.use_cq && count == 1) in handle_outbound()
1444 phys_aob = qdio_aob_for_buffer(&q->u.out, bufnr); in handle_outbound()
1446 rc = qdio_kick_outbound_q(q, count, phys_aob); in handle_outbound()
1447 } else if (need_siga_sync(q)) { in handle_outbound()
1448 rc = qdio_siga_sync_q(q); in handle_outbound()
1450 get_buf_state(q, prev_buf(bufnr), &state, 0) > 0 && in handle_outbound()
1453 qperf_inc(q, fast_requeue); in handle_outbound()
1455 rc = qdio_kick_outbound_q(q, count, 0); in handle_outbound()
1464 qdio_tasklet_schedule(q); in handle_outbound()
1467 if (!timer_pending(&q->u.out.timer) && in handle_outbound()
1468 likely(q->irq_ptr->state == QDIO_IRQ_STATE_ACTIVE)) in handle_outbound()
1469 mod_timer(&q->u.out.timer, jiffies + HZ); in handle_outbound()
1519 struct qdio_q *q; in qdio_start_irq() local
1526 for_each_input_queue(irq_ptr, q, i) in qdio_start_irq()
1527 qdio_stop_polling(q); in qdio_start_irq()
1538 for_each_input_queue(irq_ptr, q, i) { in qdio_start_irq()
1539 if (!qdio_inbound_q_done(q, q->first_to_check)) in qdio_start_irq()
1554 static int __qdio_inspect_queue(struct qdio_q *q, unsigned int *bufnr, in __qdio_inspect_queue() argument
1557 unsigned int start = q->first_to_check; in __qdio_inspect_queue()
1560 count = q->is_input_q ? qdio_inbound_q_moved(q, start) : in __qdio_inspect_queue()
1561 qdio_outbound_q_moved(q, start); in __qdio_inspect_queue()
1566 *error = q->qdio_error; in __qdio_inspect_queue()
1569 q->first_to_check = add_buf(start, count); in __qdio_inspect_queue()
1570 q->qdio_error = 0; in __qdio_inspect_queue()
1579 struct qdio_q *q; in qdio_inspect_queue() local
1583 q = is_input ? irq_ptr->input_qs[nr] : irq_ptr->output_qs[nr]; in qdio_inspect_queue()
1585 if (need_siga_sync(q)) in qdio_inspect_queue()
1586 qdio_siga_sync_q(q); in qdio_inspect_queue()
1588 return __qdio_inspect_queue(q, bufnr, error); in qdio_inspect_queue()
1607 struct qdio_q *q; in qdio_get_next_buffers() local
1612 q = irq_ptr->input_qs[nr]; in qdio_get_next_buffers()
1618 if (need_siga_sync(q)) in qdio_get_next_buffers()
1619 qdio_sync_queues(q); in qdio_get_next_buffers()
1624 if (unlikely(q->irq_ptr->state != QDIO_IRQ_STATE_ACTIVE)) in qdio_get_next_buffers()
1627 return __qdio_inspect_queue(q, bufnr, error); in qdio_get_next_buffers()