6d680bdec5
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>
66 lines
1.5 KiB
C
66 lines
1.5 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
* 02110-1301, USA.
|
|
*
|
|
* You can also choose to distribute this program under the terms of
|
|
* the Unmodified Binary Distribution Licence (as given in the file
|
|
* COPYING.UBDL), provided that you have satisfied its requirements.
|
|
*/
|
|
|
|
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|
|
|
#include <config/usb.h>
|
|
|
|
/** @file
|
|
*
|
|
* USB configuration options
|
|
*
|
|
*/
|
|
|
|
PROVIDE_REQUIRING_SYMBOL();
|
|
|
|
/*
|
|
* Drag in USB controllers
|
|
*/
|
|
#ifdef USB_HCD_XHCI
|
|
REQUIRE_OBJECT ( xhci );
|
|
#endif
|
|
#ifdef USB_HCD_EHCI
|
|
REQUIRE_OBJECT ( ehci );
|
|
#endif
|
|
#ifdef USB_HCD_UHCI
|
|
REQUIRE_OBJECT ( uhci );
|
|
#endif
|
|
#ifdef USB_HCD_USBIO
|
|
REQUIRE_OBJECT ( usbio );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in USB peripherals
|
|
*/
|
|
#ifdef USB_KEYBOARD
|
|
REQUIRE_OBJECT ( usbkbd );
|
|
#endif
|
|
#ifdef USB_BLOCK
|
|
REQUIRE_OBJECT ( usbblk );
|
|
#endif
|
|
|
|
/*
|
|
* Drag in USB external interfaces
|
|
*/
|
|
#ifdef USB_EFI
|
|
REQUIRE_OBJECT ( efi_usb );
|
|
#endif
|