• Nicolas Saenz Julienne's avatar
    usb: xhci: add Immediate Data Transfer support · 33e39350
    Nicolas Saenz Julienne authored
    Immediate data transfers (IDT) allow the HCD to copy small chunks of
    data (up to 8bytes) directly into its output transfer TRBs. This avoids
    the somewhat expensive DMA mappings that are performed by default on
    most URBs submissions.
    
    In the case an URB was suitable for IDT. The data is directly copied
    into the "Data Buffer Pointer" region of the TRB and the IDT flag is
    set. Instead of triggering memory accesses the HC will use the data
    directly.
    
    The implementation could cover all kind of output endpoints. Yet
    Isochronous endpoints are bypassed as I was unable to find one that
    matched IDT's constraints. As we try to bypass the default DMA mappings
    on URB buffers we'd need to find a Isochronous device with an
    urb->transfer_buffer_length <= 8 bytes.
    
    The implementation takes into account that the 8 byte buffers provided
    by the URB will never cross a 64KB boundary.
    Signed-off-by: default avatarNicolas Saenz Julienne <nsaenzjulienne@suse.de>
    Reviewed-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    33e39350
xhci.c 155 KB