6.2.4 Bus drivers with multiple driver binding protocols

The driver entry point of a bus driver is very similar to the driver entry point of a device driver. The discussion in Section 6.1.5 applies equally well to both bus drivers and device drivers. The differences between bus drivers and device drivers are exposed in the implementations of the Driver Binding Protocol. The following discussions describe the behaviors of the Start() function of the Driver Binding Protocol for each type of bus driver.

An example bus driver in EDK II that produces multiple instances of the EFI_DRIVER_BINDING_PROTOCOL, is the console splitter driver in the MdeModulePkg/Universal/Console/ConSplitterDxe subdirectory. This driver multiplexes multiple console output and console input devices into a single virtual console device. It produces instances of the Driver Binding Protocol for the following:

  • Console input device

  • Console output devices

  • Standard error device

  • Simple pointer devices

  • Absolute pointer devices

This driver is an example of a single feature that can be added or removed from a platform by adding or removing a single component. It could have been implemented as five different drivers, but there were many common functions between the drivers, so it also saved code space to combine these five functions.