efi_loader: Uri() device path node
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 5 Aug 2021 21:10:05 +0000 (21:10 +0000)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Sat, 14 Aug 2021 18:54:41 +0000 (20:54 +0200)
iPXE used Uri() device path nodes. So we should support them in the
device path to text protocol.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
include/efi_api.h
lib/efi_loader/efi_device_path_to_text.c

index e854a8b..38ac47f 100644 (file)
@@ -523,6 +523,7 @@ struct efi_device_path_acpi_path {
 #  define DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS   0x0f
 #  define DEVICE_PATH_SUB_TYPE_MSG_SATA                0x12
 #  define DEVICE_PATH_SUB_TYPE_MSG_NVME                0x17
+#  define DEVICE_PATH_SUB_TYPE_MSG_URI         0x18
 #  define DEVICE_PATH_SUB_TYPE_MSG_SD          0x1a
 #  define DEVICE_PATH_SUB_TYPE_MSG_MMC         0x1d
 
@@ -587,6 +588,11 @@ struct efi_device_path_nvme {
        u8 eui64[8];
 } __packed;
 
+struct efi_device_path_uri {
+       struct efi_device_path dp;
+       u8 uri[];
+} __packed;
+
 #define DEVICE_PATH_TYPE_MEDIA_DEVICE          0x04
 #  define DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH 0x01
 #  define DEVICE_PATH_SUB_TYPE_CDROM_PATH      0x02
index 675e80b..d46327a 100644 (file)
@@ -190,6 +190,19 @@ static char *dp_msging(char *s, struct efi_device_path *dp)
 
                break;
        }
+       case DEVICE_PATH_SUB_TYPE_MSG_URI: {
+               struct efi_device_path_uri *udp =
+                       (struct efi_device_path_uri *)dp;
+               int n;
+
+               n = (int)udp->dp.length - sizeof(struct efi_device_path_uri);
+
+               s += sprintf(s, "Uri(");
+               if (n > 0 && n < MAX_NODE_LEN - 6)
+                       s += snprintf(s, n, "%s", (char *)udp->uri);
+               s += sprintf(s, ")");
+               break;
+       }
        case DEVICE_PATH_SUB_TYPE_MSG_SD:
        case DEVICE_PATH_SUB_TYPE_MSG_MMC: {
                const char *typename =