Lines Matching refs:urb

474 static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)  in rh_call_control()  argument
478 u8 *ubuf = urb->transfer_buffer; in rh_call_control()
490 status = usb_hcd_link_urb_to_ep(hcd, urb); in rh_call_control()
494 urb->hcpriv = hcd; /* Indicate it's queued */ in rh_call_control()
496 cmd = (struct usb_ctrlrequest *) urb->setup_packet; in rh_call_control()
502 if (wLength > urb->transfer_buffer_length) in rh_call_control()
519 urb->actual_length = 0; in rh_call_control()
618 urb->actual_length = rh_string(wValue & 0xff, in rh_call_control()
707 if (urb->transfer_buffer_length < len) in rh_call_control()
708 len = urb->transfer_buffer_length; in rh_call_control()
709 urb->actual_length = len; in rh_call_control()
733 usb_hcd_unlink_urb_from_ep(hcd, urb); in rh_call_control()
734 usb_hcd_giveback_urb(hcd, urb, status); in rh_call_control()
751 struct urb *urb; in usb_hcd_poll_rh_status() local
766 urb = hcd->status_urb; in usb_hcd_poll_rh_status()
767 if (urb) { in usb_hcd_poll_rh_status()
770 urb->actual_length = length; in usb_hcd_poll_rh_status()
771 memcpy(urb->transfer_buffer, buffer, length); in usb_hcd_poll_rh_status()
773 usb_hcd_unlink_urb_from_ep(hcd, urb); in usb_hcd_poll_rh_status()
774 usb_hcd_giveback_urb(hcd, urb, 0); in usb_hcd_poll_rh_status()
802 static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb) in rh_queue_status() argument
806 unsigned len = 1 + (urb->dev->maxchild / 8); in rh_queue_status()
809 if (hcd->status_urb || urb->transfer_buffer_length < len) { in rh_queue_status()
815 retval = usb_hcd_link_urb_to_ep(hcd, urb); in rh_queue_status()
819 hcd->status_urb = urb; in rh_queue_status()
820 urb->hcpriv = hcd; /* indicate it's queued */ in rh_queue_status()
833 static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb) in rh_urb_enqueue() argument
835 if (usb_endpoint_xfer_int(&urb->ep->desc)) in rh_urb_enqueue()
836 return rh_queue_status (hcd, urb); in rh_urb_enqueue()
837 if (usb_endpoint_xfer_control(&urb->ep->desc)) in rh_urb_enqueue()
838 return rh_call_control (hcd, urb); in rh_urb_enqueue()
847 static int usb_rh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) in usb_rh_urb_dequeue() argument
853 rc = usb_hcd_check_unlink_urb(hcd, urb, status); in usb_rh_urb_dequeue()
857 if (usb_endpoint_num(&urb->ep->desc) == 0) { /* Control URB */ in usb_rh_urb_dequeue()
863 if (urb == hcd->status_urb) { in usb_rh_urb_dequeue()
865 usb_hcd_unlink_urb_from_ep(hcd, urb); in usb_rh_urb_dequeue()
866 usb_hcd_giveback_urb(hcd, urb, status); in usb_rh_urb_dequeue()
1241 int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_link_urb_to_ep() argument
1248 if (unlikely(atomic_read(&urb->reject))) { in usb_hcd_link_urb_to_ep()
1253 if (unlikely(!urb->ep->enabled)) { in usb_hcd_link_urb_to_ep()
1258 if (unlikely(!urb->dev->can_submit)) { in usb_hcd_link_urb_to_ep()
1268 urb->unlinked = 0; in usb_hcd_link_urb_to_ep()
1269 list_add_tail(&urb->urb_list, &urb->ep->urb_list); in usb_hcd_link_urb_to_ep()
1299 int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, in usb_hcd_check_unlink_urb() argument
1305 list_for_each(tmp, &urb->ep->urb_list) { in usb_hcd_check_unlink_urb()
1306 if (tmp == &urb->urb_list) in usb_hcd_check_unlink_urb()
1309 if (tmp != &urb->urb_list) in usb_hcd_check_unlink_urb()
1315 if (urb->unlinked) in usb_hcd_check_unlink_urb()
1317 urb->unlinked = status; in usb_hcd_check_unlink_urb()
1332 void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unlink_urb_from_ep() argument
1336 list_del_init(&urb->urb_list); in usb_hcd_unlink_urb_from_ep()
1425 void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unmap_urb_setup_for_dma() argument
1428 (urb->transfer_flags & URB_SETUP_MAP_SINGLE)) in usb_hcd_unmap_urb_setup_for_dma()
1430 urb->setup_dma, in usb_hcd_unmap_urb_setup_for_dma()
1433 else if (urb->transfer_flags & URB_SETUP_MAP_LOCAL) in usb_hcd_unmap_urb_setup_for_dma()
1434 hcd_free_coherent(urb->dev->bus, in usb_hcd_unmap_urb_setup_for_dma()
1435 &urb->setup_dma, in usb_hcd_unmap_urb_setup_for_dma()
1436 (void **) &urb->setup_packet, in usb_hcd_unmap_urb_setup_for_dma()
1441 urb->transfer_flags &= ~(URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL); in usb_hcd_unmap_urb_setup_for_dma()
1445 static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb) in unmap_urb_for_dma() argument
1448 hcd->driver->unmap_urb_for_dma(hcd, urb); in unmap_urb_for_dma()
1450 usb_hcd_unmap_urb_for_dma(hcd, urb); in unmap_urb_for_dma()
1453 void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unmap_urb_for_dma() argument
1457 usb_hcd_unmap_urb_setup_for_dma(hcd, urb); in usb_hcd_unmap_urb_for_dma()
1459 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; in usb_hcd_unmap_urb_for_dma()
1461 (urb->transfer_flags & URB_DMA_MAP_SG)) in usb_hcd_unmap_urb_for_dma()
1463 urb->sg, in usb_hcd_unmap_urb_for_dma()
1464 urb->num_sgs, in usb_hcd_unmap_urb_for_dma()
1467 (urb->transfer_flags & URB_DMA_MAP_PAGE)) in usb_hcd_unmap_urb_for_dma()
1469 urb->transfer_dma, in usb_hcd_unmap_urb_for_dma()
1470 urb->transfer_buffer_length, in usb_hcd_unmap_urb_for_dma()
1473 (urb->transfer_flags & URB_DMA_MAP_SINGLE)) in usb_hcd_unmap_urb_for_dma()
1475 urb->transfer_dma, in usb_hcd_unmap_urb_for_dma()
1476 urb->transfer_buffer_length, in usb_hcd_unmap_urb_for_dma()
1478 else if (urb->transfer_flags & URB_MAP_LOCAL) in usb_hcd_unmap_urb_for_dma()
1479 hcd_free_coherent(urb->dev->bus, in usb_hcd_unmap_urb_for_dma()
1480 &urb->transfer_dma, in usb_hcd_unmap_urb_for_dma()
1481 &urb->transfer_buffer, in usb_hcd_unmap_urb_for_dma()
1482 urb->transfer_buffer_length, in usb_hcd_unmap_urb_for_dma()
1486 urb->transfer_flags &= ~(URB_DMA_MAP_SG | URB_DMA_MAP_PAGE | in usb_hcd_unmap_urb_for_dma()
1491 static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, in map_urb_for_dma() argument
1495 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags); in map_urb_for_dma()
1497 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags); in map_urb_for_dma()
1500 int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, in usb_hcd_map_urb_for_dma() argument
1512 if (usb_endpoint_xfer_control(&urb->ep->desc)) { in usb_hcd_map_urb_for_dma()
1516 if (is_vmalloc_addr(urb->setup_packet)) { in usb_hcd_map_urb_for_dma()
1519 } else if (object_is_on_stack(urb->setup_packet)) { in usb_hcd_map_urb_for_dma()
1524 urb->setup_dma = dma_map_single( in usb_hcd_map_urb_for_dma()
1526 urb->setup_packet, in usb_hcd_map_urb_for_dma()
1530 urb->setup_dma)) in usb_hcd_map_urb_for_dma()
1532 urb->transfer_flags |= URB_SETUP_MAP_SINGLE; in usb_hcd_map_urb_for_dma()
1535 urb->dev->bus, mem_flags, in usb_hcd_map_urb_for_dma()
1536 &urb->setup_dma, in usb_hcd_map_urb_for_dma()
1537 (void **)&urb->setup_packet, in usb_hcd_map_urb_for_dma()
1542 urb->transfer_flags |= URB_SETUP_MAP_LOCAL; in usb_hcd_map_urb_for_dma()
1546 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; in usb_hcd_map_urb_for_dma()
1547 if (urb->transfer_buffer_length != 0 in usb_hcd_map_urb_for_dma()
1548 && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) { in usb_hcd_map_urb_for_dma()
1550 if (urb->num_sgs) { in usb_hcd_map_urb_for_dma()
1554 if (usb_endpoint_xfer_isoc(&urb->ep->desc)) { in usb_hcd_map_urb_for_dma()
1561 urb->sg, in usb_hcd_map_urb_for_dma()
1562 urb->num_sgs, in usb_hcd_map_urb_for_dma()
1567 urb->transfer_flags |= URB_DMA_MAP_SG; in usb_hcd_map_urb_for_dma()
1568 urb->num_mapped_sgs = n; in usb_hcd_map_urb_for_dma()
1569 if (n != urb->num_sgs) in usb_hcd_map_urb_for_dma()
1570 urb->transfer_flags |= in usb_hcd_map_urb_for_dma()
1572 } else if (urb->sg) { in usb_hcd_map_urb_for_dma()
1573 struct scatterlist *sg = urb->sg; in usb_hcd_map_urb_for_dma()
1574 urb->transfer_dma = dma_map_page( in usb_hcd_map_urb_for_dma()
1578 urb->transfer_buffer_length, in usb_hcd_map_urb_for_dma()
1581 urb->transfer_dma)) in usb_hcd_map_urb_for_dma()
1584 urb->transfer_flags |= URB_DMA_MAP_PAGE; in usb_hcd_map_urb_for_dma()
1585 } else if (is_vmalloc_addr(urb->transfer_buffer)) { in usb_hcd_map_urb_for_dma()
1588 } else if (object_is_on_stack(urb->transfer_buffer)) { in usb_hcd_map_urb_for_dma()
1592 urb->transfer_dma = dma_map_single( in usb_hcd_map_urb_for_dma()
1594 urb->transfer_buffer, in usb_hcd_map_urb_for_dma()
1595 urb->transfer_buffer_length, in usb_hcd_map_urb_for_dma()
1598 urb->transfer_dma)) in usb_hcd_map_urb_for_dma()
1601 urb->transfer_flags |= URB_DMA_MAP_SINGLE; in usb_hcd_map_urb_for_dma()
1605 urb->dev->bus, mem_flags, in usb_hcd_map_urb_for_dma()
1606 &urb->transfer_dma, in usb_hcd_map_urb_for_dma()
1607 &urb->transfer_buffer, in usb_hcd_map_urb_for_dma()
1608 urb->transfer_buffer_length, in usb_hcd_map_urb_for_dma()
1611 urb->transfer_flags |= URB_MAP_LOCAL; in usb_hcd_map_urb_for_dma()
1613 if (ret && (urb->transfer_flags & (URB_SETUP_MAP_SINGLE | in usb_hcd_map_urb_for_dma()
1615 usb_hcd_unmap_urb_for_dma(hcd, urb); in usb_hcd_map_urb_for_dma()
1628 int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) in usb_hcd_submit_urb() argument
1631 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); in usb_hcd_submit_urb()
1637 usb_get_urb(urb); in usb_hcd_submit_urb()
1638 atomic_inc(&urb->use_count); in usb_hcd_submit_urb()
1639 atomic_inc(&urb->dev->urbnum); in usb_hcd_submit_urb()
1640 usbmon_urb_submit(&hcd->self, urb); in usb_hcd_submit_urb()
1650 if (is_root_hub(urb->dev)) { in usb_hcd_submit_urb()
1651 status = rh_urb_enqueue(hcd, urb); in usb_hcd_submit_urb()
1653 status = map_urb_for_dma(hcd, urb, mem_flags); in usb_hcd_submit_urb()
1655 status = hcd->driver->urb_enqueue(hcd, urb, mem_flags); in usb_hcd_submit_urb()
1657 unmap_urb_for_dma(hcd, urb); in usb_hcd_submit_urb()
1662 usbmon_urb_submit_error(&hcd->self, urb, status); in usb_hcd_submit_urb()
1663 urb->hcpriv = NULL; in usb_hcd_submit_urb()
1664 INIT_LIST_HEAD(&urb->urb_list); in usb_hcd_submit_urb()
1665 atomic_dec(&urb->use_count); in usb_hcd_submit_urb()
1666 atomic_dec(&urb->dev->urbnum); in usb_hcd_submit_urb()
1667 if (atomic_read(&urb->reject)) in usb_hcd_submit_urb()
1669 usb_put_urb(urb); in usb_hcd_submit_urb()
1681 static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status) in unlink1() argument
1685 if (is_root_hub(urb->dev)) in unlink1()
1686 value = usb_rh_urb_dequeue(hcd, urb, status); in unlink1()
1692 value = hcd->driver->urb_dequeue(hcd, urb, status); in unlink1()
1703 int usb_hcd_unlink_urb (struct urb *urb, int status) in usb_hcd_unlink_urb() argument
1706 struct usb_device *udev = urb->dev; in usb_hcd_unlink_urb()
1716 if (atomic_read(&urb->use_count) > 0) { in usb_hcd_unlink_urb()
1722 hcd = bus_to_hcd(urb->dev->bus); in usb_hcd_unlink_urb()
1723 retval = unlink1(hcd, urb, status); in usb_hcd_unlink_urb()
1728 urb, retval); in usb_hcd_unlink_urb()
1736 static void __usb_hcd_giveback_urb(struct urb *urb) in __usb_hcd_giveback_urb() argument
1738 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); in __usb_hcd_giveback_urb()
1739 struct usb_anchor *anchor = urb->anchor; in __usb_hcd_giveback_urb()
1740 int status = urb->unlinked; in __usb_hcd_giveback_urb()
1743 urb->hcpriv = NULL; in __usb_hcd_giveback_urb()
1744 if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) && in __usb_hcd_giveback_urb()
1745 urb->actual_length < urb->transfer_buffer_length && in __usb_hcd_giveback_urb()
1749 unmap_urb_for_dma(hcd, urb); in __usb_hcd_giveback_urb()
1750 usbmon_urb_complete(&hcd->self, urb, status); in __usb_hcd_giveback_urb()
1752 usb_unanchor_urb(urb); in __usb_hcd_giveback_urb()
1757 urb->status = status; in __usb_hcd_giveback_urb()
1770 urb->complete(urb); in __usb_hcd_giveback_urb()
1774 atomic_dec(&urb->use_count); in __usb_hcd_giveback_urb()
1775 if (unlikely(atomic_read(&urb->reject))) in __usb_hcd_giveback_urb()
1777 usb_put_urb(urb); in __usb_hcd_giveback_urb()
1792 struct urb *urb; in usb_giveback_urb_bh() local
1794 urb = list_entry(local_list.next, struct urb, urb_list); in usb_giveback_urb_bh()
1795 list_del_init(&urb->urb_list); in usb_giveback_urb_bh()
1796 bh->completing_ep = urb->ep; in usb_giveback_urb_bh()
1797 __usb_hcd_giveback_urb(urb); in usb_giveback_urb_bh()
1826 void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status) in usb_hcd_giveback_urb() argument
1832 if (likely(!urb->unlinked)) in usb_hcd_giveback_urb()
1833 urb->unlinked = status; in usb_hcd_giveback_urb()
1835 if (!hcd_giveback_urb_in_bh(hcd) && !is_root_hub(urb->dev)) { in usb_hcd_giveback_urb()
1836 __usb_hcd_giveback_urb(urb); in usb_hcd_giveback_urb()
1840 if (usb_pipeisoc(urb->pipe) || usb_pipeint(urb->pipe)) { in usb_hcd_giveback_urb()
1849 list_add_tail(&urb->urb_list, &bh->head); in usb_hcd_giveback_urb()
1872 struct urb *urb; in usb_hcd_flush_endpoint() local
1882 list_for_each_entry_reverse(urb, &ep->urb_list, urb_list) { in usb_hcd_flush_endpoint()
1885 if (urb->unlinked) in usb_hcd_flush_endpoint()
1887 usb_get_urb (urb); in usb_hcd_flush_endpoint()
1888 is_in = usb_urb_dir_in(urb); in usb_hcd_flush_endpoint()
1892 unlink1(hcd, urb, -ESHUTDOWN); in usb_hcd_flush_endpoint()
1895 urb, usb_endpoint_num(&ep->desc), in usb_hcd_flush_endpoint()
1911 usb_put_urb (urb); in usb_hcd_flush_endpoint()
1924 urb = NULL; in usb_hcd_flush_endpoint()
1926 urb = list_entry (ep->urb_list.prev, struct urb, in usb_hcd_flush_endpoint()
1928 usb_get_urb (urb); in usb_hcd_flush_endpoint()
1932 if (urb) { in usb_hcd_flush_endpoint()
1933 usb_kill_urb (urb); in usb_hcd_flush_endpoint()
1934 usb_put_urb (urb); in usb_hcd_flush_endpoint()