diff options
author | Laszlo Ersek <lersek@redhat.com> | 2019-04-25 11:44:15 +0200 |
---|---|---|
committer | Laszlo Ersek <lersek@redhat.com> | 2019-05-03 10:52:20 +0200 |
commit | b097ba371a68814e5ed85427ceec88f1e760ec96 (patch) | |
tree | a1815c7f798f81db95a627f31577853f1f4dcc83 /tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest | |
parent | 8482ff2eb3bb95020eb2f370a9b3ea26511e41df (diff) | |
download | qemu-b097ba371a68814e5ed85427ceec88f1e760ec96.zip qemu-b097ba371a68814e5ed85427ceec88f1e760ec96.tar.gz qemu-b097ba371a68814e5ed85427ceec88f1e760ec96.tar.bz2 |
tests/uefi-test-tools: report the SMBIOS entry point structures
On UEFI systems, the SMBIOS entry point (a.k.a. anchor) structures are
found similarly to the ACPI RSD PTR table(s): by scanning the
ConfigurationTable array in the EFI system table for well-known GUIDs.
Locate the SMBIOS 2.1 (32-bit) and 3.0 (64-bit) anchors in the
BiosTablesTest UEFI application, and report the addresses in new fields
appended to the BIOS_TABLES_TEST structure.
Cc: "Philippe Mathieu-Daudé" <philmd@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Launchpad: https://bugs.launchpad.net/qemu/+bug/1821884
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Igor Mammedov <imammedo@redhat.com>
Diffstat (limited to 'tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest')
-rw-r--r-- | tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.c | 23 | ||||
-rw-r--r-- | tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.inf | 2 |
2 files changed, 21 insertions, 4 deletions
diff --git a/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.c b/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.c index b208e17..75891e6 100644 --- a/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.c +++ b/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.c @@ -14,6 +14,7 @@ #include <Guid/Acpi.h> #include <Guid/BiosTablesTest.h> +#include <Guid/SmBios.h> #include <Library/BaseLib.h> #include <Library/BaseMemoryLib.h> #include <Library/MemoryAllocationLib.h> @@ -55,6 +56,8 @@ BiosTablesTestMain ( volatile BIOS_TABLES_TEST *BiosTablesTest; CONST VOID *Rsdp10; CONST VOID *Rsdp20; + CONST VOID *Smbios21; + CONST VOID *Smbios30; CONST EFI_CONFIGURATION_TABLE *ConfigTable; CONST EFI_CONFIGURATION_TABLE *ConfigTablesEnd; volatile EFI_GUID *InverseSignature; @@ -77,31 +80,43 @@ BiosTablesTestMain ( } // - // Locate both gEfiAcpi10TableGuid and gEfiAcpi20TableGuid config tables in - // one go. + // Locate all the gEfiAcpi10TableGuid, gEfiAcpi20TableGuid, + // gEfiSmbiosTableGuid, gEfiSmbios3TableGuid config tables in one go. // Rsdp10 = NULL; Rsdp20 = NULL; + Smbios21 = NULL; + Smbios30 = NULL; ConfigTable = gST->ConfigurationTable; ConfigTablesEnd = gST->ConfigurationTable + gST->NumberOfTableEntries; - while ((Rsdp10 == NULL || Rsdp20 == NULL) && ConfigTable < ConfigTablesEnd) { + while ((Rsdp10 == NULL || Rsdp20 == NULL || + Smbios21 == NULL || Smbios30 == NULL) && + ConfigTable < ConfigTablesEnd) { if (CompareGuid (&ConfigTable->VendorGuid, &gEfiAcpi10TableGuid)) { Rsdp10 = ConfigTable->VendorTable; } else if (CompareGuid (&ConfigTable->VendorGuid, &gEfiAcpi20TableGuid)) { Rsdp20 = ConfigTable->VendorTable; + } else if (CompareGuid (&ConfigTable->VendorGuid, &gEfiSmbiosTableGuid)) { + Smbios21 = ConfigTable->VendorTable; + } else if (CompareGuid (&ConfigTable->VendorGuid, &gEfiSmbios3TableGuid)) { + Smbios30 = ConfigTable->VendorTable; } ++ConfigTable; } AsciiPrint ("%a: BiosTablesTest=%p Rsdp10=%p Rsdp20=%p\n", gEfiCallerBaseName, Pages, Rsdp10, Rsdp20); + AsciiPrint ("%a: Smbios21=%p Smbios30=%p\n", gEfiCallerBaseName, Smbios21, + Smbios30); // - // Store the RSD PTR address(es) first, then the signature second. + // Store the config table addresses first, then the signature second. // BiosTablesTest = Pages; BiosTablesTest->Rsdp10 = (UINTN)Rsdp10; BiosTablesTest->Rsdp20 = (UINTN)Rsdp20; + BiosTablesTest->Smbios21 = (UINTN)Smbios21; + BiosTablesTest->Smbios30 = (UINTN)Smbios30; MemoryFence(); diff --git a/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.inf b/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.inf index 924d8a8..708bc1e 100644 --- a/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.inf +++ b/tests/uefi-test-tools/UefiTestToolsPkg/BiosTablesTest/BiosTablesTest.inf @@ -35,6 +35,8 @@ gBiosTablesTestGuid gEfiAcpi10TableGuid gEfiAcpi20TableGuid + gEfiSmbios3TableGuid + gEfiSmbiosTableGuid [Packages] MdePkg/MdePkg.dec |