mirror of https://github.com/acidanthera/audk.git
OvmfPkg: SmbiosPlatformDxe: eliminate duplicate entry point validation
At this point all platforms that use OvmfPkg/SmbiosPlatformDxe in edk2, namely ArmVirtQemu.dsc and OvmfPkg*.dsc, have been migrated to SmbiosVersionLib. Therefore SmbiosPlatformDxe itself can forego verifying QEMU's SMBIOS entry point; if SmbiosVersionLib's validation was successful, it should just rely on that. (Note that SmbiosPlatformDxe has a depex on EFI_SMBIOS_PROTOCOL, installed by SmbiosDxe, containing SmbiosVersionLib, therefore the set/get order of PcdQemuSmbiosValidated is ensured.) Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Wei Huang <wei@redhat.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Gabriel L. Somlo <somlo@cmu.edu> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18180 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
f52af4899f
commit
92dc0bb23c
|
@ -40,6 +40,15 @@ DetectSmbiosVersion (
|
|||
QEMU_SMBIOS_ANCHOR QemuAnchor;
|
||||
UINT16 SmbiosVersion;
|
||||
|
||||
if (PcdGetBool (PcdQemuSmbiosValidated)) {
|
||||
//
|
||||
// Some other module, linked against this library, has already performed
|
||||
// the task at hand. This should never happen, but it's easy to handle;
|
||||
// just exit early.
|
||||
//
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
if (RETURN_ERROR (QemuFwCfgFindFile (
|
||||
"etc/smbios/smbios-anchor", &Anchor, &AnchorSize)) ||
|
||||
RETURN_ERROR (QemuFwCfgFindFile (
|
||||
|
@ -72,5 +81,10 @@ DetectSmbiosVersion (
|
|||
SmbiosVersion));
|
||||
PcdSet16 (PcdSmbiosVersion, SmbiosVersion);
|
||||
|
||||
//
|
||||
// SMBIOS platform drivers can now fetch and install
|
||||
// "etc/smbios/smbios-tables" from QEMU.
|
||||
//
|
||||
PcdSetBool (PcdQemuSmbiosValidated, TRUE);
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -49,3 +49,4 @@
|
|||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "SmbiosPlatformDxe.h"
|
||||
#include <Library/QemuFwCfgLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
/**
|
||||
Locates and extracts the QEMU SMBIOS data if present in fw_cfg
|
||||
|
@ -27,32 +28,19 @@ GetQemuSmbiosTables (
|
|||
VOID
|
||||
)
|
||||
{
|
||||
SMBIOS_TABLE_ENTRY_POINT QemuAnchor;
|
||||
FIRMWARE_CONFIG_ITEM Anchor, Tables;
|
||||
UINTN AnchorSize, TablesSize;
|
||||
EFI_STATUS Status;
|
||||
FIRMWARE_CONFIG_ITEM Tables;
|
||||
UINTN TablesSize;
|
||||
UINT8 *QemuTables;
|
||||
|
||||
if (EFI_ERROR (QemuFwCfgFindFile (
|
||||
"etc/smbios/smbios-anchor", &Anchor, &AnchorSize)) ||
|
||||
EFI_ERROR (QemuFwCfgFindFile (
|
||||
"etc/smbios/smbios-tables", &Tables, &TablesSize)) ||
|
||||
AnchorSize != sizeof (QemuAnchor) ||
|
||||
TablesSize == 0) {
|
||||
if (!PcdGetBool (PcdQemuSmbiosValidated)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// We copy the entry point structure to perform some additional checks,
|
||||
// but discard it upon return.
|
||||
//
|
||||
QemuFwCfgSelectItem (Anchor);
|
||||
QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);
|
||||
|
||||
if (AsciiStrnCmp ((CHAR8 *)QemuAnchor.AnchorString, "_SM_", 4) ||
|
||||
AsciiStrnCmp ((CHAR8 *)QemuAnchor.IntermediateAnchorString, "_DMI_", 5) ||
|
||||
TablesSize != QemuAnchor.TableLength) {
|
||||
return NULL;
|
||||
}
|
||||
Status = QemuFwCfgFindFile ("etc/smbios/smbios-tables", &Tables,
|
||||
&TablesSize);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
ASSERT (TablesSize > 0);
|
||||
|
||||
QemuTables = AllocatePool (TablesSize);
|
||||
if (QemuTables == NULL) {
|
||||
|
|
|
@ -53,6 +53,10 @@
|
|||
HobLib
|
||||
QemuFwCfgLib
|
||||
MemoryAllocationLib
|
||||
PcdLib
|
||||
|
||||
[Pcd]
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated
|
||||
|
||||
[Protocols]
|
||||
gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
|
|
Loading…
Reference in New Issue