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