summaryrefslogtreecommitdiff
path: root/ArmVirtPkg
diff options
context:
space:
mode:
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