[pci] Avoid scanning nonexistent buses when using PCIAPI_DIRECT

There is no method for obtaining the number of PCI buses when using
PCIAPI_DIRECT, and we therefore currently scan all possible bus
numbers.  This can cause a several-second startup delay in some
virtualised environments, since PCI configuration space access will
necessarily require the involvement of the hypervisor.

Ameliorate this situation by defaulting to scanning only a single bus,
and expanding the number of PCI buses to accommodate any subordinate
buses that are detected during enumeration.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2021-04-10 13:14:30 +01:00
parent c0346dbb49
commit 0be8491b71
3 changed files with 30 additions and 4 deletions

View File

@@ -135,6 +135,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define PCI_CLASS_SERIAL_USB_EHCI 0x20 /**< ECHI USB controller */
#define PCI_CLASS_SERIAL_USB_XHCI 0x30 /**< xHCI USB controller */
/** Subordinate bus number */
#define PCI_SUBORDINATE 0x1a
/** Construct PCI class
*
* @v base Base class (or PCI_ANY_ID)