Revision: 18174
http://sourceforge.net/p/edk2/code/18174
Author: lersek
Date: 2015-08-06 10:13:37 +0000 (Thu, 06 Aug 2015)
Log Message:
-----------
OvmfPkg: SmbiosVersionLib: add "plugin" for detecting SMBIOS version
Introduce a minimal library instance for fetching and validating the
SMBIOS entry point structure exposed by QEMU over fw_cfg. This library is
meant to be hooked into MdeModulePkg/Universal/SmbiosDxe by platform DSC
files, so that the library can set the PCD(s) that SmbiosDxe consumes at
the right moment.
At the moment only SMBIOS 2.x entry points are recognized.
Cc: Ard Biesheuvel <[email protected]>
Cc: Wei Huang <[email protected]>
Cc: Jordan Justen <[email protected]>
Cc: Gabriel L. Somlo <[email protected]>
Suggested-by: Jordan Justen <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Added Paths:
-----------
trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/
trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
Added: trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
===================================================================
--- trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
(rev 0)
+++ trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
2015-08-06 10:13:37 UTC (rev 18174)
@@ -0,0 +1,76 @@
+/** @file
+
+ A hook-in library for MdeModulePkg/Universal/SmbiosDxe, in order to set
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion (and possibly other PCDs)
+ just before SmbiosDxe consumes them.
+
+ Copyright (C) 2013, 2015, Red Hat, Inc.
+ Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials are licensed and made available
+ under the terms and conditions of the BSD License which accompanies this
+ distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
+ WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include <IndustryStandard/SmBios.h>
+
+#include <Base.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PcdLib.h>
+#include <Library/QemuFwCfgLib.h>
+
+typedef union {
+ SMBIOS_TABLE_ENTRY_POINT V2;
+} QEMU_SMBIOS_ANCHOR;
+
+RETURN_STATUS
+EFIAPI
+DetectSmbiosVersion (
+ VOID
+ )
+{
+ FIRMWARE_CONFIG_ITEM Anchor, Tables;
+ UINTN AnchorSize, TablesSize;
+ QEMU_SMBIOS_ANCHOR QemuAnchor;
+ UINT16 SmbiosVersion;
+
+ if (RETURN_ERROR (QemuFwCfgFindFile (
+ "etc/smbios/smbios-anchor", &Anchor, &AnchorSize)) ||
+ RETURN_ERROR (QemuFwCfgFindFile (
+ "etc/smbios/smbios-tables", &Tables, &TablesSize)) ||
+ TablesSize == 0) {
+ return RETURN_SUCCESS;
+ }
+
+ QemuFwCfgSelectItem (Anchor);
+
+ switch (AnchorSize) {
+ case sizeof QemuAnchor.V2:
+ QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);
+
+ if (QemuAnchor.V2.MajorVersion != 2 ||
+ QemuAnchor.V2.TableLength != TablesSize ||
+ CompareMem (QemuAnchor.V2.AnchorString, "_SM_", 4) != 0 ||
+ CompareMem (QemuAnchor.V2.IntermediateAnchorString, "_DMI_", 5) != 0) {
+ return RETURN_SUCCESS;
+ }
+ SmbiosVersion = (UINT16)(QemuAnchor.V2.MajorVersion << 8 |
+ QemuAnchor.V2.MinorVersion);
+ break;
+
+ default:
+ return RETURN_SUCCESS;
+ }
+
+ DEBUG ((EFI_D_INFO, "%a: SMBIOS version from QEMU: 0x%04x\n", __FUNCTION__,
+ SmbiosVersion));
+ PcdSet16 (PcdSmbiosVersion, SmbiosVersion);
+
+ return RETURN_SUCCESS;
+}
Added: trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
===================================================================
--- trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
(rev 0)
+++ trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
2015-08-06 10:13:37 UTC (rev 18174)
@@ -0,0 +1,51 @@
+## @file
+#
+# A hook-in library for MdeModulePkg/Universal/SmbiosDxe, in order to set
+# gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion (and possibly other PCDs)
+# just before SmbiosDxe consumes them.
+#
+# Copyright (C) 2013, 2015, Red Hat, Inc.
+# Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>
+#
+# This program and the accompanying materials are licensed and made available
+# under the terms and conditions of the BSD License which accompanies this
+# distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
+# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = DetectSmbiosVersionLib
+ FILE_GUID = 6c633bb2-ae33-49ae-9f89-b5aa999fe3ae
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SmbiosVersionLib|DXE_DRIVER
+ CONSTRUCTOR = DetectSmbiosVersion
+
+#
+# The following information is for reference only and not required by the build
+# tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64
+#
+
+[Sources]
+ DetectSmbiosVersionLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ OvmfPkg/OvmfPkg.dec
+
+[LibraryClasses]
+ BaseMemoryLib
+ DebugLib
+ PcdLib
+ QemuFwCfgLib
+
+[Pcd]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion
------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits