ArmVirtPkg: set SMBIOS version in DetectSmbiosVersionLib instead of QemuFwCfgToPcdDxe

This patch de-duplicates the logic added in commit

  ArmVirtPkg: QemuFwCfgToPcdDxe: set SMBIOS entry point version
  dynamically

(git c98da334, SVN r18043) by hooking DetectSmbiosVersionLib into
SmbiosDxe.

Although said commit was supposed to work with SMBIOS 3.0 payloads from
QEMU, in practice that never worked, because the size / signature checks
in SmbiosVersionInitialization() would always fail, due to the SMBIOS 3.0
entry point being structurally different. Therefore this patch doesn't
regress ArmVirtPkg.

Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Wei Huang <wei@redhat.com>
Suggested-by: Jordan Justen <jordan.l.justen@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18176 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Laszlo Ersek 2015-08-06 10:13:46 +00:00 committed by lersek
parent 98937dc293
commit 34eeb6763b
3 changed files with 4 additions and 45 deletions

View File

@ -321,7 +321,10 @@
#
# SMBIOS Support
#
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf {
<LibraryClasses>
NULL|OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
}
OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
#

View File

@ -19,48 +19,9 @@
#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 (
@ -68,6 +29,5 @@ ParseQemuFwCfgToPcd (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
SmbiosVersionInitialization ();
return EFI_SUCCESS;
}

View File

@ -29,18 +29,14 @@
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
BaseMemoryLib
DebugLib
PcdLib
QemuFwCfgLib
UefiDriverEntryPoint
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion
[Depex]
TRUE