diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2014-10-14 10:34:47 -0400 |
---|---|---|
committer | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2014-11-05 03:03:16 -0500 |
commit | e1ccbbc9d5aa01a6c1c9c78acea6515db4f1be71 (patch) | |
tree | 3afa166ca545abb12dfc4cf0b331a004ab400592 /drivers/firmware/efi/efi.c | |
parent | 4e27d4754e8990da264c1e01e2f6bd8340e30cb3 (diff) |
efi: dmi: add support for SMBIOS 3.0 UEFI configuration table
This adds support to the UEFI side for detecting the presence of
a SMBIOS 3.0 64-bit entry point. This allows the actual SMBIOS
structure table to reside at a physical offset over 4 GB, which
cannot be supported by the legacy SMBIOS 32-bit entry point.
Since the firmware can legally provide both entry points, store
the SMBIOS 3.0 entry point in a separate variable, and let the
DMI decoding layer decide which one will be used.
Tested-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Acked-by: Leif Lindholm <leif.lindholm@linaro.org>
Acked-by: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Diffstat (limited to 'drivers/firmware/efi/efi.c')
-rw-r--r-- | drivers/firmware/efi/efi.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 8590099ac148..9035c1b74d58 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c | |||
@@ -30,6 +30,7 @@ struct efi __read_mostly efi = { | |||
30 | .acpi = EFI_INVALID_TABLE_ADDR, | 30 | .acpi = EFI_INVALID_TABLE_ADDR, |
31 | .acpi20 = EFI_INVALID_TABLE_ADDR, | 31 | .acpi20 = EFI_INVALID_TABLE_ADDR, |
32 | .smbios = EFI_INVALID_TABLE_ADDR, | 32 | .smbios = EFI_INVALID_TABLE_ADDR, |
33 | .smbios3 = EFI_INVALID_TABLE_ADDR, | ||
33 | .sal_systab = EFI_INVALID_TABLE_ADDR, | 34 | .sal_systab = EFI_INVALID_TABLE_ADDR, |
34 | .boot_info = EFI_INVALID_TABLE_ADDR, | 35 | .boot_info = EFI_INVALID_TABLE_ADDR, |
35 | .hcdp = EFI_INVALID_TABLE_ADDR, | 36 | .hcdp = EFI_INVALID_TABLE_ADDR, |
@@ -86,6 +87,8 @@ static ssize_t systab_show(struct kobject *kobj, | |||
86 | str += sprintf(str, "ACPI=0x%lx\n", efi.acpi); | 87 | str += sprintf(str, "ACPI=0x%lx\n", efi.acpi); |
87 | if (efi.smbios != EFI_INVALID_TABLE_ADDR) | 88 | if (efi.smbios != EFI_INVALID_TABLE_ADDR) |
88 | str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios); | 89 | str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios); |
90 | if (efi.smbios3 != EFI_INVALID_TABLE_ADDR) | ||
91 | str += sprintf(str, "SMBIOS3=0x%lx\n", efi.smbios3); | ||
89 | if (efi.hcdp != EFI_INVALID_TABLE_ADDR) | 92 | if (efi.hcdp != EFI_INVALID_TABLE_ADDR) |
90 | str += sprintf(str, "HCDP=0x%lx\n", efi.hcdp); | 93 | str += sprintf(str, "HCDP=0x%lx\n", efi.hcdp); |
91 | if (efi.boot_info != EFI_INVALID_TABLE_ADDR) | 94 | if (efi.boot_info != EFI_INVALID_TABLE_ADDR) |
@@ -260,6 +263,7 @@ static __initdata efi_config_table_type_t common_tables[] = { | |||
260 | {MPS_TABLE_GUID, "MPS", &efi.mps}, | 263 | {MPS_TABLE_GUID, "MPS", &efi.mps}, |
261 | {SAL_SYSTEM_TABLE_GUID, "SALsystab", &efi.sal_systab}, | 264 | {SAL_SYSTEM_TABLE_GUID, "SALsystab", &efi.sal_systab}, |
262 | {SMBIOS_TABLE_GUID, "SMBIOS", &efi.smbios}, | 265 | {SMBIOS_TABLE_GUID, "SMBIOS", &efi.smbios}, |
266 | {SMBIOS3_TABLE_GUID, "SMBIOS 3.0", &efi.smbios3}, | ||
263 | {UGA_IO_PROTOCOL_GUID, "UGA", &efi.uga}, | 267 | {UGA_IO_PROTOCOL_GUID, "UGA", &efi.uga}, |
264 | {NULL_GUID, NULL, NULL}, | 268 | {NULL_GUID, NULL, NULL}, |
265 | }; | 269 | }; |