mirror of https://github.com/acidanthera/audk.git
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:
parent
98937dc293
commit
34eeb6763b
|
@ -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
|
||||
|
||||
#
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue