• Sarah Sharp's avatar
    USB: xhci: Bulk transfer support · b10de142
    Sarah Sharp authored
    Allow device drivers to submit URBs to bulk endpoints on devices under an
    xHCI host controller.  Share code between the control and bulk enqueueing
    functions when it makes sense.
    
    To get the best performance out of bulk transfers, SuperSpeed devices must
    have the bMaxBurst size copied from their endpoint companion controller
    into the xHCI device context.  This allows the host controller to "burst"
    up to 16 packets before it has to wait for the device to acknowledge the
    first packet.
    
    The buffers in Transfer Request Blocks (TRBs) can cross page boundaries,
    but they cannot cross 64KB boundaries.  The buffer must be broken into
    multiple TRBs if a 64KB boundary is crossed.
    
    The sum of buffer lengths in all the TRBs in a Transfer Descriptor (TD)
    cannot exceed 64MB.  To work around this, the enqueueing code must enqueue
    multiple TDs.  The transfer event handler may incorrectly give back the
    URB in this case, if it gets a transfer event that points somewhere in the
    first TD.  FIXME later.
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    b10de142
xhci-ring.c 31.8 KB