]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Abstract out support for locating an EFI config table
authorMatthew Garrett <matthewgarrett@google.com>
Fri, 7 Jun 2019 20:51:46 +0000 (13:51 -0700)
committerJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Mon, 24 Jun 2019 20:57:49 +0000 (23:57 +0300)
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 <mjg59@google.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
drivers/firmware/efi/libstub/efi-stub-helper.c
drivers/firmware/efi/libstub/efistub.h
drivers/firmware/efi/libstub/fdt.c

index e4610e72b78fa2808f4307c119a538ac944526fa..1db780c0f07be671073e8d7a063dbc58aa6e2698 100644 (file)
@@ -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;
+}
index 1b1dfcaa6fb98e8216e5cc317bc83cf9daaa1c68..7f1556fd867df32f783579f4f40c82654e0864fa 100644 (file)
@@ -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) \
index 5440ba17a1c577dd85cb7a656a1c93aa7fd1d6ed..0bf0190917e08ebdb6bcae20969a6354c6634347 100644 (file)
@@ -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;
 }