aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/usb.h
diff options
context:
space:
mode:
authorSarah Sharp <sarah.a.sharp@linux.intel.com>2010-04-05 13:55:58 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-20 16:21:38 -0400
commiteab1cafc3b524b714b0567ab98fc75ace09db98c (patch)
tree854ed5c4cba741efabec933714dac5c68bcbb452 /include/linux/usb.h
parente9df17eb1408cfafa3d1844bfc7f22c7237b31b8 (diff)
USB: Support for allocating USB 3.0 streams.
Bulk endpoint streams were added in the USB 3.0 specification. Streams allow a device driver to overload a bulk endpoint so that multiple transfers can be queued at once. The device then decides which transfer it wants to work on first, and can queue part of a transfer before it switches to a new stream. All this switching is invisible to the device driver, which just gets a completion for the URB. Drivers that use streams must be able to handle URBs completing in a different order than they were submitted to the endpoint. This requires adding new API to set up xHCI data structures to support multiple queues ("stream rings") per endpoint. Drivers will allocate a number of stream IDs before enqueueing URBs to the bulk endpoints of the device, and free the stream IDs in their disconnect function. See Documentation/usb/bulk-streams.txt for details. The new mass storage device class, USB Attached SCSI Protocol (UASP), uses these streams API. Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux/usb.h')
-rw-r--r--include/linux/usb.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 191af498c4f5..1ea25377ca0d 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -570,6 +570,16 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
570/* for drivers using iso endpoints */ 570/* for drivers using iso endpoints */
571extern int usb_get_current_frame_number(struct usb_device *usb_dev); 571extern int usb_get_current_frame_number(struct usb_device *usb_dev);
572 572
573/* Sets up a group of bulk endpoints to support multiple stream IDs. */
574extern int usb_alloc_streams(struct usb_interface *interface,
575 struct usb_host_endpoint **eps, unsigned int num_eps,
576 unsigned int num_streams, gfp_t mem_flags);
577
578/* Reverts a group of bulk endpoints back to not using stream IDs. */
579extern void usb_free_streams(struct usb_interface *interface,
580 struct usb_host_endpoint **eps, unsigned int num_eps,
581 gfp_t mem_flags);
582
573/* used these for multi-interface device registration */ 583/* used these for multi-interface device registration */
574extern int usb_driver_claim_interface(struct usb_driver *driver, 584extern int usb_driver_claim_interface(struct usb_driver *driver,
575 struct usb_interface *iface, void *priv); 585 struct usb_interface *iface, void *priv);