Lines Matching refs:td
1783 struct xhci_td *td, union xhci_trb *event_trb) in xhci_cleanup_halted_endpoint() argument
1795 xhci_cleanup_stalled_ring(xhci, ep_index, td); in xhci_cleanup_halted_endpoint()
1847 static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td, in finish_td() argument
1878 ep->stopped_td = td; in finish_td()
1890 ep_ring->stream_id, td, event_trb); in finish_td()
1893 while (ep_ring->dequeue != td->last_trb) in finish_td()
1900 urb = td->urb; in finish_td()
1913 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) in finish_td()
1918 list_del_init(&td->td_list); in finish_td()
1920 if (!list_empty(&td->cancelled_td_list)) in finish_td()
1921 list_del_init(&td->cancelled_td_list); in finish_td()
1942 static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td, in process_ctrl_td() argument
1966 } else if (event_trb != td->last_trb) { in process_ctrl_td()
1975 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) in process_ctrl_td()
1981 if (event_trb == ep_ring->dequeue || event_trb == td->last_trb) in process_ctrl_td()
1984 td->urb->actual_length = in process_ctrl_td()
1987 return finish_td(xhci, td, event_trb, event, ep, status, false); in process_ctrl_td()
1990 if (event_trb != ep_ring->dequeue && event_trb != td->last_trb) in process_ctrl_td()
1991 td->urb->actual_length = in process_ctrl_td()
1992 td->urb->transfer_buffer_length - in process_ctrl_td()
1996 return finish_td(xhci, td, event_trb, event, ep, status, false); in process_ctrl_td()
2008 event_trb != td->last_trb) in process_ctrl_td()
2009 td->urb->actual_length = in process_ctrl_td()
2010 td->urb->transfer_buffer_length - in process_ctrl_td()
2012 else if (!td->urb_length_set) in process_ctrl_td()
2013 td->urb->actual_length = 0; in process_ctrl_td()
2015 return finish_td(xhci, td, event_trb, event, ep, status, false); in process_ctrl_td()
2023 if (event_trb == td->last_trb) { in process_ctrl_td()
2024 if (td->urb_length_set) { in process_ctrl_td()
2028 (td->urb->transfer_flags in process_ctrl_td()
2034 td->urb->actual_length = in process_ctrl_td()
2035 td->urb->transfer_buffer_length; in process_ctrl_td()
2044 td->urb_length_set = true; in process_ctrl_td()
2045 td->urb->actual_length = in process_ctrl_td()
2046 td->urb->transfer_buffer_length - in process_ctrl_td()
2054 return finish_td(xhci, td, event_trb, event, ep, status, false); in process_ctrl_td()
2060 static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td, in process_isoc_td() argument
2076 urb_priv = td->urb->hcpriv; in process_isoc_td()
2078 frame = &td->urb->iso_frame_desc[idx]; in process_isoc_td()
2092 frame->status = td->urb->transfer_flags & URB_SHORT_NOT_OK ? in process_isoc_td()
2111 if (event_trb != td->last_trb) in process_isoc_td()
2125 td->urb->actual_length += frame->length; in process_isoc_td()
2129 td->urb->actual_length += frame->actual_length; in process_isoc_td()
2143 td->urb->actual_length += len; in process_isoc_td()
2147 return finish_td(xhci, td, event_trb, event, ep, status, false); in process_isoc_td()
2150 static int skip_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td, in skip_isoc_td() argument
2160 urb_priv = td->urb->hcpriv; in skip_isoc_td()
2162 frame = &td->urb->iso_frame_desc[idx]; in skip_isoc_td()
2171 while (ep_ring->dequeue != td->last_trb) in skip_isoc_td()
2175 return finish_td(xhci, td, NULL, event, ep, status, true); in skip_isoc_td()
2181 static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, in process_bulk_intr_td() argument
2196 if (event_trb != td->last_trb || in process_bulk_intr_td()
2200 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) in process_bulk_intr_td()
2212 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) in process_bulk_intr_td()
2224 td->urb->ep->desc.bEndpointAddress, in process_bulk_intr_td()
2225 td->urb->transfer_buffer_length, in process_bulk_intr_td()
2229 td->urb->actual_length = in process_bulk_intr_td()
2232 if (td->urb->transfer_buffer_length < in process_bulk_intr_td()
2233 td->urb->actual_length) { in process_bulk_intr_td()
2236 td->urb->actual_length = 0; in process_bulk_intr_td()
2240 } else if (event_trb == td->last_trb) { in process_bulk_intr_td()
2242 td->urb->actual_length = in process_bulk_intr_td()
2243 td->urb->transfer_buffer_length - in process_bulk_intr_td()
2245 if (td->urb->transfer_buffer_length < in process_bulk_intr_td()
2246 td->urb->actual_length) { in process_bulk_intr_td()
2250 td->urb->actual_length = 0; in process_bulk_intr_td()
2251 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) in process_bulk_intr_td()
2258 if (td->urb->transfer_flags & URB_SHORT_NOT_OK) in process_bulk_intr_td()
2264 td->urb->actual_length = in process_bulk_intr_td()
2265 td->urb->transfer_buffer_length; in process_bulk_intr_td()
2276 td->urb->actual_length = 0; in process_bulk_intr_td()
2282 td->urb->actual_length += in process_bulk_intr_td()
2289 td->urb->actual_length += in process_bulk_intr_td()
2294 return finish_td(xhci, td, event_trb, event, ep, status, false); in process_bulk_intr_td()
2312 struct xhci_td *td = NULL; in handle_tx_event() local
2513 td = list_entry(ep_ring->td_list.next, struct xhci_td, td_list); in handle_tx_event()
2519 td->last_trb, event_dma, false); in handle_tx_event()
2537 !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) { in handle_tx_event()
2555 ep_ring->dequeue, td->last_trb, in handle_tx_event()
2560 ret = skip_isoc_td(xhci, td, event, ep, &status); in handle_tx_event()
2590 if (usb_endpoint_xfer_control(&td->urb->ep->desc)) in handle_tx_event()
2591 ret = process_ctrl_td(xhci, td, event_trb, event, ep, in handle_tx_event()
2593 else if (usb_endpoint_xfer_isoc(&td->urb->ep->desc)) in handle_tx_event()
2594 ret = process_isoc_td(xhci, td, event_trb, event, ep, in handle_tx_event()
2597 ret = process_bulk_intr_td(xhci, td, event_trb, event, in handle_tx_event()
2615 urb = td->urb; in handle_tx_event()
2949 struct xhci_td *td; in prepare_transfer() local
2967 td = urb_priv->td[td_index]; in prepare_transfer()
2969 INIT_LIST_HEAD(&td->td_list); in prepare_transfer()
2970 INIT_LIST_HEAD(&td->cancelled_td_list); in prepare_transfer()
2978 td->urb = urb; in prepare_transfer()
2980 list_add_tail(&td->td_list, &ep_ring->td_list); in prepare_transfer()
2981 td->start_seg = ep_ring->enq_seg; in prepare_transfer()
2982 td->first_trb = ep_ring->enqueue; in prepare_transfer()
2984 urb_priv->td[td_index] = td; in prepare_transfer()
3139 struct xhci_td *td; in queue_bulk_sg_tx() local
3183 td = urb_priv->td[0]; in queue_bulk_sg_tx()
3233 td->last_trb = ep_ring->enqueue; in queue_bulk_sg_tx()
3237 urb_priv->td[1]->last_trb = ep_ring->enqueue; in queue_bulk_sg_tx()
3309 struct xhci_td *td; in xhci_queue_bulk_tx() local
3368 td = urb_priv->td[0]; in xhci_queue_bulk_tx()
3409 td->last_trb = ep_ring->enqueue; in xhci_queue_bulk_tx()
3413 urb_priv->td[1]->last_trb = ep_ring->enqueue; in xhci_queue_bulk_tx()
3467 struct xhci_td *td; in xhci_queue_ctrl_tx() local
3496 td = urb_priv->td[0]; in xhci_queue_ctrl_tx()
3558 td->last_trb = ep_ring->enqueue; in xhci_queue_ctrl_tx()
3750 struct xhci_td *td; in xhci_queue_isoc_tx() local
3808 td = urb_priv->td[i]; in xhci_queue_isoc_tx()
3857 td->last_trb = ep_ring->enqueue; in xhci_queue_isoc_tx()
3920 list_del_init(&urb_priv->td[i]->td_list); in xhci_queue_isoc_tx()
3927 urb_priv->td[0]->last_trb = ep_ring->enqueue; in xhci_queue_isoc_tx()
3929 td_to_noop(xhci, ep_ring, urb_priv->td[0], true); in xhci_queue_isoc_tx()
3932 ep_ring->enqueue = urb_priv->td[0]->first_trb; in xhci_queue_isoc_tx()
3933 ep_ring->enq_seg = urb_priv->td[0]->start_seg; in xhci_queue_isoc_tx()