6.3.2 Optional Hybrid Driver Features

The following is a list of features a hybrid driver can optionally implement. Those recommended are noted below.
  • Install one or more instances of the EFI_COMPONENT_NAME2_PROTOCOL in the
    driver's entry point. Implementing this feature is strongly recommended
It allows a driver to provide human-readable names for the name of the driver and the controllers that the driver is managing.
  • Register one or more HII packages in the driver's entry point.
These HII packages provide strings, fonts and forms that allow users (such as IT administrators) to change the driver's configuration. These HII packages are required only if a driver must provide the ability for a user to change configuration settings for a device.
  • Install one or more instances of the EFI_DRIVER_DIAGNOSTICS2_PROTOCOL in
    the driver's entry point.
If a driver needs to provide diagnostics for the controllers the driver manages, this protocol is required.
  • Provide an EFI_LOADED_IMAGE_PROTOCOL.Unload() service, so the driver can be
    dynamically unloaded.
It is recommended that this feature be implemented during driver development, driver debug, and system integration. It is strongly recommended that this service remain in drivers for add-in adapters to help debug interaction issues during system integration.
  • Parses the RemainingDevicePath parameter that is passed into the
    Supported() and Start() services of the Driver Binding Protocol if it is
    not NULL.
This is strongly recommended so a bus driver can start only the one child specified by RemainingDevicePath. Implementing this feature may significantly improve platform boot performance.
  • Install an EFI_DEVICE_PATH_PROTOCOL on each child handle that is created.
This feature is required only if the child handle represents a physical device. If the child handle represents a virtual device, then an EFI_DEVICE_PATH_PROTOCOL is not required.
  • Install one or more instances of the EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL in
    the driver's entry point.
This protocol is required only if a higher priority rule for connecting drivers to a controller through the UEFI Boot Service ConnectController()is needed.
  • Install one or more instances of the EFI_DRIVER_HEALTH_PROTOCOL in the
    driver's entry point.
This protocol is required only for drivers that manage devices that can be in a recoverably bad state through either a repair operation or a configuration operation.
  • Install one or more instances of the
EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL in the driver's entry point.
This protocol is required only for bus drivers for a bus type where the devices on the bus can provide a container for more than one UEFI Driver. An example of such a bus type is PCI, with PCI Option ROMs on PCI Adapters containing more than one UEFI Driver.
  • Install an instance of the EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL in the
    driver's entry point.
This protocol is required for PCI controller or other plug-in cards Implementation of this feature is recommended.
  • Create an Exit Boot Services event in the driver's entry point.
This feature is required only if the driver is required to place the devices it manages in a specific state just before control is handed to an operating system.
  • Creates a Set Virtual Address Map event in the driver's entry point.
This feature is required only for a device driver that is a UEFI runtime driver.

6.3.2.1 Compatibility with Older EFI/UEFI Specifications

The following is the list of features a hybrid driver can optionally implement to provide compatibility with older versions of the EFI Specification and UEFI Specification.
  • Install one or more instances of the EFI_COMPONENT_NAME_PROTOCOL in the
    driver's entry point.
Implementing this feature is strongly recommended for drivers that are required to be compatible with EFI 1.10 It allows a driver to provide human-readable names for the name of the driver and the controllers it manages. The EDK II libraries provide easy methods to produce both the Component Name Protocol and the Component Name 2 Protocol with very little additional overhead.
  • Install one or more instances of the EFI_DRIVER_CONFIGURATION_PROTOCOL in
    the driver's entry point.
It is required if a driver must be compatible with EFI 1.10 and has any configurable options.
  • Install one or more instances of the EFI_DRIVER_CONFIGURATION2_PROTOCOL in
    the driver's entry point.
It is required if a driver must be compatible with UEFI 2.0 and has any configurable options.
  • Install one or more instances of the EFI_DRIVER_DIAGNOSTICS_PROTOCOL in the
    driver's entry point.
It is required if a driver must be compatible with EFI 1.10 and provide diagnostics for the controllers that the driver manages.