Lines Matching refs:urb
71 static void uhci_add_fsbr(struct uhci_hcd *uhci, struct urb *urb) in uhci_add_fsbr() argument
73 struct urb_priv *urbp = urb->hcpriv; in uhci_add_fsbr()
75 if (!(urb->transfer_flags & URB_NO_FSBR)) in uhci_add_fsbr()
236 static void uhci_unlink_isochronous_tds(struct uhci_hcd *uhci, struct urb *urb) in uhci_unlink_isochronous_tds() argument
238 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv; in uhci_unlink_isochronous_tds()
316 struct urb *urb) in uhci_cleanup_queue() argument
318 struct urb_priv *urbp = urb->hcpriv; in uhci_cleanup_queue()
416 pipe = list_entry(qh->queue.next, struct urb_priv, node)->urb->pipe; in uhci_fixup_toggles()
724 struct urb *urb) in uhci_alloc_urb_priv() argument
732 urbp->urb = urb; in uhci_alloc_urb_priv()
733 urb->hcpriv = urbp; in uhci_alloc_urb_priv()
748 urbp->urb); in uhci_free_urb_priv()
790 static int uhci_submit_control(struct uhci_hcd *uhci, struct urb *urb, in uhci_submit_control() argument
796 int len = urb->transfer_buffer_length; in uhci_submit_control()
797 dma_addr_t data = urb->transfer_dma; in uhci_submit_control()
799 struct urb_priv *urbp = urb->hcpriv; in uhci_submit_control()
803 destination = (urb->pipe & PIPE_DEVEP_MASK) | USB_PID_SETUP; in uhci_submit_control()
807 if (urb->dev->speed == USB_SPEED_LOW) in uhci_submit_control()
816 urb->setup_dma); in uhci_submit_control()
827 if (usb_pipeout(urb->pipe) || len == 0) in uhci_submit_control()
896 if (urb->dev->speed == USB_SPEED_LOW || in uhci_submit_control()
897 urb->dev->state != USB_STATE_CONFIGURED) in uhci_submit_control()
901 uhci_add_fsbr(uhci, urb); in uhci_submit_control()
916 static int uhci_submit_common(struct uhci_hcd *uhci, struct urb *urb, in uhci_submit_common() argument
922 int len = urb->transfer_buffer_length; in uhci_submit_common()
926 struct urb_priv *urbp = urb->hcpriv; in uhci_submit_common()
935 destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe); in uhci_submit_common()
936 toggle = usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe), in uhci_submit_common()
937 usb_pipeout(urb->pipe)); in uhci_submit_common()
941 if (urb->dev->speed == USB_SPEED_LOW) in uhci_submit_common()
943 if (usb_pipein(urb->pipe)) in uhci_submit_common()
946 i = urb->num_mapped_sgs; in uhci_submit_common()
948 sg = urb->sg; in uhci_submit_common()
957 data = urb->transfer_dma; in uhci_submit_common()
970 if (!(urb->transfer_flags & URB_SHORT_NOT_OK)) in uhci_submit_common()
1008 if ((urb->transfer_flags & URB_ZERO_PACKET) && in uhci_submit_common()
1009 usb_pipeout(urb->pipe) && len == 0 && in uhci_submit_common()
1010 urb->transfer_buffer_length > 0) { in uhci_submit_common()
1047 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), in uhci_submit_common()
1048 usb_pipeout(urb->pipe), toggle); in uhci_submit_common()
1057 static int uhci_submit_bulk(struct uhci_hcd *uhci, struct urb *urb, in uhci_submit_bulk() argument
1063 if (urb->dev->speed == USB_SPEED_LOW) in uhci_submit_bulk()
1068 ret = uhci_submit_common(uhci, urb, qh); in uhci_submit_bulk()
1070 uhci_add_fsbr(uhci, urb); in uhci_submit_bulk()
1074 static int uhci_submit_interrupt(struct uhci_hcd *uhci, struct urb *urb, in uhci_submit_interrupt() argument
1089 if ((1 << exponent) <= urb->interval) in uhci_submit_interrupt()
1108 } else if (qh->period > urb->interval) in uhci_submit_interrupt()
1111 ret = uhci_submit_common(uhci, urb, qh); in uhci_submit_interrupt()
1113 urb->interval = qh->period; in uhci_submit_interrupt()
1171 static int uhci_result_common(struct uhci_hcd *uhci, struct urb *urb) in uhci_result_common() argument
1173 struct urb_priv *urbp = urb->hcpriv; in uhci_result_common()
1189 urb->actual_length += len; in uhci_result_common()
1196 dev_dbg(&urb->dev->dev, in uhci_result_common()
1219 else if (urb->transfer_flags & URB_SHORT_NOT_OK) in uhci_result_common()
1255 static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb, in uhci_submit_isochronous() argument
1262 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv; in uhci_submit_isochronous()
1265 if (urb->interval >= UHCI_NUMFRAMES || in uhci_submit_isochronous()
1266 urb->number_of_packets >= UHCI_NUMFRAMES) in uhci_submit_isochronous()
1273 qh->period = urb->interval; in uhci_submit_isochronous()
1286 } else if (qh->period != urb->interval) { in uhci_submit_isochronous()
1296 struct urb *lurb; in uhci_submit_isochronous()
1299 struct urb_priv, node)->urb; in uhci_submit_isochronous()
1309 if (urb->transfer_flags & URB_ISO_ASAP) in uhci_submit_isochronous()
1318 frame + (urb->number_of_packets - 1) * in uhci_submit_isochronous()
1321 urb, frame, in uhci_submit_isochronous()
1322 (urb->number_of_packets - 1) * in uhci_submit_isochronous()
1330 frame + urb->number_of_packets * urb->interval)) in uhci_submit_isochronous()
1332 urb->start_frame = frame; in uhci_submit_isochronous()
1335 destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe); in uhci_submit_isochronous()
1337 for (i = 0; i < urb->number_of_packets; i++) { in uhci_submit_isochronous()
1344 uhci_explen(urb->iso_frame_desc[i].length), in uhci_submit_isochronous()
1345 urb->transfer_dma + in uhci_submit_isochronous()
1346 urb->iso_frame_desc[i].offset); in uhci_submit_isochronous()
1353 frame = urb->start_frame; in uhci_submit_isochronous()
1360 qh->iso_packet_desc = &urb->iso_frame_desc[0]; in uhci_submit_isochronous()
1361 qh->iso_frame = urb->start_frame; in uhci_submit_isochronous()
1370 static int uhci_result_isochronous(struct uhci_hcd *uhci, struct urb *urb) in uhci_result_isochronous() argument
1373 struct urb_priv *urbp = urb->hcpriv; in uhci_result_isochronous()
1391 usb_pipeout(urb->pipe)); in uhci_result_isochronous()
1394 urb->actual_length += actlength; in uhci_result_isochronous()
1399 urb->error_count++; in uhci_result_isochronous()
1410 struct urb *urb, gfp_t mem_flags) in uhci_urb_enqueue() argument
1420 ret = usb_hcd_link_urb_to_ep(hcd, urb); in uhci_urb_enqueue()
1425 urbp = uhci_alloc_urb_priv(uhci, urb); in uhci_urb_enqueue()
1429 if (urb->ep->hcpriv) in uhci_urb_enqueue()
1430 qh = urb->ep->hcpriv; in uhci_urb_enqueue()
1432 qh = uhci_alloc_qh(uhci, urb->dev, urb->ep); in uhci_urb_enqueue()
1440 ret = uhci_submit_control(uhci, urb, qh); in uhci_urb_enqueue()
1443 ret = uhci_submit_bulk(uhci, urb, qh); in uhci_urb_enqueue()
1446 ret = uhci_submit_interrupt(uhci, urb, qh); in uhci_urb_enqueue()
1449 urb->error_count = 0; in uhci_urb_enqueue()
1450 ret = uhci_submit_isochronous(uhci, urb, qh); in uhci_urb_enqueue()
1476 usb_hcd_unlink_urb_from_ep(hcd, urb); in uhci_urb_enqueue()
1482 static int uhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) in uhci_urb_dequeue() argument
1490 rc = usb_hcd_check_unlink_urb(hcd, urb, status); in uhci_urb_dequeue()
1494 qh = ((struct urb_priv *) urb->hcpriv)->qh; in uhci_urb_dequeue()
1498 uhci_unlink_isochronous_tds(uhci, urb); in uhci_urb_dequeue()
1503 if (uhci_frame_before_eq(urb->start_frame, uhci->frame_number)) in uhci_urb_dequeue()
1518 struct urb *urb, int status) in uhci_giveback_urb() argument
1522 struct urb_priv *urbp = (struct urb_priv *) urb->hcpriv; in uhci_giveback_urb()
1529 urb->actual_length -= min_t(u32, 8, urb->actual_length); in uhci_giveback_urb()
1537 struct urb *nurb = list_entry(urbp->node.next, in uhci_giveback_urb()
1538 struct urb_priv, node)->urb; in uhci_giveback_urb()
1548 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), in uhci_giveback_urb()
1549 usb_pipeout(urb->pipe), qh->initial_toggle); in uhci_giveback_urb()
1554 usb_hcd_unlink_urb_from_ep(uhci_to_hcd(uhci), urb); in uhci_giveback_urb()
1557 usb_hcd_giveback_urb(uhci_to_hcd(uhci), urb, status); in uhci_giveback_urb()
1579 struct urb *urb; in uhci_scan_qh() local
1584 urb = urbp->urb; in uhci_scan_qh()
1587 status = uhci_result_isochronous(uhci, urb); in uhci_scan_qh()
1589 status = uhci_result_common(uhci, urb); in uhci_scan_qh()
1595 if (urb->unlinked) { in uhci_scan_qh()
1602 uhci_giveback_urb(uhci, qh, urb, status); in uhci_scan_qh()
1617 urb = urbp->urb; in uhci_scan_qh()
1618 if (urb->unlinked) { in uhci_scan_qh()
1623 if (!uhci_cleanup_queue(uhci, qh, urb)) { in uhci_scan_qh()
1627 uhci_giveback_urb(uhci, qh, urb, 0); in uhci_scan_qh()