• Sarah Sharp's avatar
    USB: xhci: Notify the xHC when a device is reset. · 2a8f82c4
    Sarah Sharp authored
    When a USB device is reset, the xHCI hardware must know, in order to match
    the device state and disable all endpoints except control endpoint 0.
    Issue a Reset Device command after a USB device is successfully reset.
    Wait on the command to finish, and then cache or free the disabled
    endpoint rings.
    
    There are four different USB device states that the xHCI hardware tracks:
     - disabled/enabled - device connection has just been detected,
     - default - the device has been reset and has an address of 0,
     - addressed - the device has a non-zero address but no configuration has
       been set,
     - configured - a set configuration succeeded.
    
    The USB core may issue a port reset when a device is in any state, but the
    Reset Device command will fail for a 0.96 xHC if the device is not in the
    addressed or configured state.  Don't consider this failure as an error,
    but don't free any endpoint rings if this command fails.
    
    A storage driver may request that the USB device be reset during error
    handling, so use GPF_NOIO instead of GPF_KERNEL while allocating memory
    for the Reset Device command.
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    2a8f82c4
xhci.h 45.5 KB