• S
    xhci: Track interval bandwidth tables per port/TT. · 2e27980e
    Sarah Sharp 提交于
    In order to update the root port or TT's bandwidth interval table, we will
    need to keep track of a list of endpoints, per interval.  That way we can
    easily know the new largest max packet size when we have to remove an
    endpoint.
    
    Add an endpoint list for each root port or TT structure, sorted by
    endpoint max packet size.  Insert new endpoints into the list such that
    the head of the list always has the endpoint with the greatest max packet
    size.  Only insert endpoints and update the interval table with new
    information when those endpoints are periodic.
    
    Make sure to update the number of active TTs when we add or drop periodic
    endpoints.  A TT is only considered active if it has one or more periodic
    endpoints attached (control and bulk are best effort, and counted in the
    20% reserved on the high speed bus).  If the number of active endpoints
    for a TT was zero, and it's now non-zero, increment the number of active
    TTs for the rootport.  If the number of active endpoints was non-zero, and
    it's now zero, decrement the number of active TTs.
    
    We have to be careful when we're checking the bandwidth for a new
    configuration/alt setting.  If we don't have enough bandwidth, we need to
    be able to "roll back" the bandwidth information stored in the endpoint
    and the root port/TT interval bandwidth table.  We can't just create a
    copy of the interval bandwidth table, modify it, and check the bandwidth
    with the copy because we have lists of endpoints and entries can't be on
    more than one list.  Instead, we copy the old endpoint bandwidth
    information, and use it to revert the interval table when the bandwidth
    check fails.
    
    We don't check the bandwidth after endpoints are dropped from the interval
    table when a device is reset or freed after a disconnect, because having
    endpoints use less bandwidth should not push the bandwidth usage over the
    limits.  Besides which, we can't fail a device disconnect.
    Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    2e27980e
xhci.h 57.9 KB