Commit 5b396a8c authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/lersek/tags/smbios_lp_1821884_20190503' into staging

Fix <https://bugs.launchpad.net/qemu/+bug/1821884

>:
"Extend uefi-test-tools to report SMBIOS location".

# gpg: Signature made Fri 03 May 2019 10:10:31 BST
# gpg:                using RSA key D39DA71E0D496CFA
# gpg: Good signature from "Laszlo Ersek <lersek@redhat.com>" [marginal]
# gpg: WARNING: This key is not certified with sufficiently trusted signatures!
# gpg:          It is not certain that the signature belongs to the owner.
# Primary key fingerprint: F5D9 660F 1BA5 F310 A95A  C5E0 466A EAE0 6125 3988
#      Subkey fingerprint: B3A5 5D3F 88A8 90ED 2E63  3E8D D39D A71E 0D49 6CFA

* remotes/lersek/tags/smbios_lp_1821884_20190503:
  tests/uefi-boot-images: report the SMBIOS entry point structures
  tests/uefi-test-tools: report the SMBIOS entry point structures

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents c58f3911 24496b8d
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -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();

Loading