Revision: 18180
          http://sourceforge.net/p/edk2/code/18180
Author:   lersek
Date:     2015-08-06 10:14:03 +0000 (Thu, 06 Aug 2015)
Log Message:
-----------
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 <[email protected]>
Cc: Wei Huang <[email protected]>
Cc: Jordan Justen <[email protected]>
Cc: Gabriel L. Somlo <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>

Modified Paths:
--------------
    trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
    trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
    trunk/edk2/OvmfPkg/SmbiosPlatformDxe/Qemu.c
    trunk/edk2/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf

Modified: trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
===================================================================
--- trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c        
2015-08-06 10:13:59 UTC (rev 18179)
+++ trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c        
2015-08-06 10:14:03 UTC (rev 18180)
@@ -40,6 +40,15 @@
   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 @@
     SmbiosVersion));
   PcdSet16 (PcdSmbiosVersion, SmbiosVersion);
 
+  //
+  // SMBIOS platform drivers can now fetch and install
+  // "etc/smbios/smbios-tables" from QEMU.
+  //
+  PcdSetBool (PcdQemuSmbiosValidated, TRUE);
   return RETURN_SUCCESS;
 }

Modified: trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
===================================================================
--- trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf      
2015-08-06 10:13:59 UTC (rev 18179)
+++ trunk/edk2/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf      
2015-08-06 10:14:03 UTC (rev 18180)
@@ -49,3 +49,4 @@
 
 [Pcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion
+  gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated

Modified: trunk/edk2/OvmfPkg/SmbiosPlatformDxe/Qemu.c
===================================================================
--- trunk/edk2/OvmfPkg/SmbiosPlatformDxe/Qemu.c 2015-08-06 10:13:59 UTC (rev 
18179)
+++ trunk/edk2/OvmfPkg/SmbiosPlatformDxe/Qemu.c 2015-08-06 10:14:03 UTC (rev 
18180)
@@ -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,33 +28,20 @@
   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);
+  Status = QemuFwCfgFindFile ("etc/smbios/smbios-tables", &Tables,
+             &TablesSize);
+  ASSERT_EFI_ERROR (Status);
+  ASSERT (TablesSize > 0);
 
-  if (AsciiStrnCmp ((CHAR8 *)QemuAnchor.AnchorString, "_SM_", 4) ||
-      AsciiStrnCmp ((CHAR8 *)QemuAnchor.IntermediateAnchorString, "_DMI_", 5) 
||
-      TablesSize != QemuAnchor.TableLength) {
-    return NULL;
-  }
-
   QemuTables = AllocatePool (TablesSize);
   if (QemuTables == NULL) {
     return NULL;

Modified: trunk/edk2/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
===================================================================
--- trunk/edk2/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf  2015-08-06 
10:13:59 UTC (rev 18179)
+++ trunk/edk2/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf  2015-08-06 
10:14:03 UTC (rev 18180)
@@ -53,7 +53,11 @@
   HobLib
   QemuFwCfgLib
   MemoryAllocationLib
+  PcdLib
 
+[Pcd]
+  gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated
+
 [Protocols]
   gEfiSmbiosProtocolGuid                      # PROTOCOL ALWAYS_CONSUMED
 


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to