mirror of https://github.com/acidanthera/audk.git
8fc06b6e19
If a device which support both features SR-IOV/ARI has multi functions, which maybe support 8-255. After enable ARI forwarding in the root port and ARI Capable Hierarchy in the SR-IOV PF0. The device will support and expose multi functions(0-255) with ARI ID routing. In next device loop in below for() code, actually it still be in the same SR-IOV device, and just some PF which is over 8 or higher one(n*8), PciAllocateBusNumber() will allocate bus number(ReservedBusNum - TempReservedBusNum)) for this PF. if reset TempReservedBusNum as 0 in this case,it will allocate wrong bus number for this PF because TempReservedBusNum should be total previous PF's reserved bus numbers. code: for (Device = 0; Device <= PCI_MAX_DEVICE; Device++) { TempReservedBusNum = 0; for (Func = 0; Func <= PCI_MAX_FUNC; Func++) { // // Check to see whether a pci device is present // Status = PciDevicePresent ( PciRootBridgeIo, &Pci, StartBusNumber, Device, Func ); ... Status = PciAllocateBusNumber (PciDevice, *SubBusNumber, (UINT8)(PciDevice->ReservedBusNum - TempReservedBusNum), SubBusNumber); The solution is add a new flag IsAriEnabled to help handle this case. if ARI is enabled, then TempReservedBusNum will not be reset again during all functions(1-255) scan with checking flag IsAriEnabled. Signed-off-by: Foster Nong <foster.nong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> |
||
---|---|---|
.. | ||
ComponentName.c | ||
ComponentName.h | ||
PciBus.c | ||
PciBus.h | ||
PciBusDxe.inf | ||
PciBusDxe.uni | ||
PciBusDxeExtra.uni | ||
PciCommand.c | ||
PciCommand.h | ||
PciDeviceSupport.c | ||
PciDeviceSupport.h | ||
PciDriverOverride.c | ||
PciDriverOverride.h | ||
PciEnumerator.c | ||
PciEnumerator.h | ||
PciEnumeratorSupport.c | ||
PciEnumeratorSupport.h | ||
PciHotPlugSupport.c | ||
PciHotPlugSupport.h | ||
PciIo.c | ||
PciIo.h | ||
PciLib.c | ||
PciLib.h | ||
PciOptionRomSupport.c | ||
PciOptionRomSupport.h | ||
PciPowerManagement.c | ||
PciPowerManagement.h | ||
PciResourceSupport.c | ||
PciResourceSupport.h | ||
PciRomTable.c | ||
PciRomTable.h |