summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2021-08-06 00:10:05 +0300
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2021-08-14 21:54:41 +0300
commit148ce20520760d17f1d9db23c0575ffeed60a287 (patch)
treee93adb3ae795dea6324c0eb215f74168603ba1cc
parent551a959a8c11e7f3452e0c2f24db85dffebc1e91 (diff)
downloadu-boot-148ce20520760d17f1d9db23c0575ffeed60a287.tar.xz
efi_loader: Uri() device path node
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>
-rw-r--r--include/efi_api.h6
-rw-r--r--lib/efi_loader/efi_device_path_to_text.c13
2 files changed, 19 insertions, 0 deletions
diff --git a/include/efi_api.h b/include/efi_api.h
index e854a8b3a1..38ac47f164 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -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
diff --git a/lib/efi_loader/efi_device_path_to_text.c b/lib/efi_loader/efi_device_path_to_text.c
index 675e80bcb8..d46327a1c9 100644
--- a/lib/efi_loader/efi_device_path_to_text.c
+++ b/lib/efi_loader/efi_device_path_to_text.c
@@ -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 =