Lines Matching refs:urb
141 static void schedule_nonisoc_etd(struct imx21 *imx21, struct urb *urb);
188 etd->urb = NULL;
215 int etd_num, struct urb *urb, u8 dir, u16 maxpacket)
218 ((u32) usb_pipedevice(urb->pipe)) << DW0_ADDRESS |
219 ((u32) usb_pipeendpoint(urb->pipe) << DW0_ENDPNT) |
221 ((u32) ((urb->dev->speed == USB_SPEED_LOW) ?
223 ((u32) fmt_urb_to_etd[usb_pipetype(urb->pipe)] << DW0_FORMAT) |
395 struct urb_priv *urb_priv = etd->urb->hcpriv;
499 dev_err(imx21->dev, "No urb for queued ep!\n");
503 &ep_priv->ep->urb_list, struct urb, urb_list));
507 static void urb_done(struct usb_hcd *hcd, struct urb *urb, int status)
512 struct ep_priv *ep_priv = urb->ep->hcpriv;
513 struct urb_priv *urb_priv = urb->hcpriv;
515 debug_urb_completed(imx21, urb, status);
516 dev_vdbg(imx21->dev, "urb %p done %d\n", urb, status);
519 kfree(urb->hcpriv);
520 urb->hcpriv = NULL;
521 usb_hcd_unlink_urb_from_ep(hcd, urb);
523 usb_hcd_giveback_urb(hcd, urb, status);
534 urb_done(imx21->hcd, etd->urb, status);
535 etd->urb = NULL;
538 struct urb *urb = list_first_entry(
539 &ep->urb_list, struct urb, urb_list);
541 dev_vdbg(imx21->dev, "next URB %p\n", urb);
542 schedule_nonisoc_etd(imx21, urb);
574 if (etd->urb)
579 urb_priv = td->urb->hcpriv;
586 td->urb->iso_frame_desc[
588 td->urb->iso_frame_desc[td->isoc_index].status = -EXDEV;
590 urb_done(hcd, td->urb, urb_priv->isoc_status);
597 etd->urb = td->urb;
604 dir = usb_pipeout(td->urb->pipe) ? TD_DIR_OUT : TD_DIR_IN;
605 setup_etd_dword0(imx21, etd_num, td->urb, dir, etd->dmem_size);
623 struct urb *urb = etd->urb;
624 struct urb_priv *urb_priv = urb->hcpriv;
628 unsigned int pipe = urb->pipe;
653 "cnt=%d len=%d urb=%p etd=%d index=%d\n",
655 bytes_xfrd, td->len, urb, etd_num, isoc_index);
666 urb->actual_length += bytes_xfrd;
667 urb->iso_frame_desc[isoc_index].actual_length = bytes_xfrd;
668 urb->iso_frame_desc[isoc_index].status = cc_to_error[cc];
671 etd->urb = NULL;
675 urb_done(hcd, urb, urb_priv->isoc_status);
728 struct urb *urb, gfp_t mem_flags)
744 urb_priv->isoc_td = kcalloc(urb->number_of_packets, sizeof(struct td),
767 ret = usb_hcd_link_urb_to_ep(hcd, urb);
771 urb->status = -EINPROGRESS;
772 urb->actual_length = 0;
773 urb->error_count = 0;
774 urb->hcpriv = urb_priv;
778 maxpacket = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
805 urb->start_frame = wrap_frame(cur_frame + 5);
807 urb->start_frame = wrap_frame(list_entry(ep_priv->td_list.prev,
808 struct td, list)->frame + urb->interval);
810 if (frame_after(cur_frame, urb->start_frame)) {
813 urb->start_frame, cur_frame,
814 (urb->transfer_flags & URB_ISO_ASAP) != 0);
816 cur_frame - urb->start_frame),
817 urb->interval);
820 if ((urb->transfer_flags & URB_ISO_ASAP) ||
821 i >= urb->number_of_packets) {
822 urb->start_frame = wrap_frame(urb->start_frame
823 + i * urb->interval);
830 urb_priv->isoc_remaining = urb->number_of_packets - i;
832 for (; i < urb->number_of_packets; i++, td++) {
833 unsigned int offset = urb->iso_frame_desc[i].offset;
835 td->urb = urb;
836 td->len = urb->iso_frame_desc[i].length;
838 td->frame = wrap_frame(urb->start_frame + urb->interval * i);
839 td->dma_handle = urb->transfer_dma + offset;
840 td->cpu_buffer = urb->transfer_buffer + offset;
845 urb->number_of_packets, urb->start_frame, td->frame);
847 debug_urb_submitted(imx21, urb);
854 usb_hcd_unlink_urb_from_ep(hcd, urb);
868 struct urb *urb, struct ep_priv *ep_priv)
870 struct urb_priv *urb_priv = urb->hcpriv;
877 if (etd_num != -1 && imx21->etd[etd_num].urb == urb) {
887 if (td->urb == urb) {
898 static void schedule_nonisoc_etd(struct imx21 *imx21, struct urb *urb)
900 unsigned int pipe = urb->pipe;
901 struct urb_priv *urb_priv = urb->hcpriv;
923 maxpacket = usb_maxpacket(urb->dev, pipe, usb_pipeout(pipe));
930 if (unsuitable_for_dma(urb->setup_dma))
932 urb);
933 etd->dma_handle = urb->setup_dma;
934 etd->cpu_buffer = urb->setup_packet;
947 if (unsuitable_for_dma(urb->transfer_dma))
948 usb_hcd_unmap_urb_for_dma(imx21->hcd, urb);
950 etd->dma_handle = urb->transfer_dma;
951 etd->cpu_buffer = urb->transfer_buffer;
955 count = urb->transfer_buffer_length;
961 urb->dev,
962 usb_pipeendpoint(urb->pipe),
963 usb_pipeout(urb->pipe)))
970 etd->urb = urb;
975 interval = urb->interval;
980 setup_etd_dword0(imx21, etd_num, urb, dir, maxpacket);
1012 debug_urb_queued_for_dmem(imx21, urb);
1034 struct urb *urb = etd->urb;
1036 struct urb_priv *urb_priv = urb->hcpriv;
1049 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
1050 usb_pipeout(urb->pipe),
1072 urb->error_count = 0;
1073 if (!(urb->transfer_flags & URB_SHORT_NOT_OK)
1082 switch (usb_pipetype(urb->pipe)) {
1086 if (urb->transfer_buffer_length > 0)
1092 urb->actual_length += bytes_xfrd;
1107 urb->actual_length += bytes_xfrd;
1109 && (urb->transfer_flags & URB_ZERO_PACKET)
1110 && urb->transfer_buffer_length > 0
1111 && ((urb->transfer_buffer_length %
1112 usb_maxpacket(urb->dev, urb->pipe,
1113 usb_pipeout(urb->pipe))) == 0)) {
1122 urb->actual_length += bytes_xfrd;
1131 schedule_nonisoc_etd(imx21, urb);
1152 struct urb *urb, gfp_t mem_flags)
1155 struct usb_host_endpoint *ep = urb->ep;
1163 "enqueue urb=%p ep=%p len=%d "
1165 urb, ep,
1166 urb->transfer_buffer_length,
1167 urb->transfer_buffer, &urb->transfer_dma,
1168 urb->setup_packet, &urb->setup_dma);
1170 if (usb_pipeisoc(urb->pipe))
1171 return imx21_hc_urb_enqueue_isoc(hcd, ep, urb, mem_flags);
1190 ret = usb_hcd_link_urb_to_ep(hcd, urb);
1194 urb->status = -EINPROGRESS;
1195 urb->actual_length = 0;
1196 urb->error_count = 0;
1197 urb->hcpriv = urb_priv;
1200 switch (usb_pipetype(urb->pipe)) {
1209 debug_urb_submitted(imx21, urb);
1215 debug_urb_queued_for_etd(imx21, urb);
1222 debug_urb_queued_for_etd(imx21, urb);
1231 if (etd->urb == NULL) {
1233 schedule_nonisoc_etd(imx21, urb);
1247 static int imx21_hc_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
1254 struct urb_priv *urb_priv = urb->hcpriv;
1257 dev_vdbg(imx21->dev, "dequeue urb=%p iso=%d status=%d\n",
1258 urb, usb_pipeisoc(urb->pipe), status);
1262 ret = usb_hcd_check_unlink_urb(hcd, urb, status);
1268 debug_urb_unlinked(imx21, urb);
1270 if (usb_pipeisoc(urb->pipe)) {
1271 dequeue_isoc_urb(imx21, urb, ep_priv);
1280 etd->urb = NULL;
1286 urb_done(hcd, urb, status);
1372 if (etd->ep == NULL || etd->urb == NULL) {
1375 " ep=%p urb=%p\n",
1376 etd_num, etd->ep, etd->urb);
1381 if (usb_pipeisoc(etd->urb->pipe))