4d100c7 conf: permit auto-assignment of controller indexes

Authored and Committed by Laine Stump 7 years ago
    conf: permit auto-assignment of controller indexes
    
    Hand-entering indexes for 20 PCI controllers is not as tedious as
    manually determining and entering their PCI addresses, but it's still
    annoying, and the algorithm for determining the proper index is
    incredibly simple (in all cases except one) - just pick the lowest
    unused index.
    
    The one exception is USB2 controllers because multiple controllers in
    the same group have the same index. For these we look to see if 1) the
    most recently added USB controller is also a USB2 controller, and 2)
    the group *that* controller belongs to doesn't yet have a controller
    of the exact model we're just now adding - if both are true, the new
    controller gets the same index, but in all other cases we just assign
    the lowest unused index.
    
    With this patch in place and combined with the automatic PCI address
    assignment, we can define a PCIe switch with several ports like this:
    
      <controller type='pci' model='pcie-root-port'/>
      <controller type='pci' model='pcie-switch-upstream-port'/>
      <controller type='pci' model='pcie-switch-downstream-port'/>
      <controller type='pci' model='pcie-switch-downstream-port'/>
      <controller type='pci' model='pcie-switch-downstream-port'/>
      <controller type='pci' model='pcie-switch-downstream-port'/>
      <controller type='pci' model='pcie-switch-downstream-port'/>
      ...
    
    These will each get a unique index, and PCI addresses that connect
    them together appropriately with no pesky numbers required.
    
        
file modified
+5 -2
file modified
+110 -14
file modified
+1 -1
file modified
+3 -2
file modified
+8 -0
file modified
+9 -0
file modified
+9 -1