• Sarah Sharp's avatar
    xhci: Store information about roothubs and TTs. · 839c817c
    Sarah Sharp authored
    For upcoming patches, we need to keep information about the bandwidth
    domains under the xHCI host.  Each root port is a separate primary
    bandwidth domain, and each high speed hub's TT (and potentially each port
    on a multi-TT hub) is a secondary bandwidth domain.
    
    If the table were in text form, it would look a bit like this:
    
    EP Interval	Sum of Number	Largest Max	Max Packet
    		of Packets	Packet Size	Overhead
    	0	   N		   mps		  overhead
    ...
    	15	   N		   mps		  overhead
    
    Overhead is the maximum packet overhead (for bit stuffing, CRC, protocol
    overhead, etc) for all the endpoints in this interval.  Devices with
    different speeds have different max packet overhead.  For example, if
    there is a low speed and a full speed endpoint that both have an interval
    of 3, we would use the higher overhead (the low speed overhead).  Interval
    0 is a bit special, since we really just want to know the sum of the max
    ESIT payloads instead of the largest max packet size.  That's stored in
    the interval0_esit_payload variable.  For root ports, we also need to keep
    track of the number of active TTs.
    
    For each root port, and each TT under a root port, store some information
    about the bandwidth consumption.  Dynamically allocate an array of root
    port bandwidth information for the number of root ports on the xHCI host.
    Each root port stores a list of TTs under the root port.  A single TT hub
    only has one entry in the list, but a multi-TT hub will have an entry per
    port.
    
    When the USB core says that a USB device is a hub, create one or more
    entries in the root port TT list for the hub.  When a device is deleted,
    and it is a hub, search through the root port TT list and delete all
    TT entries for the hub.  Keep track of which TT entry is associated with a
    device under a TT.
    
    LS/FS devices attached directly to the root port will have usb_device->tt
    set to the roothub.  Ignore that, and treat it like a primary bandwidth
    domain, since there isn't really a high speed bus between the roothub and
    the host.
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    839c817c
xhci-mem.c 67.6 KB