Skip to content
  • Sarah Sharp's avatar
    UAS: Use unique tags on non-streams devices. · 9eb44541
    Sarah Sharp authored
    
    
    UAS can work with either USB 3.0 devices that support bulk streams, or
    USB 2.0 devices that do not support bulk streams.  When we're working
    with a non-streams device, we need to be able to uniquely identify a
    SCSI command with a tag in the IU.  Devices will barf and abort all
    queued commands if they find a duplicate tag.
    
    uas_queuecommand_lck() sets cmdinfo->stream to zero if the device
    doesn't support streams, which is later passed into uas_alloc_cmd_urb()
    as the variable stream.  This means the UAS driver was setting the tag
    in all commands to zero for non-stream devices.  So the UAS driver won't
    currently work with USB 2.0 devices.
    
    Use the SCSI command tag instead of the stream ID for the command IU
    tag.  We have to add one to the SCSI command tag because SCSI tags are
    zero-based, but stream IDs are one-based, and the command tag must match
    the stream ID that we're queueing the data IUs for.  Untagged SCSI
    commands use stream ID 1.
    
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Cc: Matthew Wilcox <willy@linux.intel.com>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    9eb44541