]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[usbblk] Allow USB block device to be described using an EFI device path
authorMichael Brown <mcb30@ipxe.org>
Fri, 16 Oct 2020 14:11:16 +0000 (15:11 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 16 Oct 2020 14:38:20 +0000 (15:38 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/usb/usbblk.c

index a68e3ced51304933ee8a69146f0facee70394dac..5a086d3f850f1f95cf133c876908b9bde957b90e 100644 (file)
@@ -31,6 +31,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 #include <ipxe/xfer.h>
 #include <ipxe/uri.h>
 #include <ipxe/open.h>
+#include <ipxe/efi/efi_path.h>
 #include "usbblk.h"
 
 /** @file
@@ -702,11 +703,25 @@ static void usbblk_scsi_close ( struct usbblk_device *usbblk, int rc ) {
        usbblk->opened = 0;
 }
 
+/**
+ * Describe as an EFI device path
+ *
+ * @v usbblk           USB block device
+ * @ret path           EFI device path, or NULL on error
+ */
+static EFI_DEVICE_PATH_PROTOCOL *
+usbblk_efi_describe ( struct usbblk_device *usbblk ) {
+
+       return efi_usb_path ( usbblk->func );
+}
+
 /** SCSI command interface operations */
 static struct interface_operation usbblk_scsi_operations[] = {
        INTF_OP ( scsi_command, struct usbblk_device *, usbblk_scsi_command ),
        INTF_OP ( xfer_window, struct usbblk_device *, usbblk_scsi_window ),
        INTF_OP ( intf_close, struct usbblk_device *, usbblk_scsi_close ),
+       EFI_INTF_OP ( efi_describe, struct usbblk_device *,
+                     usbblk_efi_describe ),
 };
 
 /** SCSI command interface descriptor */