efi: Move fdt helper into own file
We only support FDT files with EFI on arm and arm64 systems, not on x86. So move the helper that finds a prepopulated FDT UUID into its own file and only build it for architectures where it also gets called. Signed-off-by: Alexander Graf <agraf@suse.de> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
c9a8d037a8
commit
0d2345774d
4 changed files with 47 additions and 22 deletions
|
@ -212,8 +212,10 @@ kernel = {
|
||||||
|
|
||||||
arm_efi = kern/arm/efi/init.c;
|
arm_efi = kern/arm/efi/init.c;
|
||||||
arm_efi = kern/arm/efi/misc.c;
|
arm_efi = kern/arm/efi/misc.c;
|
||||||
|
arm_efi = kern/efi/fdt.c;
|
||||||
|
|
||||||
arm64_efi = kern/arm64/efi/init.c;
|
arm64_efi = kern/arm64/efi/init.c;
|
||||||
|
arm64_efi = kern/efi/fdt.c;
|
||||||
|
|
||||||
i386_pc = kern/i386/pc/init.c;
|
i386_pc = kern/i386/pc/init.c;
|
||||||
i386_pc = kern/i386/pc/mmap.c;
|
i386_pc = kern/i386/pc/mmap.c;
|
||||||
|
|
43
grub-core/kern/efi/fdt.c
Normal file
43
grub-core/kern/efi/fdt.c
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/* fdt.c - EFI Flattened Device Tree interaction */
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2006,2007 Free Software Foundation, Inc.
|
||||||
|
*
|
||||||
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GRUB is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <grub/efi/efi.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -72,28 +72,6 @@ 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
|
void
|
||||||
grub_efi_fini (void)
|
grub_efi_fini (void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -81,7 +81,9 @@ extern void (*EXPORT_VAR(grub_efi_net_config)) (grub_efi_handle_t hnd,
|
||||||
char **device,
|
char **device,
|
||||||
char **path);
|
char **path);
|
||||||
|
|
||||||
|
#if defined(__arm__) || defined(__aarch64__)
|
||||||
void *EXPORT_FUNC(grub_efi_get_firmware_fdt)(void);
|
void *EXPORT_FUNC(grub_efi_get_firmware_fdt)(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
grub_addr_t grub_efi_modules_addr (void);
|
grub_addr_t grub_efi_modules_addr (void);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue