Intel Extensible Firmware Interface Network Router User Manual


  Open as PDF
of 1084
 
Services — Boot Services
Version 1.10 12/01/02 5-35
The second group of boot services is used to deterministically connect and disconnect drivers to
controllers. The boot services in this group are ConnectController()
and
DisconnectController()
. These services take advantage of the new features of the handle
database along with the new protocols described in this document to manage the drivers and
controllers present in the system. ConnectController() uses a set of strict precedence rules
to find the best set of drivers for a controller. This provides a deterministic matching of drivers to
controllers with extensibility mechanisms for OEMs, IBVs, and IHVs.
DisconnectController() allows drivers to be disconnected from controllers in a controlled
manner, and by using the new features of the handle database it is possible to fail a disconnect
request because a protocol interface cannot be released at the time of the disconnect request.
The third group of boot services is designed to help simplify the implementation of drivers, and
produce drivers with smaller executable footprints. The LocateHandleBuffer()
is a new
version of LocateHandle()
that allocates the required buffer for the caller. This eliminates two
calls to LocateHandle() and a call to AllocatePool()
from the caller's code.
LocateProtocol()
searches the handle database for the first protocol instance that matches the
search criteria. The InstallMultipleProtocolInterfaces()
and
UninstallMutipleProtocolInterfaces()
are very useful to driver writers. These boot
services allow one or more protocol interfaces to be added or removed from a handle. In addition,
InstallMultipleProtocolInterfaces() guarantees that a duplicate device path is
never added to the handle database. This is very useful to bus drivers that can create one child
handle at a time, because it guarantees that the bus driver will not inadvertently create two instances
of the same child handle.