• Home
  • Raw
  • Download

Lines Matching refs:urb

154 static void schedule_nonisoc_etd(struct imx21 *imx21, struct urb *urb);
201 etd->urb = NULL; in reset_etd()
228 int etd_num, struct urb *urb, u8 dir, u16 maxpacket) in setup_etd_dword0() argument
231 ((u32) usb_pipedevice(urb->pipe)) << DW0_ADDRESS | in setup_etd_dword0()
232 ((u32) usb_pipeendpoint(urb->pipe) << DW0_ENDPNT) | in setup_etd_dword0()
234 ((u32) ((urb->dev->speed == USB_SPEED_LOW) ? in setup_etd_dword0()
236 ((u32) fmt_urb_to_etd[usb_pipetype(urb->pipe)] << DW0_FORMAT) | in setup_etd_dword0()
408 struct urb_priv *urb_priv = etd->urb->hcpriv; in activate_queued_etd()
516 &ep_priv->ep->urb_list, struct urb, urb_list)); in ep_idle()
520 static void urb_done(struct usb_hcd *hcd, struct urb *urb, int status) in urb_done() argument
525 struct ep_priv *ep_priv = urb->ep->hcpriv; in urb_done()
526 struct urb_priv *urb_priv = urb->hcpriv; in urb_done()
528 debug_urb_completed(imx21, urb, status); in urb_done()
529 dev_vdbg(imx21->dev, "urb %p done %d\n", urb, status); in urb_done()
532 kfree(urb->hcpriv); in urb_done()
533 urb->hcpriv = NULL; in urb_done()
534 usb_hcd_unlink_urb_from_ep(hcd, urb); in urb_done()
536 usb_hcd_giveback_urb(hcd, urb, status); in urb_done()
547 urb_done(imx21->hcd, etd->urb, status); in nonisoc_urb_completed_for_etd()
548 etd->urb = NULL; in nonisoc_urb_completed_for_etd()
551 struct urb *urb = list_first_entry( in nonisoc_urb_completed_for_etd() local
552 &ep->urb_list, struct urb, urb_list); in nonisoc_urb_completed_for_etd()
554 dev_vdbg(imx21->dev, "next URB %p\n", urb); in nonisoc_urb_completed_for_etd()
555 schedule_nonisoc_etd(imx21, urb); in nonisoc_urb_completed_for_etd()
587 if (etd->urb) in schedule_isoc_etds()
592 urb_priv = td->urb->hcpriv; in schedule_isoc_etds()
599 td->urb->iso_frame_desc[ in schedule_isoc_etds()
601 td->urb->iso_frame_desc[td->isoc_index].status = -EXDEV; in schedule_isoc_etds()
603 urb_done(hcd, td->urb, urb_priv->isoc_status); in schedule_isoc_etds()
610 etd->urb = td->urb; in schedule_isoc_etds()
617 dir = usb_pipeout(td->urb->pipe) ? TD_DIR_OUT : TD_DIR_IN; in schedule_isoc_etds()
618 setup_etd_dword0(imx21, etd_num, td->urb, dir, etd->dmem_size); in schedule_isoc_etds()
636 struct urb *urb = etd->urb; in isoc_etd_done() local
637 struct urb_priv *urb_priv = urb->hcpriv; in isoc_etd_done()
641 unsigned int pipe = urb->pipe; in isoc_etd_done()
668 bytes_xfrd, td->len, urb, etd_num, isoc_index); in isoc_etd_done()
679 urb->actual_length += bytes_xfrd; in isoc_etd_done()
680 urb->iso_frame_desc[isoc_index].actual_length = bytes_xfrd; in isoc_etd_done()
681 urb->iso_frame_desc[isoc_index].status = cc_to_error[cc]; in isoc_etd_done()
684 etd->urb = NULL; in isoc_etd_done()
688 urb_done(hcd, urb, urb_priv->isoc_status); in isoc_etd_done()
741 struct urb *urb, gfp_t mem_flags) in imx21_hc_urb_enqueue_isoc() argument
758 sizeof(struct td) * urb->number_of_packets, mem_flags); in imx21_hc_urb_enqueue_isoc()
780 ret = usb_hcd_link_urb_to_ep(hcd, urb); in imx21_hc_urb_enqueue_isoc()
784 urb->status = -EINPROGRESS; in imx21_hc_urb_enqueue_isoc()
785 urb->actual_length = 0; in imx21_hc_urb_enqueue_isoc()
786 urb->error_count = 0; in imx21_hc_urb_enqueue_isoc()
787 urb->hcpriv = urb_priv; in imx21_hc_urb_enqueue_isoc()
791 maxpacket = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)); in imx21_hc_urb_enqueue_isoc()
818 urb->start_frame = wrap_frame(cur_frame + 5); in imx21_hc_urb_enqueue_isoc()
820 urb->start_frame = wrap_frame(list_entry(ep_priv->td_list.prev, in imx21_hc_urb_enqueue_isoc()
821 struct td, list)->frame + urb->interval); in imx21_hc_urb_enqueue_isoc()
823 if (frame_after(cur_frame, urb->start_frame)) { in imx21_hc_urb_enqueue_isoc()
826 urb->start_frame, cur_frame, in imx21_hc_urb_enqueue_isoc()
827 (urb->transfer_flags & URB_ISO_ASAP) != 0); in imx21_hc_urb_enqueue_isoc()
829 cur_frame - urb->start_frame), in imx21_hc_urb_enqueue_isoc()
830 urb->interval); in imx21_hc_urb_enqueue_isoc()
833 if ((urb->transfer_flags & URB_ISO_ASAP) || in imx21_hc_urb_enqueue_isoc()
834 i >= urb->number_of_packets) { in imx21_hc_urb_enqueue_isoc()
835 urb->start_frame = wrap_frame(urb->start_frame in imx21_hc_urb_enqueue_isoc()
836 + i * urb->interval); in imx21_hc_urb_enqueue_isoc()
843 urb_priv->isoc_remaining = urb->number_of_packets - i; in imx21_hc_urb_enqueue_isoc()
845 for (; i < urb->number_of_packets; i++, td++) { in imx21_hc_urb_enqueue_isoc()
846 unsigned int offset = urb->iso_frame_desc[i].offset; in imx21_hc_urb_enqueue_isoc()
848 td->urb = urb; in imx21_hc_urb_enqueue_isoc()
849 td->len = urb->iso_frame_desc[i].length; in imx21_hc_urb_enqueue_isoc()
851 td->frame = wrap_frame(urb->start_frame + urb->interval * i); in imx21_hc_urb_enqueue_isoc()
852 td->dma_handle = urb->transfer_dma + offset; in imx21_hc_urb_enqueue_isoc()
853 td->cpu_buffer = urb->transfer_buffer + offset; in imx21_hc_urb_enqueue_isoc()
858 urb->number_of_packets, urb->start_frame, td->frame); in imx21_hc_urb_enqueue_isoc()
860 debug_urb_submitted(imx21, urb); in imx21_hc_urb_enqueue_isoc()
867 usb_hcd_unlink_urb_from_ep(hcd, urb); in imx21_hc_urb_enqueue_isoc()
881 struct urb *urb, struct ep_priv *ep_priv) in dequeue_isoc_urb() argument
883 struct urb_priv *urb_priv = urb->hcpriv; in dequeue_isoc_urb()
890 if (etd_num != -1 && imx21->etd[etd_num].urb == urb) { in dequeue_isoc_urb()
900 if (td->urb == urb) { in dequeue_isoc_urb()
911 static void schedule_nonisoc_etd(struct imx21 *imx21, struct urb *urb) in schedule_nonisoc_etd() argument
913 unsigned int pipe = urb->pipe; in schedule_nonisoc_etd()
914 struct urb_priv *urb_priv = urb->hcpriv; in schedule_nonisoc_etd()
936 maxpacket = usb_maxpacket(urb->dev, pipe, usb_pipeout(pipe)); in schedule_nonisoc_etd()
943 if (unsuitable_for_dma(urb->setup_dma)) in schedule_nonisoc_etd()
945 urb); in schedule_nonisoc_etd()
946 etd->dma_handle = urb->setup_dma; in schedule_nonisoc_etd()
947 etd->cpu_buffer = urb->setup_packet; in schedule_nonisoc_etd()
960 if (unsuitable_for_dma(urb->transfer_dma)) in schedule_nonisoc_etd()
961 usb_hcd_unmap_urb_for_dma(imx21->hcd, urb); in schedule_nonisoc_etd()
963 etd->dma_handle = urb->transfer_dma; in schedule_nonisoc_etd()
964 etd->cpu_buffer = urb->transfer_buffer; in schedule_nonisoc_etd()
968 count = urb->transfer_buffer_length; in schedule_nonisoc_etd()
974 urb->dev, in schedule_nonisoc_etd()
975 usb_pipeendpoint(urb->pipe), in schedule_nonisoc_etd()
976 usb_pipeout(urb->pipe))) in schedule_nonisoc_etd()
983 etd->urb = urb; in schedule_nonisoc_etd()
988 interval = urb->interval; in schedule_nonisoc_etd()
993 setup_etd_dword0(imx21, etd_num, urb, dir, maxpacket); in schedule_nonisoc_etd()
1025 debug_urb_queued_for_dmem(imx21, urb); in schedule_nonisoc_etd()
1047 struct urb *urb = etd->urb; in nonisoc_etd_done() local
1049 struct urb_priv *urb_priv = urb->hcpriv; in nonisoc_etd_done()
1062 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), in nonisoc_etd_done()
1063 usb_pipeout(urb->pipe), in nonisoc_etd_done()
1085 urb->error_count = 0; in nonisoc_etd_done()
1086 if (!(urb->transfer_flags & URB_SHORT_NOT_OK) in nonisoc_etd_done()
1095 switch (usb_pipetype(urb->pipe)) { in nonisoc_etd_done()
1099 if (urb->transfer_buffer_length > 0) in nonisoc_etd_done()
1105 urb->actual_length += bytes_xfrd; in nonisoc_etd_done()
1120 urb->actual_length += bytes_xfrd; in nonisoc_etd_done()
1122 && (urb->transfer_flags & URB_ZERO_PACKET) in nonisoc_etd_done()
1123 && urb->transfer_buffer_length > 0 in nonisoc_etd_done()
1124 && ((urb->transfer_buffer_length % in nonisoc_etd_done()
1125 usb_maxpacket(urb->dev, urb->pipe, in nonisoc_etd_done()
1126 usb_pipeout(urb->pipe))) == 0)) { in nonisoc_etd_done()
1135 urb->actual_length += bytes_xfrd; in nonisoc_etd_done()
1144 schedule_nonisoc_etd(imx21, urb); in nonisoc_etd_done()
1165 struct urb *urb, gfp_t mem_flags) in imx21_hc_urb_enqueue() argument
1168 struct usb_host_endpoint *ep = urb->ep; in imx21_hc_urb_enqueue()
1178 urb, ep, in imx21_hc_urb_enqueue()
1179 urb->transfer_buffer_length, in imx21_hc_urb_enqueue()
1180 urb->transfer_buffer, &urb->transfer_dma, in imx21_hc_urb_enqueue()
1181 urb->setup_packet, &urb->setup_dma); in imx21_hc_urb_enqueue()
1183 if (usb_pipeisoc(urb->pipe)) in imx21_hc_urb_enqueue()
1184 return imx21_hc_urb_enqueue_isoc(hcd, ep, urb, mem_flags); in imx21_hc_urb_enqueue()
1203 ret = usb_hcd_link_urb_to_ep(hcd, urb); in imx21_hc_urb_enqueue()
1207 urb->status = -EINPROGRESS; in imx21_hc_urb_enqueue()
1208 urb->actual_length = 0; in imx21_hc_urb_enqueue()
1209 urb->error_count = 0; in imx21_hc_urb_enqueue()
1210 urb->hcpriv = urb_priv; in imx21_hc_urb_enqueue()
1213 switch (usb_pipetype(urb->pipe)) { in imx21_hc_urb_enqueue()
1222 debug_urb_submitted(imx21, urb); in imx21_hc_urb_enqueue()
1228 debug_urb_queued_for_etd(imx21, urb); in imx21_hc_urb_enqueue()
1235 debug_urb_queued_for_etd(imx21, urb); in imx21_hc_urb_enqueue()
1244 if (etd->urb == NULL) { in imx21_hc_urb_enqueue()
1246 schedule_nonisoc_etd(imx21, urb); in imx21_hc_urb_enqueue()
1260 static int imx21_hc_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, in imx21_hc_urb_dequeue() argument
1267 struct urb_priv *urb_priv = urb->hcpriv; in imx21_hc_urb_dequeue()
1271 urb, usb_pipeisoc(urb->pipe), status); in imx21_hc_urb_dequeue()
1275 ret = usb_hcd_check_unlink_urb(hcd, urb, status); in imx21_hc_urb_dequeue()
1281 debug_urb_unlinked(imx21, urb); in imx21_hc_urb_dequeue()
1283 if (usb_pipeisoc(urb->pipe)) { in imx21_hc_urb_dequeue()
1284 dequeue_isoc_urb(imx21, urb, ep_priv); in imx21_hc_urb_dequeue()
1293 etd->urb = NULL; in imx21_hc_urb_dequeue()
1299 urb_done(hcd, urb, status); in imx21_hc_urb_dequeue()
1385 if (etd->ep == NULL || etd->urb == NULL) { in process_etds()
1389 etd_num, etd->ep, etd->urb); in process_etds()
1394 if (usb_pipeisoc(etd->urb->pipe)) in process_etds()