diff options
Diffstat (limited to 'arch/x86/platform/efi/efi.c')
| -rw-r--r-- | arch/x86/platform/efi/efi.c | 39 | 
1 files changed, 38 insertions, 1 deletions
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index a7189a3b4d70..c202e1b07e29 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -59,11 +59,34 @@ static efi_system_table_t efi_systab __initdata;  static efi_config_table_type_t arch_tables[] __initdata = {  #ifdef CONFIG_X86_UV -	{UV_SYSTEM_TABLE_GUID, "UVsystab", &efi.uv_systab}, +	{UV_SYSTEM_TABLE_GUID, "UVsystab", &uv_systab_phys},  #endif  	{NULL_GUID, NULL, NULL},  }; +static const unsigned long * const efi_tables[] = { +	&efi.mps, +	&efi.acpi, +	&efi.acpi20, +	&efi.smbios, +	&efi.smbios3, +	&efi.boot_info, +	&efi.hcdp, +	&efi.uga, +#ifdef CONFIG_X86_UV +	&uv_systab_phys, +#endif +	&efi.fw_vendor, +	&efi.runtime, +	&efi.config_table, +	&efi.esrt, +	&efi.properties_table, +	&efi.mem_attr_table, +#ifdef CONFIG_EFI_RCI2_TABLE +	&rci2_table_phys, +#endif +}; +  u64 efi_setup;		/* efi setup_data physical address */  static int add_efi_memmap __initdata; @@ -1049,3 +1072,17 @@ static int __init arch_parse_efi_cmdline(char *str)  	return 0;  }  early_param("efi", arch_parse_efi_cmdline); + +bool efi_is_table_address(unsigned long phys_addr) +{ +	unsigned int i; + +	if (phys_addr == EFI_INVALID_TABLE_ADDR) +		return false; + +	for (i = 0; i < ARRAY_SIZE(efi_tables); i++) +		if (*(efi_tables[i]) == phys_addr) +			return true; + +	return false; +}  |