[efi] Add a USB host controller driver based on EFI_USB_IO_PROTOCOL
authorMichael Brown <mcb30@ipxe.org>
Fri, 4 Sep 2015 01:26:01 +0000 (02:26 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 7 Sep 2015 00:38:40 +0000 (01:38 +0100)
commit15a8800a984239553cbbb6629e076e98a3be7537
tree87c62eac43dc8f06224e128625d157e5cdf94fc9
parent5cea7bdb2af44a5e6b652c302f2761dc8fa1048f
[efi] Add a USB host controller driver based on EFI_USB_IO_PROTOCOL

Allow iPXE to coexist with other USB device drivers, by attaching to
the EFI_USB_IO_PROTOCOL instances provided by the UEFI platform
firmware.

The EFI_USB_IO_PROTOCOL is an unsurprisingly badly designed
abstraction of a USB device.  The poor design choices intrinsic in the
UEFI specification prevent efficient operation as a network device,
with the result that devices operated using the EFI_USB_IO_PROTOCOL
operate approximately two orders of magnitude slower than devices
operated using our native EHCI or xHCI host controller drivers.

Since the performance is so abysmally slow, and since the underlying
problems are due to fundamental architectural mistakes in the UEFI
specification, support for the EFI_USB_IO_PROTOCOL host controller
driver is left as disabled by default.  Users are advised to use the
native iPXE host controller drivers instead.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/config/config_usb.c
src/config/usb.h
src/drivers/usb/usbio.c [new file with mode: 0644]
src/drivers/usb/usbio.h [new file with mode: 0644]
src/include/ipxe/errfile.h
src/include/ipxe/usb.h