[PATCH 2/3] uefi: uefidump: add support for Driver#### (LP:#1237263)
Ivan Hu
ivan.hu at canonical.com
Wed Oct 9 08:48:12 UTC 2013
Add support for Driver#### - Each Driver#### variable contains
an EFI_LOAD_OPTION. Each load option variable is appended with
a unique number, for example Driver0001, Driver0002, etc.
This patch also modify the defination of FWTS_UEFI_LOAD_ACTIVE
correspond to the UEFI spec.
Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
src/lib/include/fwts_uefi.h | 3 ++-
src/uefi/uefidump/uefidump.c | 32 +++++++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/src/lib/include/fwts_uefi.h b/src/lib/include/fwts_uefi.h
index ecac84d..d38903e 100644
--- a/src/lib/include/fwts_uefi.h
+++ b/src/lib/include/fwts_uefi.h
@@ -20,7 +20,8 @@
#ifndef __FWTS_UEFI_H__
#define __FWTS_UEFI_H__
-#define FWTS_UEFI_LOAD_ACTIVE 0x00000001
+#define FWTS_UEFI_LOAD_OPTION_ACTIVE 0x00000001
+#define FWTS_UEFI_LOAD_OPTION_FORCE_RECONNECT 0x00000002
typedef struct {
uint16_t *varname;
diff --git a/src/uefi/uefidump/uefidump.c b/src/uefi/uefidump/uefidump.c
index a2aa619..4a736c9 100644
--- a/src/uefi/uefidump/uefidump.c
+++ b/src/uefi/uefidump/uefidump.c
@@ -508,7 +508,7 @@ static void uefidump_info_bootdev(fwts_framework *fw, fwts_uefi_var *var)
int len;
fwts_log_info_verbatum(fw, " Active: %s\n",
- (load_option->attributes & FWTS_UEFI_LOAD_ACTIVE) ? "Yes" : "No");
+ (load_option->attributes & FWTS_UEFI_LOAD_OPTION_ACTIVE) ? "Yes" : "No");
fwts_uefi_str16_to_str(tmp, sizeof(tmp), load_option->description);
len = fwts_uefi_str16len(load_option->description);
fwts_log_info_verbatum(fw, " Info: %s\n", tmp);
@@ -746,6 +746,28 @@ static void uefidump_info_driverorder(fwts_framework *fw, fwts_uefi_var *var)
free(str);
}
+static void uefidump_info_driverdev(fwts_framework *fw, fwts_uefi_var *var)
+{
+ fwts_uefi_load_option * load_option = (fwts_uefi_load_option *)var->data;
+ char tmp[2048];
+ char *path;
+ int len;
+
+ fwts_log_info_verbatum(fw, " Force Reconnect: %s\n",
+ (load_option->attributes & FWTS_UEFI_LOAD_OPTION_FORCE_RECONNECT) ? "Yes" : "No");
+ fwts_uefi_str16_to_str(tmp, sizeof(tmp), load_option->description);
+ len = fwts_uefi_str16len(load_option->description);
+ fwts_log_info_verbatum(fw, " Info: %s\n", tmp);
+
+ /* Skip over description to get to packed path, unpack path and print */
+ path = (char *)var->data + sizeof(load_option->attributes) +
+ sizeof(load_option->file_path_list_length) +
+ (sizeof(uint16_t) * (len + 1));
+ path = uefidump_build_dev_path(NULL, (fwts_uefi_dev_path *)path);
+ fwts_log_info_verbatum(fw, " Path: %s.", path);
+ free(path);
+}
+
static uefidump_info uefidump_info_table[] = {
{ "PlatformLangCodes", uefidump_info_platform_langcodes },
{ "PlatformLang", uefidump_info_platform_lang },
@@ -805,6 +827,14 @@ static void uefidump_var(fwts_framework *fw, fwts_uefi_var *var)
return;
}
+ /* Check the driver load option Driver####. #### is a printed hex value */
+ if ((strlen(varname) == 10) && (strncmp(varname, "Driver", 6) == 0)
+ && isxdigit(varname[6]) && isxdigit(varname[7])
+ && isxdigit(varname[8]) && isxdigit(varname[9])) {
+ uefidump_info_driverdev(fw, var);
+ return;
+ }
+
/* otherwise just do a plain old hex dump */
uefidump_var_hexdump(fw, var);
}
--
1.7.9.5
More information about the fwts-devel
mailing list