Revision: 18043
          http://sourceforge.net/p/edk2/code/18043
Author:   jljusten
Date:     2015-07-26 08:02:55 +0000 (Sun, 26 Jul 2015)
Log Message:
-----------
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 <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed-by: Ard Biesheuvel <[email protected]>

Revision Links:
--------------
    http://sourceforge.net/p/edk2/code/17676

Modified Paths:
--------------
    trunk/edk2/ArmVirtPkg/ArmVirtQemu.dsc
    trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c
    trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf

Modified: trunk/edk2/ArmVirtPkg/ArmVirtQemu.dsc
===================================================================
--- trunk/edk2/ArmVirtPkg/ArmVirtQemu.dsc       2015-07-26 08:02:50 UTC (rev 
18042)
+++ trunk/edk2/ArmVirtPkg/ArmVirtQemu.dsc       2015-07-26 08:02:55 UTC (rev 
18043)
@@ -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

Modified: trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c
===================================================================
--- trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c    2015-07-26 
08:02:50 UTC (rev 18042)
+++ trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.c    2015-07-26 
08:02:55 UTC (rev 18043)
@@ -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 @@
   IN EFI_SYSTEM_TABLE *SystemTable
   )
 {
+  SmbiosVersionInitialization ();
   return EFI_SUCCESS;
 }

Modified: trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf
===================================================================
--- trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf  2015-07-26 
08:02:50 UTC (rev 18042)
+++ trunk/edk2/ArmVirtPkg/QemuFwCfgToPcdDxe/QemuFwCfgToPcd.inf  2015-07-26 
08:02:55 UTC (rev 18043)
@@ -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


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to