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
|
# SMBIOS Support
|
||||||
#
|
#
|
||||||
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
|
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf {
|
||||||
|
<LibraryClasses>
|
||||||
|
NULL|OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
|
||||||
|
}
|
||||||
OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
|
OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -19,48 +19,9 @@
|
||||||
#include <Uefi/UefiBaseType.h>
|
#include <Uefi/UefiBaseType.h>
|
||||||
#include <Uefi/UefiSpec.h>
|
#include <Uefi/UefiSpec.h>
|
||||||
|
|
||||||
#include <IndustryStandard/SmBios.h>
|
|
||||||
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
#include <Library/QemuFwCfgLib.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
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseQemuFwCfgToPcd (
|
ParseQemuFwCfgToPcd (
|
||||||
|
@ -68,6 +29,5 @@ ParseQemuFwCfgToPcd (
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SmbiosVersionInitialization ();
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,18 +29,14 @@
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
|
||||||
OvmfPkg/OvmfPkg.dec
|
OvmfPkg/OvmfPkg.dec
|
||||||
|
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
BaseMemoryLib
|
|
||||||
DebugLib
|
|
||||||
PcdLib
|
PcdLib
|
||||||
QemuFwCfgLib
|
QemuFwCfgLib
|
||||||
UefiDriverEntryPoint
|
UefiDriverEntryPoint
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion
|
|
||||||
|
|
||||||
[Depex]
|
[Depex]
|
||||||
TRUE
|
TRUE
|
||||||
|
|
Loading…
Reference in New Issue