Lines Matching refs:urb
515 struct urb *urb = context;
517 if (urb->dev->tt)
518 *hub_addr = urb->dev->tt->hub->devnum;
521 *hub_port = urb->dev->ttport;
1880 struct dwc2_hcd_urb *urb, struct dwc2_qh *qh,
1893 dev_speed = dwc2_host_get_speed(hsotg, urb->priv);
1909 dwc2_hcd_qtd_init(qtd, urb);
1923 !(qtd->urb->flags & URB_GIVEBACK_ASAP))
1940 struct dwc2_hcd_urb *urb)
1945 urb_qtd = urb->qtd;
1957 urb->priv = NULL;
2342 struct dwc2_qtd *qtd, struct dwc2_hcd_urb *urb)
2349 dwc2_host_hub_info(hsotg, urb->priv, &hub_addr, &hub_port);
2358 struct dwc2_hcd_urb *urb = qtd->urb;
2361 switch (dwc2_hcd_get_pipe_type(&urb->pipe_info)) {
2372 chan->xfer_dma = urb->setup_dma;
2374 chan->xfer_buf = urb->setup_packet;
2389 if (urb->length == 0)
2393 dwc2_hcd_is_pipe_out(&urb->pipe_info);
2419 frame_desc = &urb->iso_descs[qtd->isoc_frame_index];
2423 chan->xfer_dma = urb->dma;
2427 chan->xfer_buf = urb->buf;
2475 static void dwc2_free_dma_aligned_buffer(struct urb *urb)
2480 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
2483 /* Restore urb->transfer_buffer from the end of the allocated area */
2485 PTR_ALIGN(urb->transfer_buffer + urb->transfer_buffer_length,
2487 sizeof(urb->transfer_buffer));
2489 if (usb_urb_dir_in(urb)) {
2490 if (usb_pipeisoc(urb->pipe))
2491 length = urb->transfer_buffer_length;
2493 length = urb->actual_length;
2495 memcpy(stored_xfer_buffer, urb->transfer_buffer, length);
2497 kfree(urb->transfer_buffer);
2498 urb->transfer_buffer = stored_xfer_buffer;
2500 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
2503 static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
2508 if (urb->num_sgs || urb->sg ||
2509 urb->transfer_buffer_length == 0 ||
2510 !((uintptr_t)urb->transfer_buffer & (DWC2_USB_DMA_ALIGN - 1)))
2518 kmalloc_size = urb->transfer_buffer_length +
2520 sizeof(urb->transfer_buffer);
2527 * Position value of original urb->transfer_buffer pointer to the end
2530 memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length,
2532 &urb->transfer_buffer, sizeof(urb->transfer_buffer));
2534 if (usb_urb_dir_out(urb))
2535 memcpy(kmalloc_ptr, urb->transfer_buffer,
2536 urb->transfer_buffer_length);
2537 urb->transfer_buffer = kmalloc_ptr;
2539 urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
2544 static int dwc2_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
2550 WARN_ON_ONCE(urb->setup_dma &&
2551 (urb->setup_dma & (DWC2_USB_DMA_ALIGN - 1)));
2553 ret = dwc2_alloc_dma_aligned_buffer(urb, mem_flags);
2557 ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
2559 dwc2_free_dma_aligned_buffer(urb);
2564 static void dwc2_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
2566 usb_hcd_unmap_urb_for_dma(hcd, urb);
2567 dwc2_free_dma_aligned_buffer(urb);
2582 struct dwc2_hcd_urb *urb;
2605 urb = qtd->urb;
2613 chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info);
2614 chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info);
2632 chan->ep_is_in = (dwc2_hcd_is_pipe_in(&urb->pipe_info) != 0);
2641 if (urb->actual_length > urb->length &&
2642 !dwc2_hcd_is_pipe_in(&urb->pipe_info))
2643 urb->actual_length = urb->length;
2646 chan->xfer_dma = urb->dma + urb->actual_length;
2648 chan->xfer_buf = (u8 *)urb->buf + urb->actual_length;
2650 chan->xfer_len = urb->length - urb->actual_length;
2655 dwc2_hc_init_split(hsotg, chan, qtd, urb);
3804 struct dwc2_hcd_urb *urb;
3806 urb = kzalloc(struct_size(urb, iso_descs, iso_desc_count), mem_flags);
3807 if (urb)
3808 urb->packet_count = iso_desc_count;
3809 return urb;
3813 struct dwc2_hcd_urb *urb, u8 dev_addr,
3823 urb->pipe_info.dev_addr = dev_addr;
3824 urb->pipe_info.ep_num = ep_num;
3825 urb->pipe_info.pipe_type = ep_type;
3826 urb->pipe_info.pipe_dir = ep_dir;
3827 urb->pipe_info.maxp = maxp;
3828 urb->pipe_info.maxp_mult = maxp_mult;
3839 struct dwc2_hcd_urb *urb;
3907 urb = qtd->urb;
3909 dev_dbg(hsotg->dev, " qtd: %p, urb: %p\n",
3910 qtd, urb);
3911 if (urb) {
3914 dwc2_hcd_get_dev_addr(&urb->pipe_info),
3915 dwc2_hcd_get_ep_num(&urb->pipe_info),
3916 dwc2_hcd_is_pipe_in(&urb->pipe_info) ?
3920 dwc2_hcd_get_maxp(&urb->pipe_info),
3921 dwc2_hcd_get_maxp_mult(&urb->pipe_info));
3924 urb->buf);
3927 (unsigned long)urb->dma);
3930 urb->length);
3932 urb->actual_length);
3977 * context (which is really just a struct urb pointer).
3996 struct urb *urb = context;
3999 if (urb->dev->tt) {
4000 *ttport = urb->dev->ttport;
4002 dwc_tt = urb->dev->tt->hcpriv;
4012 if (urb->dev->tt->multi)
4013 bitmap_size *= urb->dev->tt->hub->maxchild;
4020 dwc_tt->usb_tt = urb->dev->tt;
4058 struct urb *urb = context;
4060 return urb->dev->speed;
4064 struct urb *urb)
4068 if (urb->interval)
4069 bus->bandwidth_allocated += bw / urb->interval;
4070 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
4077 struct urb *urb)
4081 if (urb->interval)
4082 bus->bandwidth_allocated -= bw / urb->interval;
4083 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
4098 struct urb *urb;
4106 if (!qtd->urb) {
4107 dev_dbg(hsotg->dev, "## %s: qtd->urb is NULL ##\n", __func__);
4111 urb = qtd->urb->priv;
4112 if (!urb) {
4113 dev_dbg(hsotg->dev, "## %s: urb->priv is NULL ##\n", __func__);
4117 urb->actual_length = dwc2_hcd_urb_get_actual_length(qtd->urb);
4119 if (dbg_urb(urb))
4121 "%s: urb %p device %d ep %d-%s status %d actual %d\n",
4122 __func__, urb, usb_pipedevice(urb->pipe),
4123 usb_pipeendpoint(urb->pipe),
4124 usb_pipein(urb->pipe) ? "IN" : "OUT", status,
4125 urb->actual_length);
4127 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
4128 urb->error_count = dwc2_hcd_urb_get_error_count(qtd->urb);
4129 for (i = 0; i < urb->number_of_packets; ++i) {
4130 urb->iso_frame_desc[i].actual_length =
4132 qtd->urb, i);
4133 urb->iso_frame_desc[i].status =
4134 dwc2_hcd_urb_get_iso_desc_status(qtd->urb, i);
4138 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS && dbg_perio()) {
4139 for (i = 0; i < urb->number_of_packets; i++)
4141 i, urb->iso_frame_desc[i].status);
4144 urb->status = status;
4146 if ((urb->transfer_flags & URB_SHORT_NOT_OK) &&
4147 urb->actual_length < urb->transfer_buffer_length)
4148 urb->status = -EREMOTEIO;
4151 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS ||
4152 usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
4153 struct usb_host_endpoint *ep = urb->ep;
4158 urb);
4161 usb_hcd_unlink_urb_from_ep(dwc2_hsotg_to_hcd(hsotg), urb);
4162 urb->hcpriv = NULL;
4163 kfree(qtd->urb);
4164 qtd->urb = NULL;
4166 usb_hcd_giveback_urb(dwc2_hsotg_to_hcd(hsotg), urb, status);
4472 static void dwc2_dump_urb_info(struct usb_hcd *hcd, struct urb *urb,
4480 dev_vdbg(hsotg->dev, "%s, urb %p\n", fn_name, urb);
4482 usb_pipedevice(urb->pipe));
4484 usb_pipeendpoint(urb->pipe),
4485 usb_pipein(urb->pipe) ? "IN" : "OUT");
4487 switch (usb_pipetype(urb->pipe)) {
4503 usb_urb_dir_in(urb) ? "IN" : "OUT", usb_pipein(urb->pipe) ?
4506 switch (urb->dev->speed) {
4523 usb_endpoint_maxp(&urb->ep->desc),
4524 usb_endpoint_maxp_mult(&urb->ep->desc));
4527 urb->transfer_buffer_length);
4529 urb->transfer_buffer, (unsigned long)urb->transfer_dma);
4531 urb->setup_packet, (unsigned long)urb->setup_dma);
4532 dev_vdbg(hsotg->dev, " Interval: %d\n", urb->interval);
4534 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
4537 for (i = 0; i < urb->number_of_packets; i++) {
4540 urb->iso_frame_desc[i].offset,
4541 urb->iso_frame_desc[i].length);
4552 static int _dwc2_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
4556 struct usb_host_endpoint *ep = urb->ep;
4569 if (dbg_urb(urb)) {
4571 dwc2_dump_urb_info(hcd, urb, "urb_enqueue");
4577 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS ||
4578 usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
4585 switch (usb_pipetype(urb->pipe)) {
4600 dwc2_urb = dwc2_hcd_urb_alloc(hsotg, urb->number_of_packets,
4605 dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe),
4606 usb_pipeendpoint(urb->pipe), ep_type,
4607 usb_pipein(urb->pipe),
4611 buf = urb->transfer_buffer;
4614 if (!buf && (urb->transfer_dma & 3)) {
4623 if (!(urb->transfer_flags & URB_NO_INTERRUPT))
4625 if (urb->transfer_flags & URB_ZERO_PACKET)
4628 dwc2_urb->priv = urb;
4630 dwc2_urb->dma = urb->transfer_dma;
4631 dwc2_urb->length = urb->transfer_buffer_length;
4632 dwc2_urb->setup_packet = urb->setup_packet;
4633 dwc2_urb->setup_dma = urb->setup_dma;
4635 dwc2_urb->interval = urb->interval;
4638 for (i = 0; i < urb->number_of_packets; ++i)
4640 urb->iso_frame_desc[i].offset,
4641 urb->iso_frame_desc[i].length);
4643 urb->hcpriv = dwc2_urb;
4663 retval = usb_hcd_link_urb_to_ep(hcd, urb);
4674 urb);
4683 usb_hcd_unlink_urb_from_ep(hcd, urb);
4687 urb->hcpriv = NULL;
4711 static int _dwc2_hcd_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
4719 dwc2_dump_urb_info(hcd, urb, "urb_dequeue");
4723 rc = usb_hcd_check_unlink_urb(hcd, urb, status);
4727 if (!urb->hcpriv) {
4728 dev_dbg(hsotg->dev, "## urb->hcpriv is NULL ##\n");
4732 rc = dwc2_hcd_urb_dequeue(hsotg, urb->hcpriv);
4734 usb_hcd_unlink_urb_from_ep(hcd, urb);
4736 kfree(urb->hcpriv);
4737 urb->hcpriv = NULL;
4741 usb_hcd_giveback_urb(hcd, urb, status);
4745 dev_dbg(hsotg->dev, " urb->status = %d\n", urb->status);