We want to grab a pointer to the TPM final events table, so abstract out
the existing code for finding an FDT table and make it generic.

Signed-off-by: Matthew Garrett <[email protected]>
---
 .../firmware/efi/libstub/efi-stub-helper.c    | 15 +++++++++++
 drivers/firmware/efi/libstub/efistub.h        |  2 ++
 drivers/firmware/efi/libstub/fdt.c            | 27 +++++++------------
 3 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c 
b/drivers/firmware/efi/libstub/efi-stub-helper.c
index e4610e72b78f..1db780c0f07b 100644
--- a/drivers/firmware/efi/libstub/efi-stub-helper.c
+++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
@@ -926,3 +926,18 @@ efi_status_t efi_exit_boot_services(efi_system_table_t 
*sys_table_arg,
 fail:
        return status;
 }
+
+void *get_efi_config_table(efi_system_table_t *sys_table, efi_guid_t guid)
+{
+       efi_config_table_t *tables = (efi_config_table_t *)sys_table->tables;
+       int i;
+
+       for (i = 0; i < sys_table->nr_tables; i++) {
+               if (efi_guidcmp(tables[i].guid, guid) != 0)
+                       continue;
+
+               return (void *)tables[i].table;
+       }
+
+       return NULL;
+}
diff --git a/drivers/firmware/efi/libstub/efistub.h 
b/drivers/firmware/efi/libstub/efistub.h
index 1b1dfcaa6fb9..7f1556fd867d 100644
--- a/drivers/firmware/efi/libstub/efistub.h
+++ b/drivers/firmware/efi/libstub/efistub.h
@@ -65,6 +65,8 @@ efi_status_t check_platform_features(efi_system_table_t 
*sys_table_arg);
 
 efi_status_t efi_random_get_seed(efi_system_table_t *sys_table_arg);
 
+void *get_efi_config_table(efi_system_table_t *sys_table, efi_guid_t guid);
+
 /* Helper macros for the usual case of using simple C variables: */
 #ifndef fdt_setprop_inplace_var
 #define fdt_setprop_inplace_var(fdt, node_offset, name, var) \
diff --git a/drivers/firmware/efi/libstub/fdt.c 
b/drivers/firmware/efi/libstub/fdt.c
index 5440ba17a1c5..0bf0190917e0 100644
--- a/drivers/firmware/efi/libstub/fdt.c
+++ b/drivers/firmware/efi/libstub/fdt.c
@@ -363,26 +363,17 @@ efi_status_t 
allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table,
 
 void *get_fdt(efi_system_table_t *sys_table, unsigned long *fdt_size)
 {
-       efi_guid_t fdt_guid = DEVICE_TREE_GUID;
-       efi_config_table_t *tables;
-       int i;
+       void *fdt;
 
-       tables = (efi_config_table_t *)sys_table->tables;
+       fdt = get_efi_config_table(sys_table, DEVICE_TREE_GUID);
 
-       for (i = 0; i < sys_table->nr_tables; i++) {
-               void *fdt;
+       if (!fdt)
+               return NULL;
 
-               if (efi_guidcmp(tables[i].guid, fdt_guid) != 0)
-                       continue;
-
-               fdt = (void *)tables[i].table;
-               if (fdt_check_header(fdt) != 0) {
-                       pr_efi_err(sys_table, "Invalid header detected on UEFI 
supplied FDT, ignoring ...\n");
-                       return NULL;
-               }
-               *fdt_size = fdt_totalsize(fdt);
-               return fdt;
+       if (fdt_check_header(fdt) != 0) {
+               pr_efi_err(sys_table, "Invalid header detected on UEFI supplied 
FDT, ignoring ...\n");
+               return NULL;
        }
-
-       return NULL;
+       *fdt_size = fdt_totalsize(fdt);
+       return fdt;
 }
-- 
2.22.0.rc2.383.gf4fbbf30c2-goog

Reply via email to