Lines Matching refs:qh
154 dbg_qh (const char *label, struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in dbg_qh() argument
156 struct fusbh200_qh_hw *hw = qh->hw; in dbg_qh()
159 qh, hw->hw_next, hw->hw_info1, hw->hw_info2, hw->hw_current); in dbg_qh()
366 struct fusbh200_qh *qh, in qh_lines() argument
379 struct fusbh200_qh_hw *hw = qh->hw; in qh_lines()
397 qh, scratch & 0x007f, in qh_lines()
409 list_for_each_entry(td, &qh->qtd_list, qtd_list) { in qh_lines()
460 struct fusbh200_qh *qh; in fill_async_buffer() local
474 for (qh = fusbh200->async->qh_next.qh; size > 0 && qh; qh = qh->qh_next.qh) in fill_async_buffer()
475 qh_lines (fusbh200, qh, &next, &size); in fill_async_buffer()
481 for (qh = fusbh200->async_unlink; size > 0 && qh; in fill_async_buffer()
482 qh = qh->unlink_next) in fill_async_buffer()
483 qh_lines (fusbh200, qh, &next, &size); in fill_async_buffer()
534 hw = p.qh->hw; in fill_periodic_buffer()
536 p.qh->period, in fill_periodic_buffer()
541 p.qh); in fill_periodic_buffer()
548 if (p.qh->qh_next.ptr) { in fill_periodic_buffer()
566 &p.qh->qtd_list, in fill_periodic_buffer()
583 p.qh->usecs, p.qh->c_usecs, in fill_periodic_buffer()
588 seen [seen_count++].qh = p.qh; in fill_periodic_buffer()
592 p = p.qh->qh_next; in fill_periodic_buffer()
1001 static void start_unlink_intr(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh);
1002 static void end_unlink_intr(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh);
1219 struct fusbh200_qh *qh = fusbh200->intr_unlink; in fusbh200_handle_intr_unlinks() local
1221 if (!stopped && qh->unlink_cycle == fusbh200->intr_unlink_cycle) in fusbh200_handle_intr_unlinks()
1223 fusbh200->intr_unlink = qh->unlink_next; in fusbh200_handle_intr_unlinks()
1224 qh->unlink_next = NULL; in fusbh200_handle_intr_unlinks()
1225 end_unlink_intr(fusbh200, qh); in fusbh200_handle_intr_unlinks()
1866 static void qh_destroy(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in qh_destroy() argument
1869 if (!list_empty (&qh->qtd_list) || qh->qh_next.ptr) { in qh_destroy()
1873 if (qh->dummy) in qh_destroy()
1874 fusbh200_qtd_free (fusbh200, qh->dummy); in qh_destroy()
1875 dma_pool_free(fusbh200->qh_pool, qh->hw, qh->qh_dma); in qh_destroy()
1876 kfree(qh); in qh_destroy()
1881 struct fusbh200_qh *qh; in fusbh200_qh_alloc() local
1884 qh = kzalloc(sizeof *qh, GFP_ATOMIC); in fusbh200_qh_alloc()
1885 if (!qh) in fusbh200_qh_alloc()
1887 qh->hw = (struct fusbh200_qh_hw *) in fusbh200_qh_alloc()
1889 if (!qh->hw) in fusbh200_qh_alloc()
1891 memset(qh->hw, 0, sizeof *qh->hw); in fusbh200_qh_alloc()
1892 qh->qh_dma = dma; in fusbh200_qh_alloc()
1894 INIT_LIST_HEAD (&qh->qtd_list); in fusbh200_qh_alloc()
1897 qh->dummy = fusbh200_qtd_alloc (fusbh200, flags); in fusbh200_qh_alloc()
1898 if (qh->dummy == NULL) { in fusbh200_qh_alloc()
1903 return qh; in fusbh200_qh_alloc()
1905 dma_pool_free(fusbh200->qh_pool, qh->hw, qh->qh_dma); in fusbh200_qh_alloc()
1907 kfree(qh); in fusbh200_qh_alloc()
2080 qh_update (struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh, struct fusbh200_qtd *qtd) in qh_update() argument
2082 struct fusbh200_qh_hw *hw = qh->hw; in qh_update()
2085 BUG_ON(qh->qh_state != QH_STATE_IDLE); in qh_update()
2098 is_out = qh->is_out; in qh_update()
2100 if (unlikely (!usb_gettoggle (qh->dev, epnum, is_out))) { in qh_update()
2102 usb_settoggle (qh->dev, epnum, is_out, 1); in qh_update()
2114 qh_refresh (struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in qh_refresh() argument
2118 if (list_empty (&qh->qtd_list)) in qh_refresh()
2119 qtd = qh->dummy; in qh_refresh()
2121 qtd = list_entry (qh->qtd_list.next, in qh_refresh()
2130 if (cpu_to_hc32(fusbh200, qtd->qtd_dma) == qh->hw->hw_current) { in qh_refresh()
2131 qh->hw->hw_qtd_next = qtd->hw_next; in qh_refresh()
2137 qh_update (fusbh200, qh, qtd); in qh_refresh()
2142 static void qh_link_async(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh);
2148 struct fusbh200_qh *qh = ep->hcpriv; in fusbh200_clear_tt_buffer_complete() local
2152 qh->clearing_tt = 0; in fusbh200_clear_tt_buffer_complete()
2153 if (qh->qh_state == QH_STATE_IDLE && !list_empty(&qh->qtd_list) in fusbh200_clear_tt_buffer_complete()
2155 qh_link_async(fusbh200, qh); in fusbh200_clear_tt_buffer_complete()
2159 static void fusbh200_clear_tt_buffer(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh, in fusbh200_clear_tt_buffer() argument
2169 if (urb->dev->tt && !usb_pipeint(urb->pipe) && !qh->clearing_tt) { in fusbh200_clear_tt_buffer()
2180 qh->clearing_tt = 1; in fusbh200_clear_tt_buffer()
2254 struct fusbh200_qh *qh = (struct fusbh200_qh *) urb->hcpriv; in fusbh200_urb_done() local
2257 if ((qh->hw->hw_info2 & cpu_to_hc32(fusbh200, QH_SMASK)) != 0) { in fusbh200_urb_done()
2290 static int qh_schedule (struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh);
2298 qh_completions (struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in qh_completions() argument
2300 struct fusbh200_qtd *last, *end = qh->dummy; in qh_completions()
2306 struct fusbh200_qh_hw *hw = qh->hw; in qh_completions()
2308 if (unlikely (list_empty (&qh->qtd_list))) in qh_completions()
2321 state = qh->qh_state; in qh_completions()
2322 qh->qh_state = QH_STATE_COMPLETING; in qh_completions()
2328 qh->needs_rescan = 0; in qh_completions()
2335 list_for_each_safe (entry, tmp, &qh->qtd_list) { in qh_completions()
2375 qh); in qh_completions()
2387 ++qh->xacterrs < QH_XACTERR_MAX && in qh_completions()
2391 qtd->length - QTD_LENGTH(token), qtd->length, qh->xacterrs); in qh_completions()
2454 fusbh200_clear_tt_buffer(fusbh200, qh, urb, token); in qh_completions()
2488 fusbh200_clear_tt_buffer(fusbh200, qh, urb, in qh_completions()
2496 if (stopped && qtd->qtd_list.prev != &qh->qtd_list) { in qh_completions()
2507 qh->xacterrs = 0; in qh_completions()
2518 if (unlikely(qh->needs_rescan)) { in qh_completions()
2529 qh->needs_rescan = 0; in qh_completions()
2533 qh->qh_state = state; in qh_completions()
2542 qh_refresh(fusbh200, qh); in qh_completions()
2558 qh->needs_rescan = 1; in qh_completions()
2788 struct fusbh200_qh *qh = fusbh200_qh_alloc (fusbh200, flags); in qh_make() local
2795 if (!qh) in qh_make()
2796 return qh; in qh_make()
2825 qh->usecs = NS_TO_US(usb_calc_bus_time(USB_SPEED_HIGH, in qh_make()
2828 qh->start = NO_FRAME; in qh_make()
2831 qh->c_usecs = 0; in qh_make()
2832 qh->gap_uf = 0; in qh_make()
2834 qh->period = urb->interval >> 3; in qh_make()
2835 if (qh->period == 0 && urb->interval != 1) { in qh_make()
2841 } else if (qh->period > fusbh200->periodic_size) { in qh_make()
2842 qh->period = fusbh200->periodic_size; in qh_make()
2843 urb->interval = qh->period << 3; in qh_make()
2849 qh->gap_uf = 1 + usb_calc_bus_time (urb->dev->speed, in qh_make()
2854 qh->c_usecs = qh->usecs + HS_USECS (0); in qh_make()
2855 qh->usecs = HS_USECS (1); in qh_make()
2857 qh->usecs += HS_USECS (1); in qh_make()
2858 qh->c_usecs = HS_USECS (0); in qh_make()
2862 qh->tt_usecs = NS_TO_US (think_time + in qh_make()
2865 qh->period = urb->interval; in qh_make()
2866 if (qh->period > fusbh200->periodic_size) { in qh_make()
2867 qh->period = fusbh200->periodic_size; in qh_make()
2868 urb->interval = qh->period; in qh_make()
2874 qh->dev = urb->dev; in qh_make()
2938 qh_destroy(fusbh200, qh); in qh_make()
2945 qh->qh_state = QH_STATE_IDLE; in qh_make()
2946 hw = qh->hw; in qh_make()
2949 qh->is_out = !is_input; in qh_make()
2951 qh_refresh (fusbh200, qh); in qh_make()
2952 return qh; in qh_make()
2976 WARN_ON(fusbh200->async->qh_next.qh || fusbh200->async_unlink); in disable_async()
2984 static void qh_link_async (struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in qh_link_async() argument
2986 __hc32 dma = QH_NEXT(fusbh200, qh->qh_dma); in qh_link_async()
2990 if (unlikely(qh->clearing_tt)) in qh_link_async()
2993 WARN_ON(qh->qh_state != QH_STATE_IDLE); in qh_link_async()
2996 qh_refresh(fusbh200, qh); in qh_link_async()
3000 qh->qh_next = head->qh_next; in qh_link_async()
3001 qh->hw->hw_next = head->hw->hw_next; in qh_link_async()
3004 head->qh_next.qh = qh; in qh_link_async()
3007 qh->xacterrs = 0; in qh_link_async()
3008 qh->qh_state = QH_STATE_LINKED; in qh_link_async()
3030 struct fusbh200_qh *qh = NULL; in qh_append_tds() local
3033 qh = (struct fusbh200_qh *) *ptr; in qh_append_tds()
3034 if (unlikely (qh == NULL)) { in qh_append_tds()
3036 qh = qh_make (fusbh200, urb, GFP_ATOMIC); in qh_append_tds()
3037 *ptr = qh; in qh_append_tds()
3039 if (likely (qh != NULL)) { in qh_append_tds()
3053 qh->hw->hw_info1 &= ~qh_addr_mask; in qh_append_tds()
3072 dummy = qh->dummy; in qh_append_tds()
3080 list_splice_tail(qtd_list, &qh->qtd_list); in qh_append_tds()
3083 qh->dummy = qtd; in qh_append_tds()
3087 qtd = list_entry (qh->qtd_list.prev, in qh_append_tds()
3095 urb->hcpriv = qh; in qh_append_tds()
3098 return qh; in qh_append_tds()
3112 struct fusbh200_qh *qh = NULL; in submit_async() local
3139 qh = qh_append_tds(fusbh200, urb, qtd_list, epnum, &urb->ep->hcpriv); in submit_async()
3140 if (unlikely(qh == NULL)) { in submit_async()
3149 if (likely (qh->qh_state == QH_STATE_IDLE)) in submit_async()
3150 qh_link_async(fusbh200, qh); in submit_async()
3153 if (unlikely (qh == NULL)) in submit_async()
3160 static void single_unlink_async(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in single_unlink_async() argument
3165 qh->qh_state = QH_STATE_UNLINK; in single_unlink_async()
3167 fusbh200->async_unlink_last->unlink_next = qh; in single_unlink_async()
3169 fusbh200->async_unlink = qh; in single_unlink_async()
3170 fusbh200->async_unlink_last = qh; in single_unlink_async()
3174 while (prev->qh_next.qh != qh) in single_unlink_async()
3175 prev = prev->qh_next.qh; in single_unlink_async()
3177 prev->hw->hw_next = qh->hw->hw_next; in single_unlink_async()
3178 prev->qh_next = qh->qh_next; in single_unlink_async()
3179 if (fusbh200->qh_scan_next == qh) in single_unlink_async()
3180 fusbh200->qh_scan_next = qh->qh_next.qh; in single_unlink_async()
3217 struct fusbh200_qh *qh; in end_unlink_async() local
3223 qh = fusbh200->async_iaa; in end_unlink_async()
3224 fusbh200->async_iaa = qh->unlink_next; in end_unlink_async()
3225 qh->unlink_next = NULL; in end_unlink_async()
3227 qh->qh_state = QH_STATE_IDLE; in end_unlink_async()
3228 qh->qh_next.qh = NULL; in end_unlink_async()
3230 qh_completions(fusbh200, qh); in end_unlink_async()
3231 if (!list_empty(&qh->qtd_list) && in end_unlink_async()
3233 qh_link_async(fusbh200, qh); in end_unlink_async()
3248 struct fusbh200_qh *qh, *next; in unlink_empty_async() local
3253 next = fusbh200->async->qh_next.qh; in unlink_empty_async()
3255 qh = next; in unlink_empty_async()
3256 next = qh->qh_next.qh; in unlink_empty_async()
3258 if (list_empty(&qh->qtd_list) && in unlink_empty_async()
3259 qh->qh_state == QH_STATE_LINKED) { in unlink_empty_async()
3260 if (!stopped && qh->unlink_cycle == in unlink_empty_async()
3264 single_unlink_async(fusbh200, qh); in unlink_empty_async()
3282 static void start_unlink_async(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in start_unlink_async() argument
3289 if (qh->qh_state != QH_STATE_LINKED) { in start_unlink_async()
3290 if (qh->qh_state == QH_STATE_COMPLETING) in start_unlink_async()
3291 qh->needs_rescan = 1; in start_unlink_async()
3295 single_unlink_async(fusbh200, qh); in start_unlink_async()
3303 struct fusbh200_qh *qh; in scan_async() local
3306 fusbh200->qh_scan_next = fusbh200->async->qh_next.qh; in scan_async()
3308 qh = fusbh200->qh_scan_next; in scan_async()
3309 fusbh200->qh_scan_next = qh->qh_next.qh; in scan_async()
3312 if (!list_empty(&qh->qtd_list)) { in scan_async()
3322 temp = qh_completions(fusbh200, qh); in scan_async()
3323 if (qh->needs_rescan) { in scan_async()
3324 start_unlink_async(fusbh200, qh); in scan_async()
3325 } else if (list_empty(&qh->qtd_list) in scan_async()
3326 && qh->qh_state == QH_STATE_LINKED) { in scan_async()
3327 qh->unlink_cycle = fusbh200->async_unlink_cycle; in scan_async()
3376 return &periodic->qh->qh_next; in periodic_next_shadow()
3391 return &periodic->qh->hw->hw_next; in shadow_next_periodic()
3439 hw = q->qh->hw; in periodic_usecs()
3442 usecs += q->qh->usecs; in periodic_usecs()
3446 usecs += q->qh->c_usecs; in periodic_usecs()
3448 q = &q->qh->qh_next; in periodic_usecs()
3522 hw = here.qh->hw; in tt_no_collision()
3523 if (same_tt (dev, here.qh->dev)) { in tt_no_collision()
3534 here = here.qh->qh_next; in tt_no_collision()
3584 static void qh_link_periodic(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in qh_link_periodic() argument
3587 unsigned period = qh->period; in qh_link_periodic()
3589 dev_dbg (&qh->dev->dev, in qh_link_periodic()
3591 period, hc32_to_cpup(fusbh200, &qh->hw->hw_info2) in qh_link_periodic()
3593 qh, qh->start, qh->usecs, qh->c_usecs); in qh_link_periodic()
3599 for (i = qh->start; i < fusbh200->periodic_size; i += period) { in qh_link_periodic()
3618 while (here.ptr && qh != here.qh) { in qh_link_periodic()
3619 if (qh->period > here.qh->period) in qh_link_periodic()
3621 prev = &here.qh->qh_next; in qh_link_periodic()
3622 hw_p = &here.qh->hw->hw_next; in qh_link_periodic()
3626 if (qh != here.qh) { in qh_link_periodic()
3627 qh->qh_next = here; in qh_link_periodic()
3628 if (here.qh) in qh_link_periodic()
3629 qh->hw->hw_next = *hw_p; in qh_link_periodic()
3631 prev->qh = qh; in qh_link_periodic()
3632 *hw_p = QH_NEXT (fusbh200, qh->qh_dma); in qh_link_periodic()
3635 qh->qh_state = QH_STATE_LINKED; in qh_link_periodic()
3636 qh->xacterrs = 0; in qh_link_periodic()
3639 fusbh200_to_hcd(fusbh200)->self.bandwidth_allocated += qh->period in qh_link_periodic()
3640 ? ((qh->usecs + qh->c_usecs) / qh->period) in qh_link_periodic()
3641 : (qh->usecs * 8); in qh_link_periodic()
3643 list_add(&qh->intr_node, &fusbh200->intr_qh_list); in qh_link_periodic()
3650 static void qh_unlink_periodic(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in qh_unlink_periodic() argument
3671 if ((period = qh->period) == 0) in qh_unlink_periodic()
3674 for (i = qh->start; i < fusbh200->periodic_size; i += period) in qh_unlink_periodic()
3675 periodic_unlink (fusbh200, i, qh); in qh_unlink_periodic()
3678 fusbh200_to_hcd(fusbh200)->self.bandwidth_allocated -= qh->period in qh_unlink_periodic()
3679 ? ((qh->usecs + qh->c_usecs) / qh->period) in qh_unlink_periodic()
3680 : (qh->usecs * 8); in qh_unlink_periodic()
3682 dev_dbg (&qh->dev->dev, in qh_unlink_periodic()
3684 qh->period, in qh_unlink_periodic()
3685 hc32_to_cpup(fusbh200, &qh->hw->hw_info2) & (QH_CMASK | QH_SMASK), in qh_unlink_periodic()
3686 qh, qh->start, qh->usecs, qh->c_usecs); in qh_unlink_periodic()
3689 qh->qh_state = QH_STATE_UNLINK; in qh_unlink_periodic()
3690 qh->qh_next.ptr = NULL; in qh_unlink_periodic()
3692 if (fusbh200->qh_scan_next == qh) in qh_unlink_periodic()
3693 fusbh200->qh_scan_next = list_entry(qh->intr_node.next, in qh_unlink_periodic()
3695 list_del(&qh->intr_node); in qh_unlink_periodic()
3698 static void start_unlink_intr(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in start_unlink_intr() argument
3704 if (qh->qh_state != QH_STATE_LINKED) { in start_unlink_intr()
3705 if (qh->qh_state == QH_STATE_COMPLETING) in start_unlink_intr()
3706 qh->needs_rescan = 1; in start_unlink_intr()
3710 qh_unlink_periodic (fusbh200, qh); in start_unlink_intr()
3720 qh->unlink_cycle = fusbh200->intr_unlink_cycle; in start_unlink_intr()
3724 fusbh200->intr_unlink_last->unlink_next = qh; in start_unlink_intr()
3726 fusbh200->intr_unlink = qh; in start_unlink_intr()
3727 fusbh200->intr_unlink_last = qh; in start_unlink_intr()
3733 else if (fusbh200->intr_unlink == qh) { in start_unlink_intr()
3739 static void end_unlink_intr(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in end_unlink_intr() argument
3741 struct fusbh200_qh_hw *hw = qh->hw; in end_unlink_intr()
3744 qh->qh_state = QH_STATE_IDLE; in end_unlink_intr()
3747 qh_completions(fusbh200, qh); in end_unlink_intr()
3750 if (!list_empty(&qh->qtd_list) && fusbh200->rh_state == FUSBH200_RH_RUNNING) { in end_unlink_intr()
3751 rc = qh_schedule(fusbh200, qh); in end_unlink_intr()
3761 qh, rc); in end_unlink_intr()
3818 const struct fusbh200_qh *qh, in check_intr_schedule() argument
3825 if (qh->c_usecs && uframe >= 6) /* FSTN territory? */ in check_intr_schedule()
3828 if (!check_period (fusbh200, frame, uframe, qh->period, qh->usecs)) in check_intr_schedule()
3830 if (!qh->c_usecs) { in check_intr_schedule()
3843 mask = 0x03 << (uframe + qh->gap_uf); in check_intr_schedule()
3847 if (tt_no_collision (fusbh200, qh->period, qh->dev, frame, mask)) { in check_intr_schedule()
3848 if (!check_period (fusbh200, frame, uframe + qh->gap_uf + 1, in check_intr_schedule()
3849 qh->period, qh->c_usecs)) in check_intr_schedule()
3851 if (!check_period (fusbh200, frame, uframe + qh->gap_uf, in check_intr_schedule()
3852 qh->period, qh->c_usecs)) in check_intr_schedule()
3863 static int qh_schedule(struct fusbh200_hcd *fusbh200, struct fusbh200_qh *qh) in qh_schedule() argument
3869 struct fusbh200_qh_hw *hw = qh->hw; in qh_schedule()
3871 qh_refresh(fusbh200, qh); in qh_schedule()
3873 frame = qh->start; in qh_schedule()
3876 if (frame < qh->period) { in qh_schedule()
3879 qh, &c_mask); in qh_schedule()
3891 if (qh->period) { in qh_schedule()
3894 for (i = qh->period; status && i > 0; --i) { in qh_schedule()
3895 frame = ++fusbh200->random_frame % qh->period; in qh_schedule()
3898 frame, uframe, qh, in qh_schedule()
3908 status = check_intr_schedule (fusbh200, 0, 0, qh, &c_mask); in qh_schedule()
3912 qh->start = frame; in qh_schedule()
3916 hw->hw_info2 |= qh->period in qh_schedule()
3921 fusbh200_dbg (fusbh200, "reused qh %p schedule\n", qh); in qh_schedule()
3924 qh_link_periodic(fusbh200, qh); in qh_schedule()
3937 struct fusbh200_qh *qh; in intr_submit() local
3956 qh = qh_append_tds(fusbh200, urb, &empty, epnum, &urb->ep->hcpriv); in intr_submit()
3957 if (qh == NULL) { in intr_submit()
3961 if (qh->qh_state == QH_STATE_IDLE) { in intr_submit()
3962 if ((status = qh_schedule (fusbh200, qh)) != 0) in intr_submit()
3967 qh = qh_append_tds(fusbh200, urb, qtd_list, epnum, &urb->ep->hcpriv); in intr_submit()
3968 BUG_ON (qh == NULL); in intr_submit()
3986 struct fusbh200_qh *qh; in scan_intr() local
3988 list_for_each_entry_safe(qh, fusbh200->qh_scan_next, &fusbh200->intr_qh_list, in scan_intr()
3992 if (!list_empty(&qh->qtd_list)) { in scan_intr()
4002 temp = qh_completions(fusbh200, qh); in scan_intr()
4003 if (unlikely(qh->needs_rescan || in scan_intr()
4004 (list_empty(&qh->qtd_list) && in scan_intr()
4005 qh->qh_state == QH_STATE_LINKED))) in scan_intr()
4006 start_unlink_intr(fusbh200, qh); in scan_intr()
5121 fusbh200->async->qh_next.qh = NULL; in hcd_fusbh200_init()
5451 struct fusbh200_qh *qh; in fusbh200_urb_dequeue() local
5464 qh = (struct fusbh200_qh *) urb->hcpriv; in fusbh200_urb_dequeue()
5465 if (!qh) in fusbh200_urb_dequeue()
5467 switch (qh->qh_state) { in fusbh200_urb_dequeue()
5470 start_unlink_async(fusbh200, qh); in fusbh200_urb_dequeue()
5478 qh_completions(fusbh200, qh); in fusbh200_urb_dequeue()
5484 qh = (struct fusbh200_qh *) urb->hcpriv; in fusbh200_urb_dequeue()
5485 if (!qh) in fusbh200_urb_dequeue()
5487 switch (qh->qh_state) { in fusbh200_urb_dequeue()
5490 start_unlink_intr(fusbh200, qh); in fusbh200_urb_dequeue()
5493 qh_completions (fusbh200, qh); in fusbh200_urb_dequeue()
5497 qh, qh->qh_state); in fusbh200_urb_dequeue()
5523 struct fusbh200_qh *qh, *tmp; in fusbh200_endpoint_disable() local
5530 qh = ep->hcpriv; in fusbh200_endpoint_disable()
5531 if (!qh) in fusbh200_endpoint_disable()
5537 if (qh->hw == NULL) { in fusbh200_endpoint_disable()
5549 qh->qh_state = QH_STATE_IDLE; in fusbh200_endpoint_disable()
5550 switch (qh->qh_state) { in fusbh200_endpoint_disable()
5553 for (tmp = fusbh200->async->qh_next.qh; in fusbh200_endpoint_disable()
5554 tmp && tmp != qh; in fusbh200_endpoint_disable()
5555 tmp = tmp->qh_next.qh) in fusbh200_endpoint_disable()
5561 start_unlink_async(fusbh200, qh); in fusbh200_endpoint_disable()
5570 if (qh->clearing_tt) in fusbh200_endpoint_disable()
5572 if (list_empty (&qh->qtd_list)) { in fusbh200_endpoint_disable()
5573 qh_destroy(fusbh200, qh); in fusbh200_endpoint_disable()
5582 qh, ep->desc.bEndpointAddress, qh->qh_state, in fusbh200_endpoint_disable()
5583 list_empty (&qh->qtd_list) ? "" : "(has tds)"); in fusbh200_endpoint_disable()
5595 struct fusbh200_qh *qh; in fusbh200_endpoint_reset() local
5605 qh = ep->hcpriv; in fusbh200_endpoint_reset()
5612 if (qh) { in fusbh200_endpoint_reset()
5613 usb_settoggle(qh->dev, epnum, is_out, 0); in fusbh200_endpoint_reset()
5614 if (!list_empty(&qh->qtd_list)) { in fusbh200_endpoint_reset()
5616 } else if (qh->qh_state == QH_STATE_LINKED || in fusbh200_endpoint_reset()
5617 qh->qh_state == QH_STATE_COMPLETING) { in fusbh200_endpoint_reset()
5624 start_unlink_async(fusbh200, qh); in fusbh200_endpoint_reset()
5626 start_unlink_intr(fusbh200, qh); in fusbh200_endpoint_reset()