]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[usbblk] Add support for USB mass storage devices
authorMichael Brown <mcb30@ipxe.org>
Mon, 12 Oct 2020 14:31:49 +0000 (15:31 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 13 Oct 2020 14:56:38 +0000 (15:56 +0100)
commit6d680bdec59b103f84ee922ec66ae5219c939938
tree161080c418e8c55c34f6e01597f96feaf1d95fde
parent88288407af0e24bebdc7a6cebe93a82285bbc4a1
[usbblk] Add support for USB mass storage devices

Some UEFI BIOSes (observed with at least the Insyde UEFI BIOS on a
Microsoft Surface Go) provide a very broken version of the
UsbMassStorageDxe driver that is incapable of binding to the standard
EFI_USB_IO_PROTOCOL instances and instead relies on an undocumented
proprietary protocol (with GUID c965c76a-d71e-4e66-ab06-c6230d528425)
installed by the platform's custom version of UsbCoreDxe.

The upshot is that USB mass storage devices become inaccessible once
iPXE's native USB host controller drivers are loaded.

One possible workaround is to load a known working version of
UsbMassStorageDxe (e.g. from the EDK2 tree): this driver will
correctly bind to the standard EFI_USB_IO_PROTOCOL instances exposed
by iPXE.  This workaround is ugly in practice, since it involves
embedding UsbMassStorageDxe.efi into the iPXE binary and including an
embedded script to perform the required "chain UsbMassStorageDxe.efi".

Provide a native USB mass storage driver for iPXE, allowing USB mass
storage devices to be exposed as iPXE SAN devices.

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