Beyond BIOS: Implementing the Unified Extensible Firmware Interface with Intel's Framework

Things should be made as simple as possible but no simpler.
Albert Einstein
The Extensible Firmware Interface (EFI) provides a driver model for support of devices that attach to today's industry-standard buses, such as PCI and USB, and architectures of tomorrow. The EFI Driver Model is intended to simplify the design and implementation of device drivers and produce small executable image sizes. As a result, some complexity has been moved into bus drivers and to a greater extent into common firmware services. A device driver needs to produce a Driver Binding Protocol on the same image handle on which the driver was loaded. It then waits for the system firmware to connect the driver to a controller. When that occurs, the device driver is responsible for producing a protocol on the controller's device handle that abstracts the I/O operations that the controller supports. A bus driver performs these exact same tasks. In addition, a bus driver is also responsible for discovering any child controllers on the bus, and creating a device handle for each child controller found.
The combination of firmware services, bus drivers, and device drivers in any given platform is likely to be produced by a wide variety of vendors including OEMs, IBVs, and IHVs. These different components from different vendors are required to work together to produce a protocol for an I/O device than can be used to boot an EFI compliant operating system. As a result, the EFI Driver Model is described in great detail in...