Currently, the LockBox protocol is installed in entrypoint of
OVMF AcpiS3SaveDxe, that is strange.

We can let the first driver run with LockBoxDxeLib linked to have its
library constructor to install LockBox protocol on the ImageHandle.
As other drivers may have gEfiLockBoxProtocolGuid dependency,
the first driver () should run before them.

The later patches to retire AcpiS3SaveDxe for OVMF depends on this patch.

Cc: Laszlo Ersek <ler...@redhat.com>
Cc: Jordan Justen <jordan.l.jus...@intel.com>
Cc: Jiewen Yao <jiewen....@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.z...@intel.com>
---
 OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c           | 13 +-----------
 OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf      |  6 +-----
 OvmfPkg/Library/LockBoxLib/LockBoxDxe.c      | 31 ++++++++++++++++++++++++++--
 OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf |  6 +++++-
 4 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c 
b/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c
index e3ff23410145..176f598fe686 100644
--- a/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c
+++ b/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c
@@ -6,7 +6,7 @@
   End-of-Dxe event.
 
 Copyright (c) 2014-2015, Red Hat, Inc.<BR>
-Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
 
 This program and the accompanying materials
 are licensed and made available under the terms and conditions
@@ -28,12 +28,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
EXPRESS OR IMPLIED.
 #include <Library/LockBoxLib.h>
 #include <Library/PcdLib.h>
 #include <Library/DebugLib.h>
-#include <Library/QemuFwCfgLib.h>
 #include <Guid/AcpiVariableCompatibility.h>
 #include <Guid/AcpiS3Context.h>
 #include <Guid/Acpi.h>
 #include <Guid/EventGroup.h>
-#include <Protocol/LockBox.h>
 #include <IndustryStandard/Acpi.h>
 
 EFI_GUID              mAcpiS3IdtrProfileGuid = {
@@ -538,15 +536,6 @@ InstallEndOfDxeCallback (
     return EFI_LOAD_ERROR;
   }
 
-  if (!FeaturePcdGet (PcdSmmSmramRequire)) {
-    Status = gBS->InstallMultipleProtocolInterfaces (
-                    &ImageHandle,
-                    &gEfiLockBoxProtocolGuid, NULL,
-                    NULL
-                    );
-    ASSERT_EFI_ERROR (Status);
-  }
-
   Status = gBS->CreateEventEx (
                   EVT_NOTIFY_SIGNAL,
                   TPL_CALLBACK,
diff --git a/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf 
b/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
index a288b954b791..f067fc7bf0e5 100644
--- a/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
+++ b/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
@@ -1,7 +1,7 @@
 ## @file
 # AcpiS3Save module installs EndOfDxe callback to prepare S3 boot data.
 #
-# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
 #
 # This program and the accompanying materials are
 # licensed and made available under the terms and conditions of the BSD License
@@ -36,7 +36,6 @@ [Packages]
   MdeModulePkg/MdeModulePkg.dec
   IntelFrameworkPkg/IntelFrameworkPkg.dec
   IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
-  OvmfPkg/OvmfPkg.dec
 
 [LibraryClasses]
   PcdLib
@@ -49,7 +48,6 @@ [LibraryClasses]
   LockBoxLib
   DebugLib
   DxeServicesLib
-  QemuFwCfgLib
 
 [Guids]
   gEfiAcpiVariableGuid                          # ALWAYS_CONSUMED
@@ -59,7 +57,6 @@ [Guids]
   gEfiEndOfDxeEventGroupGuid                    ## CONSUMES  ## Event
 
 [Protocols]
-  gEfiLockBoxProtocolGuid                       # PROTOCOL SOMETIMES_PRODUCED
   gEfiLegacyBiosProtocolGuid                    # PROTOCOL ALWAYS_CONSUMED
   gEfiLegacyRegion2ProtocolGuid                 # PROTOCOL SOMETIMES_CONSUMED
   gFrameworkEfiMpServiceProtocolGuid            # PROTOCOL SOMETIMES_CONSUMED
@@ -71,7 +68,6 @@ [Pcd]
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize    ## 
CONSUMES
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3BootScriptStackSize       ## 
CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable
-  gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire                            ## 
CONSUMES
 
 [Depex]
   gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid
diff --git a/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c 
b/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c
index c8f2ec8a4ee4..5d2d21fdb495 100644
--- a/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c
+++ b/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c
@@ -1,6 +1,6 @@
 /** @file
 
-  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
@@ -18,6 +18,8 @@
 #include <Library/UefiBootServicesTableLib.h>
 #include <Library/BaseMemoryLib.h>
 #include <Library/DebugLib.h>
+#include <Library/QemuFwCfgLib.h>
+#include <Protocol/LockBox.h>
 #include <LockBoxLib.h>
 
 /**
@@ -115,5 +117,30 @@ LockBoxDxeLibInitialize (
   IN EFI_SYSTEM_TABLE  *SystemTable
   )
 {
-  return LockBoxLibInitialize ();
+  EFI_STATUS    Status;
+  VOID          *Interface;
+
+  Status = LockBoxLibInitialize ();
+  if (!EFI_ERROR (Status)) {
+    if (QemuFwCfgS3Enabled ()) {
+      //
+      // When S3 enabled, the first driver run with this library linked will
+      // have this library constructor to install LockBox protocol on the
+      // ImageHandle. As other drivers may have gEfiLockBoxProtocolGuid
+      // dependency, the first driver () should run before them.
+      //
+      Status = gBS->LocateProtocol (&gEfiLockBoxProtocolGuid, NULL, 
&Interface);
+      if (EFI_ERROR (Status)) {
+        Status = gBS->InstallProtocolInterface (
+                        &ImageHandle,
+                        &gEfiLockBoxProtocolGuid,
+                        EFI_NATIVE_INTERFACE,
+                        NULL
+                        );
+        ASSERT_EFI_ERROR (Status);
+      }
+    }
+  }
+
+  return Status;
 }
diff --git a/OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf 
b/OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf
index 08973a47be6d..bedf1811e0b2 100644
--- a/OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf
+++ b/OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf
@@ -3,7 +3,7 @@
 #  Library implementing the LockBox interface for OVMF
 #
 #  Copyright (C) 2013, Red Hat, Inc.
-#  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
 #
 #  This program and the accompanying materials are licensed and made available
 #  under the terms and conditions of the BSD License which accompanies this
@@ -39,6 +39,10 @@ [LibraryClasses]
   BaseMemoryLib
   DebugLib
   UefiBootServicesTableLib
+  QemuFwCfgLib
+
+[Protocols]
+  gEfiLockBoxProtocolGuid    ## SOMETIMES_PRODUCES
 
 [Pcd]
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfLockBoxStorageBase
-- 
2.7.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to