From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 1DD4A211CF377 for ; Mon, 4 Mar 2019 18:07:02 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Mar 2019 18:07:01 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,442,1544515200"; d="scan'208";a="139140725" Received: from ydong10-win10.ccr.corp.intel.com ([10.239.9.125]) by orsmga002.jf.intel.com with ESMTP; 04 Mar 2019 18:07:00 -0800 From: Eric Dong To: edk2-devel@lists.01.org Date: Tue, 5 Mar 2019 10:06:57 +0800 Message-Id: <20190305020658.23408-1-eric.dong@intel.com> X-Mailer: git-send-email 2.15.0.windows.1 Subject: [Patch] MdeModulePkg/PiSmmCore: Control S3 related functionality with flag. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Mar 2019 02:07:02 -0000 https://bugzilla.tianocore.org/show_bug.cgi?id=1590 Use PcdAcpiS3Enable to control whether need to enable S3 related functionality in Pi SMM Core. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Dong --- MdeModulePkg/Core/PiSmmCore/PiSmmCore.c | 70 ++++++++++++++++++++++--------- MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf | 1 + 2 files changed, 51 insertions(+), 20 deletions(-) diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c index d0bc65b564..bd19803c37 100644 --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c @@ -77,6 +77,12 @@ BOOLEAN mInLegacyBoot = FALSE; // BOOLEAN mDuringS3Resume = FALSE; +// +// Flag to determine if platform enabled S3. +// Get the value from PcdAcpiS3Enable. +// +BOOLEAN mAcpiS3Enable = FALSE; + // // Table of SMI Handlers that are registered by the SMM Core when it is initialized // @@ -87,6 +93,13 @@ SMM_CORE_SMI_HANDLERS mSmmCoreSmiHandlers[] = { { SmmExitBootServicesHandler, &gEfiEventExitBootServicesGuid, NULL, FALSE }, { SmmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE }, { SmmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, TRUE }, + { NULL, NULL, NULL, FALSE } +}; + +// +// Table of SMI Handlers that are registered by the SMM Core when it is initialized +// +SMM_CORE_SMI_HANDLERS mSmmCoreS3SmiHandlers[] = { { SmmS3SmmInitDoneHandler, &gEdkiiS3SmmInitDoneGuid, NULL, FALSE }, { SmmEndOfS3ResumeHandler, &gEdkiiEndOfS3ResumeGuid, NULL, FALSE }, { NULL, NULL, NULL, FALSE } @@ -445,28 +458,30 @@ SmmEndOfDxeHandler ( NULL ); - // - // Locate SmmSxDispatch2 protocol. - // - Status = SmmLocateProtocol ( - &gEfiSmmSxDispatch2ProtocolGuid, - NULL, - (VOID **)&SxDispatch - ); - if (!EFI_ERROR (Status) && (SxDispatch != NULL)) { + if (mAcpiS3Enable) { // - // Register a S3 entry callback function to - // determine if it will be during S3 resume. + // Locate SmmSxDispatch2 protocol. // - EntryRegisterContext.Type = SxS3; - EntryRegisterContext.Phase = SxEntry; - Status = SxDispatch->Register ( - SxDispatch, - SmmS3EntryCallBack, - &EntryRegisterContext, - &S3EntryHandle - ); - ASSERT_EFI_ERROR (Status); + Status = SmmLocateProtocol ( + &gEfiSmmSxDispatch2ProtocolGuid, + NULL, + (VOID **)&SxDispatch + ); + if (!EFI_ERROR (Status) && (SxDispatch != NULL)) { + // + // Register a S3 entry callback function to + // determine if it will be during S3 resume. + // + EntryRegisterContext.Type = SxS3; + EntryRegisterContext.Phase = SxEntry; + Status = SxDispatch->Register ( + SxDispatch, + SmmS3EntryCallBack, + &EntryRegisterContext, + &S3EntryHandle + ); + ASSERT_EFI_ERROR (Status); + } } return EFI_SUCCESS; @@ -883,6 +898,21 @@ SmmMain ( ASSERT_EFI_ERROR (Status); } + mAcpiS3Enable = PcdGetBool (PcdAcpiS3Enable); + if (mAcpiS3Enable) { + // + // Register all S3 related SMI Handlers required by the SMM Core + // + for (Index = 0; mSmmCoreS3SmiHandlers[Index].HandlerType != NULL; Index++) { + Status = SmiHandlerRegister ( + mSmmCoreS3SmiHandlers[Index].Handler, + mSmmCoreS3SmiHandlers[Index].HandlerType, + &mSmmCoreS3SmiHandlers[Index].DispatchHandle + ); + ASSERT_EFI_ERROR (Status); + } + } + RegisterSmramProfileHandler (); SmramProfileInstallProtocol (); diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf index f3ece22121..9a31cb79d6 100644 --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf @@ -101,6 +101,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPageType ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPoolType ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPropertyMask ## CONSUMES + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable ## CONSUMES [Guids] gAprioriGuid ## SOMETIMES_CONSUMES ## File -- 2.15.0.windows.1