summaryrefslogtreecommitdiff
path: root/ArmVirtPkg
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2015-07-26 08:02:55 +0000
committerjljusten <jljusten@Edk2>2015-07-26 08:02:55 +0000
commitc98da3345a52931a23f28f4717ca4b193d27b250 (patch)
tree58a06178b1c99172bf3ed213e78b67ea0eeaf426 /ArmVirtPkg
parentd2733aa95a8625ebaad9df6ae6f6430e1e97ea36 (diff)
downloadedk2-platforms-c98da3345a52931a23f28f4717ca4b193d27b250.tar.xz
ArmVirtPkg: QemuFwCfgToPcdDxe: set SMBIOS entry point version dynamically
(This patch parallels OvmfPkg commit 37baf06b (SVN r17676).) PcdSmbiosVersion controls the version number of the SMBIOS entry point table (and other, related things) that the universal "MdeModulePkg/Universal/SmbiosDxe" driver, providing EFI_SMBIOS_PROTOCOL, installs. The "virt" machine type of QEMU generates SMBIOS payload for the firmware to install. The payload includes the entry point table ("anchor" table). OvmfPkg/SmbiosPlatformDxe cannot install the anchor table (because that is the jurisdiction of the generic "MdeModulePkg/Universal/SmbiosDxe" driver); however, we can parse the entry point version from QEMU's anchor table, and instruct "MdeModulePkg/Universal/SmbiosDxe" to adhere to that version. As default for PcdSmbiosVersion we should keep the current 0x0300 value (ie. SMBIOS 3.0) from "MdeModulePkg/MdeModulePkg.dec"; that spec version was specifically created for ARM / AARCH64 needs. Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18043 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmVirtPkg')
-rw-r--r--ArmVirtPkg/ArmVirtQemu.dsc5
-rw-r--r--ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c40
-rw-r--r--ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf4
3 files changed, 49 insertions, 0 deletions
diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc
index 07d5a87e66..a7bde48beb 100644
--- a/ArmVirtPkg/ArmVirtQemu.dsc
+++ b/ArmVirtPkg/ArmVirtQemu.dsc
@@ -232,6 +232,11 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640
gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480
+ #
+ # SMBIOS entry point version
+ #
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0300
+
################################################################################
#
# Components Section - list of all EDK II Modules needed by this Platform
diff --git a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c
index 8f60e21789..814bb5c55e 100644
--- a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c
+++ b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c
@@ -19,9 +19,48 @@
#include <Uefi/UefiBaseType.h>
#include <Uefi/UefiSpec.h>
+#include <IndustryStandard/SmBios.h>
+
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
#include <Library/PcdLib.h>
#include <Library/QemuFwCfgLib.h>
+
+/**
+ Set the SMBIOS entry point version for the generic SmbiosDxe driver.
+**/
+STATIC
+VOID
+SmbiosVersionInitialization (
+ VOID
+ )
+{
+ FIRMWARE_CONFIG_ITEM Anchor;
+ UINTN AnchorSize;
+ SMBIOS_TABLE_ENTRY_POINT QemuAnchor;
+ UINT16 SmbiosVersion;
+
+ if (RETURN_ERROR (QemuFwCfgFindFile ("etc/smbios/smbios-anchor", &Anchor,
+ &AnchorSize)) ||
+ AnchorSize != sizeof QemuAnchor) {
+ return;
+ }
+
+ QemuFwCfgSelectItem (Anchor);
+ QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);
+ if (CompareMem (QemuAnchor.AnchorString, "_SM_", 4) != 0 ||
+ CompareMem (QemuAnchor.IntermediateAnchorString, "_DMI_", 5) != 0) {
+ return;
+ }
+
+ SmbiosVersion = (UINT16)(QemuAnchor.MajorVersion << 8 |
+ QemuAnchor.MinorVersion);
+ DEBUG ((EFI_D_INFO, "%a: SMBIOS version from QEMU: 0x%04x\n", __FUNCTION__,
+ SmbiosVersion));
+ PcdSet16 (PcdSmbiosVersion, SmbiosVersion);
+}
+
EFI_STATUS
EFIAPI
ParseQemuFwCfgToPcd (
@@ -29,5 +68,6 @@ ParseQemuFwCfgToPcd (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
+ SmbiosVersionInitialization ();
return EFI_SUCCESS;
}
diff --git a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf
index a9983becef..649cfdc141 100644
--- a/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf
+++ b/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf
@@ -29,14 +29,18 @@
[Packages]
MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
+ BaseMemoryLib
+ DebugLib
PcdLib
QemuFwCfgLib
UefiDriverEntryPoint
[Pcd]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion
[Depex]
TRUE