3.15.1 Connecting PCI Root Bridges
During UEFI-conformant firmware initialization by the platform, the system typically uses the service
LoadImage()to load a root bridge driver for the root device. One common example is a PCI root bridge driver.
Like all drivers, as it loads, UEFI firmware creates a handle in the handle database and attaches an instance of the
EFI_LOADED_IMAGE_PROTOCOLwith the unique image information for the PCI root bridge driver. Because this driver is the system root driver, it does not follow the UEFI Driver Model. Instead, it immediately uses its knowledge about the platform architecture to create handles for each PCI root bridge
As viewed using the
dhUEFI Shell command below, a portion of the handle database shows a single PCI root bridge. Some platforms, such as data center servers, will have more than one PCI root bridge.
A PCI root bridge driver installs the
EFI_DEVICE_PATH_PROTOCOLonto a new handle. By not installing the Driver Binding
Protocol, the PCI root bridge prevents itself from being disconnected or reconnected later on. For example, the handle database as viewed with the
dhUEFI Shell command might look like the following after the PCI root bridge driver is loaded and executed.
This example shows an image handle that is a single controller handle with a PCI Root Bridge I/O Protocol and the Device Path Protocol.
C: PciRootBridgeIo DevPath (Acpi(HWP0002,0,PNP0A03))
Note: PNP0A03 may appear in either _HID or _CID of the PCI root bridge device path node. This example is one where it is not in _HID.
OS loaders usually require access to the boot devices to complete an OS boot operation. Boot devices must have a Device Path Protocol that represents the unique name of the boot device. The Device Path Protocol for a boot device attached to a PCI Bus would start with a single ACPI node
Acpi(HID, UID, CID). This node also points the OS to the place in the ACPI name space where the ACPI description of the PCI root bridge is stored. The
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOLprovides PCI functions that are used by the PCI bus driver that is described in next section.