mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: Enable/Disable S3BootScript dynamically.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2212 In binary model the same binary may have to support both S3 enabled and disabled scenarios, however not all DXE drivers linking PiDxeS3BootScriptLib can return error to invoke library DESTRUCTOR for releasing resource. To support this usage model below PCD is used to skip S3BootScript functions when PCD set to FALSE: gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable Test: Verified on internal platform and S3BootScript functions can be skipped by PCD during boot time. Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Chasel Chiu <chasel.chiu@intel.com> Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
f835e1d4c1
commit
ed9db1b91c
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Save the S3 data to S3 boot script.
|
||||
|
||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
|
@ -124,6 +124,7 @@ VOID *mRegistrationSmmReadyToLock = NULL;
|
|||
BOOLEAN mS3BootScriptTableAllocated = FALSE;
|
||||
BOOLEAN mS3BootScriptTableSmmAllocated = FALSE;
|
||||
EFI_SMM_SYSTEM_TABLE2 *mBootScriptSmst = NULL;
|
||||
BOOLEAN mAcpiS3Enable = TRUE;
|
||||
|
||||
/**
|
||||
This is an internal function to add a terminate node the entry, recalculate the table
|
||||
|
@ -436,6 +437,12 @@ S3BootScriptLibInitialize (
|
|||
BOOLEAN InSmm;
|
||||
EFI_PHYSICAL_ADDRESS Buffer;
|
||||
|
||||
if (!PcdGetBool (PcdAcpiS3Enable)) {
|
||||
mAcpiS3Enable = FALSE;
|
||||
DEBUG ((DEBUG_INFO, "%a: Skip S3BootScript because ACPI S3 disabled.\n", gEfiCallerBaseName));
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
S3TablePtr = (SCRIPT_TABLE_PRIVATE_DATA*)(UINTN)PcdGet64(PcdS3BootScriptTablePrivateDataPtr);
|
||||
//
|
||||
// The Boot script private data is not be initialized. create it
|
||||
|
@ -562,6 +569,10 @@ S3BootScriptLibDeinitialize (
|
|||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (!mAcpiS3Enable) {
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
DEBUG ((EFI_D_INFO, "%a() in %a module\n", __FUNCTION__, gEfiCallerBaseName));
|
||||
|
||||
if (mEventDxeSmmReadyToLock != NULL) {
|
||||
|
@ -810,6 +821,10 @@ S3BootScriptGetEntryAddAddress (
|
|||
{
|
||||
UINT8* NewEntryPtr;
|
||||
|
||||
if (!mAcpiS3Enable) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (mS3BootScriptTablePtr->SmmLocked) {
|
||||
//
|
||||
// We need check InSmm, because after SmmReadyToLock, only SMM driver is allowed to write boot script.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
## @file
|
||||
# DXE S3 boot script Library.
|
||||
#
|
||||
# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
|
@ -65,4 +65,4 @@
|
|||
## SOMETIMES_PRODUCES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptRuntimeTableReservePageNumber ## CONSUMES
|
||||
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable ## CONSUMES
|
||||
|
|
Loading…
Reference in New Issue