Intel Extensible Firmware Interface Network Router User Manual


  Open as PDF
of 1084
 
Version 1.10 12/01/02 9-1
9
Protocols - EFI Driver Model
EFI drivers that follow the EFI Driver Model are not allowed to search for controllers to manage.
When a specific controller is needed, the EFI boot service ConnectController()
is used
along with the EFI_DRIVER_BINDING_PROTOCOL
services to identify the best drivers for a
controller. Once ConnectController() has identified the best drivers for a controller, the
start service in the EFI_DRIVER_BINDING_PROTOCOL is used by ConnectController()
to start each driver on the controller. Once a controller is no longer needed, it can be released with
the EFI boot service DisconnectController()
. DisconnectController() calls the
stop service in each EFI_DRIVER_BINDING_PROTOCOL to stop the controller.
The driver initialization routine of an EFI driver is not allowed to touch any device hardware.
Instead, it just installs an instance of the EFI_DRIVER_BINDING_PROTOCOL on the
ImageHandle of the EFI driver. The test to determine if a driver supports a given controller
must be performed in as little time as possible without causing any side effects on any of the
controllers it is testing. As a result, most of the controller initialization code is present in the start
and stop services of the EFI_DRIVER_BINDING_PROTOCOL.
9.1 EFI Driver Binding Protocol
This section provides a detailed description of the EFI_DRIVER_BINDING_PROTOCOL. This
protocol is produced by every driver that follows the EFI Driver Model, and it is the central
component that allows drivers and controllers to be managed. It provides a service to test if a
specific controller is supported by a driver, a service to start managing a controller, and a service to
stop managing a controller. These services apply equally to drivers for both bus controllers and
device controllers.
EFI_DRIVER_BINDING_PROTOCOL
Summary
Provides the services required to determine if a driver supports a given controller. If a controller is
supported, then it also provides routines to start and stop the controller.
GUID
#define EFI_DRIVER_BINDING_PROTOCOL_GUID \
{0x18A031AB,0xB443,0x4D1A,0xA5,0xC0,0x0C,0x09,0x26,0x1E,0x9F,0x71}