diff options
author | Michael Brown <mcb30@ipxe.org> | 2020-10-12 15:31:49 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2020-10-13 15:56:38 +0100 |
commit | 6d680bdec59b103f84ee922ec66ae5219c939938 (patch) | |
tree | 161080c418e8c55c34f6e01597f96feaf1d95fde /src/config | |
parent | 88288407af0e24bebdc7a6cebe93a82285bbc4a1 (diff) | |
download | ipxe-6d680bdec59b103f84ee922ec66ae5219c939938.zip ipxe-6d680bdec59b103f84ee922ec66ae5219c939938.tar.gz ipxe-6d680bdec59b103f84ee922ec66ae5219c939938.tar.bz2 |
[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>
Diffstat (limited to 'src/config')
-rw-r--r-- | src/config/config_usb.c | 3 | ||||
-rw-r--r-- | src/config/defaults/efi.h | 1 | ||||
-rw-r--r-- | src/config/defaults/pcbios.h | 1 | ||||
-rw-r--r-- | src/config/usb.h | 1 |
4 files changed, 6 insertions, 0 deletions
diff --git a/src/config/config_usb.c b/src/config/config_usb.c index 17296d2..b679aeb 100644 --- a/src/config/config_usb.c +++ b/src/config/config_usb.c @@ -53,6 +53,9 @@ REQUIRE_OBJECT ( usbio ); #ifdef USB_KEYBOARD REQUIRE_OBJECT ( usbkbd ); #endif +#ifdef USB_BLOCK +REQUIRE_OBJECT ( usbblk ); +#endif /* * Drag in USB external interfaces diff --git a/src/config/defaults/efi.h b/src/config/defaults/efi.h index e707dfa..4ae6a31 100644 --- a/src/config/defaults/efi.h +++ b/src/config/defaults/efi.h @@ -39,6 +39,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define USB_HCD_EHCI /* EHCI USB host controller */ #define USB_HCD_UHCI /* UHCI USB host controller */ #define USB_EFI /* Provide EFI_USB_IO_PROTOCOL interface */ +#define USB_BLOCK /* USB block devices */ #define REBOOT_CMD /* Reboot command */ diff --git a/src/config/defaults/pcbios.h b/src/config/defaults/pcbios.h index 21821c9..41afb90 100644 --- a/src/config/defaults/pcbios.h +++ b/src/config/defaults/pcbios.h @@ -48,6 +48,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define USB_HCD_EHCI /* EHCI USB host controller */ #define USB_HCD_UHCI /* UHCI USB host controller */ #define USB_KEYBOARD /* USB keyboards */ +#define USB_BLOCK /* USB block devices */ #define REBOOT_CMD /* Reboot command */ #define CPUID_CMD /* x86 CPU feature detection command */ diff --git a/src/config/usb.h b/src/config/usb.h index d2519d8..4252ec2 100644 --- a/src/config/usb.h +++ b/src/config/usb.h @@ -25,6 +25,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); * */ //#undef USB_KEYBOARD /* USB keyboards */ +//#undef USB_BLOCK /* USB block devices */ /* * USB external interfaces |