From 3750bd8d7cf8a7a7bbbda3354bea64f86cb34910 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 4 Jan 2016 22:00:04 +0100 Subject: [PATCH 1/2] arm64: Move firmware fdt search into global function Searching for a device tree that EFI passes to us via configuration tables is nothing architecture specific. Move it into generic code. Signed-off-by: Alexander Graf --- grub-core/kern/efi/init.c | 22 ++++++++++++++++++++++ grub-core/loader/arm64/fdt.c | 24 +----------------------- include/grub/efi/efi.h | 2 ++ 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c index e9c85de..fb90ecd 100644 --- a/grub-core/kern/efi/init.c +++ b/grub-core/kern/efi/init.c @@ -72,6 +72,28 @@ grub_machine_get_bootlocation (char **device, char **path) } } +void * +grub_efi_get_firmware_fdt (void) +{ + grub_efi_configuration_table_t *tables; + grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID; + void *firmware_fdt = NULL; + unsigned int i; + + /* Look for FDT in UEFI config tables. */ + tables = grub_efi_system_table->configuration_table; + + for (i = 0; i < grub_efi_system_table->num_table_entries; i++) + if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0) + { + firmware_fdt = tables[i].vendor_table; + grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt); + break; + } + + return firmware_fdt; +} + void grub_efi_fini (void) { diff --git a/grub-core/loader/arm64/fdt.c b/grub-core/loader/arm64/fdt.c index 5202c14..db49cf6 100644 --- a/grub-core/loader/arm64/fdt.c +++ b/grub-core/loader/arm64/fdt.c @@ -28,28 +28,6 @@ static void *loaded_fdt; static void *fdt; -static void * -get_firmware_fdt (void) -{ - grub_efi_configuration_table_t *tables; - grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID; - void *firmware_fdt = NULL; - unsigned int i; - - /* Look for FDT in UEFI config tables. */ - tables = grub_efi_system_table->configuration_table; - - for (i = 0; i < grub_efi_system_table->num_table_entries; i++) - if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0) - { - firmware_fdt = tables[i].vendor_table; - grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt); - break; - } - - return firmware_fdt; -} - void * grub_fdt_load (grub_size_t additional_size) { @@ -65,7 +43,7 @@ grub_fdt_load (grub_size_t additional_size) if (loaded_fdt) raw_fdt = loaded_fdt; else - raw_fdt = get_firmware_fdt(); + raw_fdt = grub_efi_get_firmware_fdt(); size = raw_fdt ? grub_fdt_get_totalsize (raw_fdt) : GRUB_FDT_EMPTY_TREE_SZ; diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h index 0e6fd86..2acf85e 100644 --- a/include/grub/efi/efi.h +++ b/include/grub/efi/efi.h @@ -81,6 +81,8 @@ extern void (*EXPORT_VAR(grub_efi_net_config)) (grub_efi_handle_t hnd, char **device, char **path); +void *EXPORT_FUNC(grub_efi_get_firmware_fdt)(void); + grub_addr_t grub_efi_modules_addr (void); void grub_efi_mm_init (void); -- 2.7.1