summaryrefslogtreecommitdiff
path: root/OvmfPkg/Library
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2015-08-06 10:14:03 +0000
committerlersek <lersek@Edk2>2015-08-06 10:14:03 +0000
commit92dc0bb23c4b8e847484cfded8dcc5146b5f5d3e (patch)
treeea0488215ac352ec4e434dbce8a68d8eba6cff1a /OvmfPkg/Library
parentf52af4899fcbd3238f7b720d3f2ef68a3dbd202b (diff)
downloadedk2-platforms-92dc0bb23c4b8e847484cfded8dcc5146b5f5d3e.tar.xz
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
Diffstat (limited to 'OvmfPkg/Library')
-rw-r--r--OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c14
-rw-r--r--OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf1
2 files changed, 15 insertions, 0 deletions
diff --git a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
index 0efe020eea..9d5e337e1a 100644
--- a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
+++ b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
@@ -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;
}
diff --git a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
index 14c25c924e..8487e73e46 100644
--- a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
+++ b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
@@ -49,3 +49,4 @@
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion
+ gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated