• S
    USB: Push scatter gather lists down to host controller drivers. · e04748e3
    Sarah Sharp 提交于
    This is the original patch I created before David Vrabel posted a better
    patch (http://marc.info/?l=linux-usb&m=123377477209109&w=2) that does
    basically the same thing.  This patch will get replaced with his
    (modified) patch later.
    
    Allow USB device drivers that use usb_sg_init() and usb_sg_wait() to push
    bulk endpoint scatter gather lists down to the host controller drivers.
    This allows host controller drivers to more efficiently enqueue these
    transfers, and allows the xHCI host controller to better take advantage of
    USB 3.0 "bursts" for bulk endpoints.
    
    This patch currently only enables scatter gather lists for bulk endpoints.
    Other endpoint types that use the usb_sg_* functions will not have their
    scatter gather lists pushed down to the host controller.  For periodic
    endpoints, we want each scatterlist entry to be a separate transfer.
    Eventually, HCDs could parse these scatter-gather lists for periodic
    endpoints also.  For now, we use the old code and call usb_submit_urb()
    for each scatterlist entry.
    
    The caller of usb_sg_init() can request that all bytes in the scatter
    gather list be transferred by passing in a length of zero.  Handle that
    request for a bulk endpoint under xHCI by walking the scatter gather list
    and calculating the length.  We could let the HCD handle a zero length in
    this case, but I'm not sure if the core layers in between will get
    confused by this.
    Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    e04748e3
hcd.c 64.2 KB