19.1.2 Driver Binding Protocol Start()
The
Start()
service of the Driver Binding Protocol for the USB host controller driver also opens the PCI I/O Protocol with an attribute of EFI_OPEN_PROTOCOL_BY_DRIVER
. This is followed by an initialization of the USB host controller hardware and an installation of a EFI_USB2_HC_PROTOCOL
instance into the Handle Database.Some USB host controllers provide legacy support to be compatible with legacy devices. Under this mode, the USB input device, including mouse and keyboard, act as if they are behind an 8042 keyboard controller. A UEFI implementation uses the native USB support rather than the legacy support.
As a result, the USB legacy support must be disabled in the
Start()
service of the USB host controller driver, before enabling the USB host controller. This step is required because the legacy support conflicts with the native USB support provided in UEFI USB driver stack. The example below shows how to turn off USB legacy support for a UHCI 1.1 Host Controllers.///
/// USB legacy Support
///
#define USB_EMULATION 0xc0
EFI_STATUS
EFIAPI
TurnOffUSBLegacySupport (
IN EFI_PCI_IO_PROTOCOL *PciIo
)
{
EFI_STATUS Status;
UINT16 Command;
//
// Disable USB Legacy Support by writing 0x0000 to the USB_EMULATION
// register in the PCI Configuration of the PCI Controller
//
Command = 0;
Status = PciIo->Pci.Write (
PciIo, // This
EfiPciIoWidthUint16, // Width
USB_EMULATION, // Offset
1, // Count
&Command // Buffer
);
return Status;
}