Lines Matching refs:urb
455 static int rh_call_control (struct usb_hcd *hcd, struct urb *urb) in rh_call_control() argument
459 u8 *ubuf = urb->transfer_buffer; in rh_call_control()
471 status = usb_hcd_link_urb_to_ep(hcd, urb); in rh_call_control()
475 urb->hcpriv = hcd; /* Indicate it's queued */ in rh_call_control()
477 cmd = (struct usb_ctrlrequest *) urb->setup_packet; in rh_call_control()
483 if (wLength > urb->transfer_buffer_length) in rh_call_control()
500 urb->actual_length = 0; in rh_call_control()
595 urb->actual_length = rh_string(wValue & 0xff, in rh_call_control()
684 if (urb->transfer_buffer_length < len) in rh_call_control()
685 len = urb->transfer_buffer_length; in rh_call_control()
686 urb->actual_length = len; in rh_call_control()
710 usb_hcd_unlink_urb_from_ep(hcd, urb); in rh_call_control()
711 usb_hcd_giveback_urb(hcd, urb, status); in rh_call_control()
727 struct urb *urb; in usb_hcd_poll_rh_status() local
743 urb = hcd->status_urb; in usb_hcd_poll_rh_status()
744 if (urb) { in usb_hcd_poll_rh_status()
747 if (urb->transfer_buffer_length >= length) { in usb_hcd_poll_rh_status()
751 length = urb->transfer_buffer_length; in usb_hcd_poll_rh_status()
753 urb->actual_length = length; in usb_hcd_poll_rh_status()
754 memcpy(urb->transfer_buffer, buffer, length); in usb_hcd_poll_rh_status()
756 usb_hcd_unlink_urb_from_ep(hcd, urb); in usb_hcd_poll_rh_status()
757 usb_hcd_giveback_urb(hcd, urb, status); in usb_hcd_poll_rh_status()
785 static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb) in rh_queue_status() argument
789 unsigned len = 1 + (urb->dev->maxchild / 8); in rh_queue_status()
792 if (hcd->status_urb || urb->transfer_buffer_length < len) { in rh_queue_status()
798 retval = usb_hcd_link_urb_to_ep(hcd, urb); in rh_queue_status()
802 hcd->status_urb = urb; in rh_queue_status()
803 urb->hcpriv = hcd; /* indicate it's queued */ in rh_queue_status()
816 static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb) in rh_urb_enqueue() argument
818 if (usb_endpoint_xfer_int(&urb->ep->desc)) in rh_urb_enqueue()
819 return rh_queue_status (hcd, urb); in rh_urb_enqueue()
820 if (usb_endpoint_xfer_control(&urb->ep->desc)) in rh_urb_enqueue()
821 return rh_call_control (hcd, urb); in rh_urb_enqueue()
830 static int usb_rh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) in usb_rh_urb_dequeue() argument
836 rc = usb_hcd_check_unlink_urb(hcd, urb, status); in usb_rh_urb_dequeue()
840 if (usb_endpoint_num(&urb->ep->desc) == 0) { /* Control URB */ in usb_rh_urb_dequeue()
846 if (urb == hcd->status_urb) { in usb_rh_urb_dequeue()
848 usb_hcd_unlink_urb_from_ep(hcd, urb); in usb_rh_urb_dequeue()
849 usb_hcd_giveback_urb(hcd, urb, status); in usb_rh_urb_dequeue()
1130 int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_link_urb_to_ep() argument
1137 if (unlikely(atomic_read(&urb->reject))) { in usb_hcd_link_urb_to_ep()
1142 if (unlikely(!urb->ep->enabled)) { in usb_hcd_link_urb_to_ep()
1147 if (unlikely(!urb->dev->can_submit)) { in usb_hcd_link_urb_to_ep()
1157 urb->unlinked = 0; in usb_hcd_link_urb_to_ep()
1158 list_add_tail(&urb->urb_list, &urb->ep->urb_list); in usb_hcd_link_urb_to_ep()
1188 int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, in usb_hcd_check_unlink_urb() argument
1194 list_for_each(tmp, &urb->ep->urb_list) { in usb_hcd_check_unlink_urb()
1195 if (tmp == &urb->urb_list) in usb_hcd_check_unlink_urb()
1198 if (tmp != &urb->urb_list) in usb_hcd_check_unlink_urb()
1204 if (urb->unlinked) in usb_hcd_check_unlink_urb()
1206 urb->unlinked = status; in usb_hcd_check_unlink_urb()
1221 void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unlink_urb_from_ep() argument
1225 list_del_init(&urb->urb_list); in usb_hcd_unlink_urb_from_ep()
1309 void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unmap_urb_setup_for_dma() argument
1312 (urb->transfer_flags & URB_SETUP_MAP_SINGLE)) in usb_hcd_unmap_urb_setup_for_dma()
1314 urb->setup_dma, in usb_hcd_unmap_urb_setup_for_dma()
1317 else if (urb->transfer_flags & URB_SETUP_MAP_LOCAL) in usb_hcd_unmap_urb_setup_for_dma()
1318 hcd_free_coherent(urb->dev->bus, in usb_hcd_unmap_urb_setup_for_dma()
1319 &urb->setup_dma, in usb_hcd_unmap_urb_setup_for_dma()
1320 (void **) &urb->setup_packet, in usb_hcd_unmap_urb_setup_for_dma()
1325 urb->transfer_flags &= ~(URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL); in usb_hcd_unmap_urb_setup_for_dma()
1329 static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb) in unmap_urb_for_dma() argument
1332 hcd->driver->unmap_urb_for_dma(hcd, urb); in unmap_urb_for_dma()
1334 usb_hcd_unmap_urb_for_dma(hcd, urb); in unmap_urb_for_dma()
1337 void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unmap_urb_for_dma() argument
1341 usb_hcd_unmap_urb_setup_for_dma(hcd, urb); in usb_hcd_unmap_urb_for_dma()
1343 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; in usb_hcd_unmap_urb_for_dma()
1345 (urb->transfer_flags & URB_DMA_MAP_SG)) { in usb_hcd_unmap_urb_for_dma()
1347 urb->sg, in usb_hcd_unmap_urb_for_dma()
1348 urb->num_sgs, in usb_hcd_unmap_urb_for_dma()
1351 (urb->transfer_flags & URB_DMA_MAP_PAGE)) { in usb_hcd_unmap_urb_for_dma()
1353 urb->transfer_dma, in usb_hcd_unmap_urb_for_dma()
1354 urb->transfer_buffer_length, in usb_hcd_unmap_urb_for_dma()
1357 (urb->transfer_flags & URB_DMA_MAP_SINGLE)) { in usb_hcd_unmap_urb_for_dma()
1359 urb->transfer_dma, in usb_hcd_unmap_urb_for_dma()
1360 urb->transfer_buffer_length, in usb_hcd_unmap_urb_for_dma()
1362 } else if (urb->transfer_flags & URB_MAP_LOCAL) { in usb_hcd_unmap_urb_for_dma()
1363 hcd_free_coherent(urb->dev->bus, in usb_hcd_unmap_urb_for_dma()
1364 &urb->transfer_dma, in usb_hcd_unmap_urb_for_dma()
1365 &urb->transfer_buffer, in usb_hcd_unmap_urb_for_dma()
1366 urb->transfer_buffer_length, in usb_hcd_unmap_urb_for_dma()
1368 } else if ((urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP) && urb->sgt) { in usb_hcd_unmap_urb_for_dma()
1369 dma_sync_sgtable_for_cpu(hcd->self.sysdev, urb->sgt, dir); in usb_hcd_unmap_urb_for_dma()
1371 invalidate_kernel_vmap_range(urb->transfer_buffer, in usb_hcd_unmap_urb_for_dma()
1372 urb->transfer_buffer_length); in usb_hcd_unmap_urb_for_dma()
1376 urb->transfer_flags &= ~(URB_DMA_MAP_SG | URB_DMA_MAP_PAGE | in usb_hcd_unmap_urb_for_dma()
1381 static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, in map_urb_for_dma() argument
1385 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags); in map_urb_for_dma()
1387 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags); in map_urb_for_dma()
1390 int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, in usb_hcd_map_urb_for_dma() argument
1402 if (usb_endpoint_xfer_control(&urb->ep->desc)) { in usb_hcd_map_urb_for_dma()
1407 urb->dev->bus, mem_flags, in usb_hcd_map_urb_for_dma()
1408 &urb->setup_dma, in usb_hcd_map_urb_for_dma()
1409 (void **)&urb->setup_packet, in usb_hcd_map_urb_for_dma()
1414 urb->transfer_flags |= URB_SETUP_MAP_LOCAL; in usb_hcd_map_urb_for_dma()
1416 if (object_is_on_stack(urb->setup_packet)) { in usb_hcd_map_urb_for_dma()
1421 urb->setup_dma = dma_map_single( in usb_hcd_map_urb_for_dma()
1423 urb->setup_packet, in usb_hcd_map_urb_for_dma()
1427 urb->setup_dma)) in usb_hcd_map_urb_for_dma()
1429 urb->transfer_flags |= URB_SETUP_MAP_SINGLE; in usb_hcd_map_urb_for_dma()
1433 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; in usb_hcd_map_urb_for_dma()
1434 if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP) { in usb_hcd_map_urb_for_dma()
1435 if (!urb->sgt) in usb_hcd_map_urb_for_dma()
1439 flush_kernel_vmap_range(urb->transfer_buffer, in usb_hcd_map_urb_for_dma()
1440 urb->transfer_buffer_length); in usb_hcd_map_urb_for_dma()
1441 dma_sync_sgtable_for_device(hcd->self.sysdev, urb->sgt, dir); in usb_hcd_map_urb_for_dma()
1442 } else if (urb->transfer_buffer_length != 0) { in usb_hcd_map_urb_for_dma()
1445 urb->dev->bus, mem_flags, in usb_hcd_map_urb_for_dma()
1446 &urb->transfer_dma, in usb_hcd_map_urb_for_dma()
1447 &urb->transfer_buffer, in usb_hcd_map_urb_for_dma()
1448 urb->transfer_buffer_length, in usb_hcd_map_urb_for_dma()
1451 urb->transfer_flags |= URB_MAP_LOCAL; in usb_hcd_map_urb_for_dma()
1453 if (urb->num_sgs) { in usb_hcd_map_urb_for_dma()
1457 if (usb_endpoint_xfer_isoc(&urb->ep->desc)) { in usb_hcd_map_urb_for_dma()
1464 urb->sg, in usb_hcd_map_urb_for_dma()
1465 urb->num_sgs, in usb_hcd_map_urb_for_dma()
1470 urb->transfer_flags |= URB_DMA_MAP_SG; in usb_hcd_map_urb_for_dma()
1471 urb->num_mapped_sgs = n; in usb_hcd_map_urb_for_dma()
1472 if (n != urb->num_sgs) in usb_hcd_map_urb_for_dma()
1473 urb->transfer_flags |= in usb_hcd_map_urb_for_dma()
1475 } else if (urb->sg) { in usb_hcd_map_urb_for_dma()
1476 struct scatterlist *sg = urb->sg; in usb_hcd_map_urb_for_dma()
1477 urb->transfer_dma = dma_map_page( in usb_hcd_map_urb_for_dma()
1481 urb->transfer_buffer_length, in usb_hcd_map_urb_for_dma()
1484 urb->transfer_dma)) in usb_hcd_map_urb_for_dma()
1487 urb->transfer_flags |= URB_DMA_MAP_PAGE; in usb_hcd_map_urb_for_dma()
1488 } else if (object_is_on_stack(urb->transfer_buffer)) { in usb_hcd_map_urb_for_dma()
1492 urb->transfer_dma = dma_map_single( in usb_hcd_map_urb_for_dma()
1494 urb->transfer_buffer, in usb_hcd_map_urb_for_dma()
1495 urb->transfer_buffer_length, in usb_hcd_map_urb_for_dma()
1498 urb->transfer_dma)) in usb_hcd_map_urb_for_dma()
1501 urb->transfer_flags |= URB_DMA_MAP_SINGLE; in usb_hcd_map_urb_for_dma()
1504 if (ret && (urb->transfer_flags & (URB_SETUP_MAP_SINGLE | in usb_hcd_map_urb_for_dma()
1506 usb_hcd_unmap_urb_for_dma(hcd, urb); in usb_hcd_map_urb_for_dma()
1519 int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) in usb_hcd_submit_urb() argument
1522 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); in usb_hcd_submit_urb()
1528 usb_get_urb(urb); in usb_hcd_submit_urb()
1529 atomic_inc(&urb->use_count); in usb_hcd_submit_urb()
1530 atomic_inc(&urb->dev->urbnum); in usb_hcd_submit_urb()
1531 usbmon_urb_submit(&hcd->self, urb); in usb_hcd_submit_urb()
1541 if (is_root_hub(urb->dev)) { in usb_hcd_submit_urb()
1542 status = rh_urb_enqueue(hcd, urb); in usb_hcd_submit_urb()
1544 status = map_urb_for_dma(hcd, urb, mem_flags); in usb_hcd_submit_urb()
1546 status = hcd->driver->urb_enqueue(hcd, urb, mem_flags); in usb_hcd_submit_urb()
1548 unmap_urb_for_dma(hcd, urb); in usb_hcd_submit_urb()
1553 usbmon_urb_submit_error(&hcd->self, urb, status); in usb_hcd_submit_urb()
1554 urb->hcpriv = NULL; in usb_hcd_submit_urb()
1555 INIT_LIST_HEAD(&urb->urb_list); in usb_hcd_submit_urb()
1556 atomic_dec(&urb->use_count); in usb_hcd_submit_urb()
1564 atomic_dec(&urb->dev->urbnum); in usb_hcd_submit_urb()
1565 if (atomic_read(&urb->reject)) in usb_hcd_submit_urb()
1567 usb_put_urb(urb); in usb_hcd_submit_urb()
1579 static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status) in unlink1() argument
1583 if (is_root_hub(urb->dev)) in unlink1()
1584 value = usb_rh_urb_dequeue(hcd, urb, status); in unlink1()
1590 value = hcd->driver->urb_dequeue(hcd, urb, status); in unlink1()
1601 int usb_hcd_unlink_urb (struct urb *urb, int status) in usb_hcd_unlink_urb() argument
1604 struct usb_device *udev = urb->dev; in usb_hcd_unlink_urb()
1614 if (atomic_read(&urb->use_count) > 0) { in usb_hcd_unlink_urb()
1620 hcd = bus_to_hcd(urb->dev->bus); in usb_hcd_unlink_urb()
1621 retval = unlink1(hcd, urb, status); in usb_hcd_unlink_urb()
1626 urb, retval); in usb_hcd_unlink_urb()
1634 static void __usb_hcd_giveback_urb(struct urb *urb) in __usb_hcd_giveback_urb() argument
1636 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); in __usb_hcd_giveback_urb()
1637 struct usb_anchor *anchor = urb->anchor; in __usb_hcd_giveback_urb()
1638 int status = urb->unlinked; in __usb_hcd_giveback_urb()
1640 urb->hcpriv = NULL; in __usb_hcd_giveback_urb()
1641 if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) && in __usb_hcd_giveback_urb()
1642 urb->actual_length < urb->transfer_buffer_length && in __usb_hcd_giveback_urb()
1646 unmap_urb_for_dma(hcd, urb); in __usb_hcd_giveback_urb()
1647 usbmon_urb_complete(&hcd->self, urb, status); in __usb_hcd_giveback_urb()
1649 usb_unanchor_urb(urb); in __usb_hcd_giveback_urb()
1654 urb->status = status; in __usb_hcd_giveback_urb()
1660 kcov_remote_start_usb_softirq((u64)urb->dev->bus->busnum); in __usb_hcd_giveback_urb()
1661 urb->complete(urb); in __usb_hcd_giveback_urb()
1665 atomic_dec(&urb->use_count); in __usb_hcd_giveback_urb()
1673 if (unlikely(atomic_read(&urb->reject))) in __usb_hcd_giveback_urb()
1675 usb_put_urb(urb); in __usb_hcd_giveback_urb()
1690 struct urb *urb; in usb_giveback_urb_bh() local
1692 urb = list_entry(local_list.next, struct urb, urb_list); in usb_giveback_urb_bh()
1693 list_del_init(&urb->urb_list); in usb_giveback_urb_bh()
1694 bh->completing_ep = urb->ep; in usb_giveback_urb_bh()
1695 __usb_hcd_giveback_urb(urb); in usb_giveback_urb_bh()
1735 void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status) in usb_hcd_giveback_urb() argument
1741 if (likely(!urb->unlinked)) in usb_hcd_giveback_urb()
1742 urb->unlinked = status; in usb_hcd_giveback_urb()
1744 if (!hcd_giveback_urb_in_bh(hcd) && !is_root_hub(urb->dev)) { in usb_hcd_giveback_urb()
1745 __usb_hcd_giveback_urb(urb); in usb_hcd_giveback_urb()
1749 if (usb_pipeisoc(urb->pipe) || usb_pipeint(urb->pipe)) in usb_hcd_giveback_urb()
1755 list_add_tail(&urb->urb_list, &bh->head); in usb_hcd_giveback_urb()
1778 struct urb *urb; in usb_hcd_flush_endpoint() local
1788 list_for_each_entry_reverse(urb, &ep->urb_list, urb_list) { in usb_hcd_flush_endpoint()
1791 if (urb->unlinked) in usb_hcd_flush_endpoint()
1793 usb_get_urb (urb); in usb_hcd_flush_endpoint()
1794 is_in = usb_urb_dir_in(urb); in usb_hcd_flush_endpoint()
1798 unlink1(hcd, urb, -ESHUTDOWN); in usb_hcd_flush_endpoint()
1801 urb, usb_endpoint_num(&ep->desc), in usb_hcd_flush_endpoint()
1804 usb_put_urb (urb); in usb_hcd_flush_endpoint()
1817 urb = NULL; in usb_hcd_flush_endpoint()
1819 urb = list_entry (ep->urb_list.prev, struct urb, in usb_hcd_flush_endpoint()
1821 usb_get_urb (urb); in usb_hcd_flush_endpoint()
1825 if (urb) { in usb_hcd_flush_endpoint()
1826 usb_kill_urb (urb); in usb_hcd_flush_endpoint()
1827 usb_put_urb (urb); in usb_hcd_flush_endpoint()
2132 static void usb_ehset_completion(struct urb *urb) in usb_ehset_completion() argument
2134 struct completion *done = urb->context; in usb_ehset_completion()
2144 static struct urb *request_single_step_set_feature_urb( in request_single_step_set_feature_urb()
2150 struct urb *urb; in request_single_step_set_feature_urb() local
2153 urb = usb_alloc_urb(0, GFP_KERNEL); in request_single_step_set_feature_urb()
2154 if (!urb) in request_single_step_set_feature_urb()
2157 urb->pipe = usb_rcvctrlpipe(udev, 0); in request_single_step_set_feature_urb()
2159 urb->ep = &udev->ep0; in request_single_step_set_feature_urb()
2160 urb->dev = udev; in request_single_step_set_feature_urb()
2161 urb->setup_packet = (void *)dr; in request_single_step_set_feature_urb()
2162 urb->transfer_buffer = buf; in request_single_step_set_feature_urb()
2163 urb->transfer_buffer_length = USB_DT_DEVICE_SIZE; in request_single_step_set_feature_urb()
2164 urb->complete = usb_ehset_completion; in request_single_step_set_feature_urb()
2165 urb->status = -EINPROGRESS; in request_single_step_set_feature_urb()
2166 urb->actual_length = 0; in request_single_step_set_feature_urb()
2167 urb->transfer_flags = URB_DIR_IN | URB_NO_TRANSFER_DMA_MAP; in request_single_step_set_feature_urb()
2168 usb_get_urb(urb); in request_single_step_set_feature_urb()
2169 atomic_inc(&urb->use_count); in request_single_step_set_feature_urb()
2170 atomic_inc(&urb->dev->urbnum); in request_single_step_set_feature_urb()
2171 if (map_urb_for_dma(hcd, urb, GFP_KERNEL)) { in request_single_step_set_feature_urb()
2172 usb_put_urb(urb); in request_single_step_set_feature_urb()
2173 usb_free_urb(urb); in request_single_step_set_feature_urb()
2177 urb->context = done; in request_single_step_set_feature_urb()
2178 return urb; in request_single_step_set_feature_urb()
2185 struct urb *urb; in ehset_single_step_set_feature() local
2212 urb = request_single_step_set_feature_urb(udev, dr, buf, &done); in ehset_single_step_set_feature()
2213 if (!urb) in ehset_single_step_set_feature()
2217 retval = hcd->driver->submit_single_step_set_feature(hcd, urb, 1); in ehset_single_step_set_feature()
2221 usb_kill_urb(urb); in ehset_single_step_set_feature()
2230 urb->status = -EINPROGRESS; in ehset_single_step_set_feature()
2231 urb->transfer_flags &= ~URB_NO_TRANSFER_DMA_MAP; in ehset_single_step_set_feature()
2232 usb_get_urb(urb); in ehset_single_step_set_feature()
2233 atomic_inc(&urb->use_count); in ehset_single_step_set_feature()
2234 atomic_inc(&urb->dev->urbnum); in ehset_single_step_set_feature()
2235 if (map_urb_for_dma(hcd, urb, GFP_KERNEL)) { in ehset_single_step_set_feature()
2236 usb_put_urb(urb); in ehset_single_step_set_feature()
2240 retval = hcd->driver->submit_single_step_set_feature(hcd, urb, 0); in ehset_single_step_set_feature()
2243 usb_kill_urb(urb); in ehset_single_step_set_feature()
2249 usb_free_urb(urb); in ehset_single_step_set_feature()