EDK II contains a generic PCI bus driver. It uses the services of the
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL to enumerate PCI devices and produce a child handle with an
EFI_DEVICE_PATH_PROTOCOL and an
EFI_PCI_IO_PROTOCOL. The source code to this driver is in the EDK II package called
MdeModulePkg in the directory
This bus type can support producing one child handle at a time by parsing the RemainingDevicePath in its
Start() services. However, producing one child handle at a time for a PCI bus generally does not make sense. This is because the PCI bus driver needs to enumerate and assign resources to all of the PCI devices before even a single child handle can be produced.
It does not take much extra time to produce the child handles for all the enumerated PCI devices. Because of this, it is recommended that the PCI bus driver produce all of the PCI devices on the first call to
If a UEFI based system firmware is ported to a new platform, most of the PCI-related changes occur in the implementation of the Root Bridge Driver producing the
TIP: PCI Bus Driver customizations are strongly discouraged because the PCI Bus Driver is designed to be conformant with the PCI Specification. Instead, focus platform specific customizations on the Root Bridge Driver that produced EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL and its PCI Device Drivers.