USB: Support for allocating USB 3.0 streams.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 5 Apr 2010 17:55:58 +0000 (10:55 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 20 May 2010 20:21:38 +0000 (13:21 -0700)
commiteab1cafc3b524b714b0567ab98fc75ace09db98c
tree854ed5c4cba741efabec933714dac5c68bcbb452
parente9df17eb1408cfafa3d1844bfc7f22c7237b31b8
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>
Documentation/usb/bulk-streams.txt [new file with mode: 0644]
drivers/usb/core/hcd.c
drivers/usb/host/xhci-pci.c
include/linux/usb.h
include/linux/usb/hcd.h