Lines Matching refs:urb
480 struct urb *urb = context;
482 if (urb->dev->tt)
483 *hub_addr = urb->dev->tt->hub->devnum;
486 *hub_port = urb->dev->ttport;
1845 struct dwc2_hcd_urb *urb, struct dwc2_qh *qh,
1858 dev_speed = dwc2_host_get_speed(hsotg, urb->priv);
1874 dwc2_hcd_qtd_init(qtd, urb);
1888 !(qtd->urb->flags & URB_GIVEBACK_ASAP))
1905 struct dwc2_hcd_urb *urb)
1910 urb_qtd = urb->qtd;
1922 urb->priv = NULL;
2307 struct dwc2_qtd *qtd, struct dwc2_hcd_urb *urb)
2314 dwc2_host_hub_info(hsotg, urb->priv, &hub_addr, &hub_port);
2323 struct dwc2_hcd_urb *urb = qtd->urb;
2326 switch (dwc2_hcd_get_pipe_type(&urb->pipe_info)) {
2337 chan->xfer_dma = urb->setup_dma;
2339 chan->xfer_buf = urb->setup_packet;
2354 if (urb->length == 0)
2358 dwc2_hcd_is_pipe_out(&urb->pipe_info);
2384 frame_desc = &urb->iso_descs[qtd->isoc_frame_index];
2388 chan->xfer_dma = urb->dma;
2392 chan->xfer_buf = urb->buf;
2440 static void dwc2_free_dma_aligned_buffer(struct urb *urb)
2445 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
2448 /* Restore urb->transfer_buffer from the end of the allocated area */
2450 PTR_ALIGN(urb->transfer_buffer + urb->transfer_buffer_length,
2452 sizeof(urb->transfer_buffer));
2454 if (usb_urb_dir_in(urb)) {
2455 if (usb_pipeisoc(urb->pipe))
2456 length = urb->transfer_buffer_length;
2458 length = urb->actual_length;
2460 memcpy(stored_xfer_buffer, urb->transfer_buffer, length);
2462 kfree(urb->transfer_buffer);
2463 urb->transfer_buffer = stored_xfer_buffer;
2465 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
2468 static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
2473 if (urb->num_sgs || urb->sg ||
2474 urb->transfer_buffer_length == 0 ||
2475 !((uintptr_t)urb->transfer_buffer & (DWC2_USB_DMA_ALIGN - 1)))
2483 kmalloc_size = urb->transfer_buffer_length +
2485 sizeof(urb->transfer_buffer);
2492 * Position value of original urb->transfer_buffer pointer to the end
2495 memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length,
2497 &urb->transfer_buffer, sizeof(urb->transfer_buffer));
2499 if (usb_urb_dir_out(urb))
2500 memcpy(kmalloc_ptr, urb->transfer_buffer,
2501 urb->transfer_buffer_length);
2502 urb->transfer_buffer = kmalloc_ptr;
2504 urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
2509 static int dwc2_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
2515 WARN_ON_ONCE(urb->setup_dma &&
2516 (urb->setup_dma & (DWC2_USB_DMA_ALIGN - 1)));
2518 ret = dwc2_alloc_dma_aligned_buffer(urb, mem_flags);
2522 ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
2524 dwc2_free_dma_aligned_buffer(urb);
2529 static void dwc2_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
2531 usb_hcd_unmap_urb_for_dma(hcd, urb);
2532 dwc2_free_dma_aligned_buffer(urb);
2547 struct dwc2_hcd_urb *urb;
2570 urb = qtd->urb;
2578 chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info);
2579 chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info);
2597 chan->ep_is_in = (dwc2_hcd_is_pipe_in(&urb->pipe_info) != 0);
2606 if (urb->actual_length > urb->length &&
2607 !dwc2_hcd_is_pipe_in(&urb->pipe_info))
2608 urb->actual_length = urb->length;
2611 chan->xfer_dma = urb->dma + urb->actual_length;
2613 chan->xfer_buf = (u8 *)urb->buf + urb->actual_length;
2615 chan->xfer_len = urb->length - urb->actual_length;
2620 dwc2_hc_init_split(hsotg, chan, qtd, urb);
3822 struct dwc2_hcd_urb *urb;
3824 urb = kzalloc(struct_size(urb, iso_descs, iso_desc_count), mem_flags);
3825 if (urb)
3826 urb->packet_count = iso_desc_count;
3827 return urb;
3831 struct dwc2_hcd_urb *urb, u8 dev_addr,
3841 urb->pipe_info.dev_addr = dev_addr;
3842 urb->pipe_info.ep_num = ep_num;
3843 urb->pipe_info.pipe_type = ep_type;
3844 urb->pipe_info.pipe_dir = ep_dir;
3845 urb->pipe_info.maxp = maxp;
3846 urb->pipe_info.maxp_mult = maxp_mult;
3857 struct dwc2_hcd_urb *urb;
3925 urb = qtd->urb;
3927 dev_dbg(hsotg->dev, " qtd: %p, urb: %p\n",
3928 qtd, urb);
3929 if (urb) {
3932 dwc2_hcd_get_dev_addr(&urb->pipe_info),
3933 dwc2_hcd_get_ep_num(&urb->pipe_info),
3934 dwc2_hcd_is_pipe_in(&urb->pipe_info) ?
3938 dwc2_hcd_get_maxp(&urb->pipe_info),
3939 dwc2_hcd_get_maxp_mult(&urb->pipe_info));
3942 urb->buf);
3945 (unsigned long)urb->dma);
3948 urb->length);
3950 urb->actual_length);
3995 * context (which is really just a struct urb pointer).
4014 struct urb *urb = context;
4017 if (urb->dev->tt) {
4018 *ttport = urb->dev->ttport;
4020 dwc_tt = urb->dev->tt->hcpriv;
4030 if (urb->dev->tt->multi)
4031 bitmap_size *= urb->dev->tt->hub->maxchild;
4038 dwc_tt->usb_tt = urb->dev->tt;
4076 struct urb *urb = context;
4078 return urb->dev->speed;
4082 struct urb *urb)
4086 if (urb->interval)
4087 bus->bandwidth_allocated += bw / urb->interval;
4088 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
4095 struct urb *urb)
4099 if (urb->interval)
4100 bus->bandwidth_allocated -= bw / urb->interval;
4101 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
4116 struct urb *urb;
4124 if (!qtd->urb) {
4125 dev_dbg(hsotg->dev, "## %s: qtd->urb is NULL ##\n", __func__);
4129 urb = qtd->urb->priv;
4130 if (!urb) {
4131 dev_dbg(hsotg->dev, "## %s: urb->priv is NULL ##\n", __func__);
4135 urb->actual_length = dwc2_hcd_urb_get_actual_length(qtd->urb);
4137 if (dbg_urb(urb))
4139 "%s: urb %p device %d ep %d-%s status %d actual %d\n",
4140 __func__, urb, usb_pipedevice(urb->pipe),
4141 usb_pipeendpoint(urb->pipe),
4142 usb_pipein(urb->pipe) ? "IN" : "OUT", status,
4143 urb->actual_length);
4145 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
4146 urb->error_count = dwc2_hcd_urb_get_error_count(qtd->urb);
4147 for (i = 0; i < urb->number_of_packets; ++i) {
4148 urb->iso_frame_desc[i].actual_length =
4150 qtd->urb, i);
4151 urb->iso_frame_desc[i].status =
4152 dwc2_hcd_urb_get_iso_desc_status(qtd->urb, i);
4156 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS && dbg_perio()) {
4157 for (i = 0; i < urb->number_of_packets; i++)
4159 i, urb->iso_frame_desc[i].status);
4162 urb->status = status;
4164 if ((urb->transfer_flags & URB_SHORT_NOT_OK) &&
4165 urb->actual_length < urb->transfer_buffer_length)
4166 urb->status = -EREMOTEIO;
4169 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS ||
4170 usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
4171 struct usb_host_endpoint *ep = urb->ep;
4176 urb);
4179 usb_hcd_unlink_urb_from_ep(dwc2_hsotg_to_hcd(hsotg), urb);
4180 urb->hcpriv = NULL;
4181 kfree(qtd->urb);
4182 qtd->urb = NULL;
4184 usb_hcd_giveback_urb(dwc2_hsotg_to_hcd(hsotg), urb, status);
4528 static void dwc2_dump_urb_info(struct usb_hcd *hcd, struct urb *urb,
4536 dev_vdbg(hsotg->dev, "%s, urb %p\n", fn_name, urb);
4538 usb_pipedevice(urb->pipe));
4540 usb_pipeendpoint(urb->pipe),
4541 usb_pipein(urb->pipe) ? "IN" : "OUT");
4543 switch (usb_pipetype(urb->pipe)) {
4559 usb_urb_dir_in(urb) ? "IN" : "OUT", usb_pipein(urb->pipe) ?
4562 switch (urb->dev->speed) {
4579 usb_endpoint_maxp(&urb->ep->desc),
4580 usb_endpoint_maxp_mult(&urb->ep->desc));
4583 urb->transfer_buffer_length);
4585 urb->transfer_buffer, (unsigned long)urb->transfer_dma);
4587 urb->setup_packet, (unsigned long)urb->setup_dma);
4588 dev_vdbg(hsotg->dev, " Interval: %d\n", urb->interval);
4590 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
4593 for (i = 0; i < urb->number_of_packets; i++) {
4596 urb->iso_frame_desc[i].offset,
4597 urb->iso_frame_desc[i].length);
4608 static int _dwc2_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
4612 struct usb_host_endpoint *ep = urb->ep;
4628 if (dbg_urb(urb)) {
4630 dwc2_dump_urb_info(hcd, urb, "urb_enqueue");
4662 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS ||
4663 usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
4670 switch (usb_pipetype(urb->pipe)) {
4685 dwc2_urb = dwc2_hcd_urb_alloc(hsotg, urb->number_of_packets,
4690 dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe),
4691 usb_pipeendpoint(urb->pipe), ep_type,
4692 usb_pipein(urb->pipe),
4696 buf = urb->transfer_buffer;
4699 if (!buf && (urb->transfer_dma & 3)) {
4708 if (!(urb->transfer_flags & URB_NO_INTERRUPT))
4710 if (urb->transfer_flags & URB_ZERO_PACKET)
4713 dwc2_urb->priv = urb;
4715 dwc2_urb->dma = urb->transfer_dma;
4716 dwc2_urb->length = urb->transfer_buffer_length;
4717 dwc2_urb->setup_packet = urb->setup_packet;
4718 dwc2_urb->setup_dma = urb->setup_dma;
4720 dwc2_urb->interval = urb->interval;
4723 for (i = 0; i < urb->number_of_packets; ++i)
4725 urb->iso_frame_desc[i].offset,
4726 urb->iso_frame_desc[i].length);
4728 urb->hcpriv = dwc2_urb;
4748 retval = usb_hcd_link_urb_to_ep(hcd, urb);
4759 urb);
4768 usb_hcd_unlink_urb_from_ep(hcd, urb);
4772 urb->hcpriv = NULL;
4796 static int _dwc2_hcd_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
4804 dwc2_dump_urb_info(hcd, urb, "urb_dequeue");
4808 rc = usb_hcd_check_unlink_urb(hcd, urb, status);
4812 if (!urb->hcpriv) {
4813 dev_dbg(hsotg->dev, "## urb->hcpriv is NULL ##\n");
4817 rc = dwc2_hcd_urb_dequeue(hsotg, urb->hcpriv);
4819 usb_hcd_unlink_urb_from_ep(hcd, urb);
4821 kfree(urb->hcpriv);
4822 urb->hcpriv = NULL;
4826 usb_hcd_giveback_urb(hcd, urb, status);
4830 dev_dbg(hsotg->dev, " urb->status = %d\n", urb->status);