From nobody Mon Feb 9 10:27:54 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+92261+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+92261+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1660092517; cv=none; d=zohomail.com; s=zohoarc; b=ncYmGTWw4UOG3vPhG1tO62l7Bu7AN5UVihBHCbWvGPZZhHUUn8pYBs65OR3YJGWO+CysjFjix6dF0S5usojm/XoIoQ8bnftzrOCRZxfT/Be+YTJldx3qtFwZd3OfhpzKj5Wj8dPddMh0JJkq8JlPSaVYOMFrduSFv948Z3pJAUk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660092517; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=P2M/176HHdBd/T2ZIn2o4OZiQ4pYGlXeeYNCcEZLAFA=; b=ARmL/ipFpF4Ux6a5qn0N6330n/9SCPwY5DiW+tgiVZCqVsiXTNy5It26Ht5ShCbxY2/701EhOeli/Rwiops3d1ikCDQyPYnvAsThUok6I9jZ56s+7mXOR04xEsZsFRvTKrzUEiHe5s2eiX0rciSKj0jaDXY1OIryPGIln7Hai14= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+92261+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1660092517072326.7261645491849; Tue, 9 Aug 2022 17:48:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id r7f4YY1788612xaIHH6Oh6Cl; Tue, 09 Aug 2022 17:48:36 -0700 X-Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web08.510.1660092515070874926 for ; Tue, 09 Aug 2022 17:48:35 -0700 X-IronPort-AV: E=McAfee;i="6400,9594,10434"; a="377257844" X-IronPort-AV: E=Sophos;i="5.93,225,1654585200"; d="scan'208";a="377257844" X-Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 17:48:34 -0700 X-IronPort-AV: E=Sophos;i="5.93,225,1654585200"; d="scan'208";a="555542628" X-Received: from cchiu4-mobl.gar.corp.intel.com ([10.212.149.229]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 17:48:34 -0700 From: "Chiu, Chasel" To: devel@edk2.groups.io Cc: Chasel Chiu , Nate DeSimone , Star Zeng Subject: [edk2-devel] [PATCH v2 2/4] IntelFsp2WrapperPkg: Add FSP 2.4 MultiPhase interface. Date: Tue, 9 Aug 2022 17:48:20 -0700 Message-Id: <20220810004822.1499-3-chasel.chiu@intel.com> In-Reply-To: <20220810004822.1499-1-chasel.chiu@intel.com> References: <20220810004822.1499-1-chasel.chiu@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,chasel.chiu@intel.com X-Gm-Message-State: 6C2XAyxhq2y3xCHpBZgVVO9kx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1660092516; bh=R2oC3rvhbR2ngIOUaW9KEuP+ihRmU2QtidBskDt6VtY=; h=Cc:Date:From:Reply-To:Subject:To; b=D10bmGDWQWI2hpiCA6qRR/VM6A8g2kpXTB3uLaIFrFKpDHvPoAsJG2HMw/K+4dWgud3 4WrHXgHAfW+DForOMjoV2GvXLVybLRlVitFiWbgg5ZOy9VV8tpwQ2ctZrFhc2C+23KK3v hwAJK9hgk07p8KjGQcP9BGFZmh8PLHsIb8s= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1660092518628100009 Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3916 Provide FSP 2.4 MultiPhase wrapper support library. Cc: Nate DeSimone Cc: Star Zeng Signed-off-by: Chasel Chiu Reviewed-by: Nate DeSimone --- IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSample/FspW= rapperPlatformMultiPhaseLibSample.c | 49 +++++++++++++++++++++++++++= ++++++++++++++++++++++ IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/PeiFspWrapperMu= ltiPhaseProcessLib.c | 355 +++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++++++++++++++++++++++++ IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProcessLib.h = | 62 +++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++ IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec = | 10 +++++++++- IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc = | 6 +++++- IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSample/Base= FspWrapperPlatformMultiPhaseLibSample.inf | 37 +++++++++++++++++++++++++++= ++++++++++ IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrapperMulti= PhaseProcessLib.inf | 48 +++++++++++++++++++++++++++= +++++++++++++++++++++ 7 files changed, 565 insertions(+), 2 deletions(-) diff --git a/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLi= bSample/FspWrapperPlatformMultiPhaseLibSample.c b/IntelFsp2WrapperPkg/Libra= ry/BaseFspWrapperPlatformMultiPhaseLibSample/FspWrapperPlatformMultiPhaseLi= bSample.c new file mode 100644 index 0000000000..ef8819203d --- /dev/null +++ b/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSample= /FspWrapperPlatformMultiPhaseLibSample.c @@ -0,0 +1,49 @@ +/** @file + Support FSP MultiPhase process. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +/** + FSP Wrapper Platform MultiPhase Handler + + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FS= P-M completed) + @param[in] ComponentIndex - FSP Component which executing MultiPha= se initialization. + @param[in] PhaseIndex - Indicates current execution phase of F= SP MultiPhase initialization. + + @retval EFI_STATUS Always return EFI_SUCCESS + +**/ +VOID +EFIAPI +FspWrapperPlatformMultiPhaseHandler ( + IN OUT VOID **FspHobListPtr, + IN UINT8 ComponentIndex, + IN UINT32 PhaseIndex + ) +{ + /* Example platform actions as below + switch (ComponentIndex) { + case FspMultiPhaseMemInitApiIndex: + switch (PhaseIndex) { + case 1: + PlatformAction1 (); + break; + } + break; + case FspMultiPhaseSiInitApiIndex: + switch (PhaseIndex) { + case 1: + PlatformAction2 (); + break; + } + break; + } + */ +} diff --git a/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/Pei= FspWrapperMultiPhaseProcessLib.c b/IntelFsp2WrapperPkg/Library/FspWrapperMu= ltiPhaseProcessLib/PeiFspWrapperMultiPhaseProcessLib.c new file mode 100644 index 0000000000..c29a8277df --- /dev/null +++ b/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/PeiFspWrap= perMultiPhaseProcessLib.c @@ -0,0 +1,355 @@ +/** @file + Support FSP MultiPhase process. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + Execute 32-bit FSP API entry code. + + @param[in] Function The 32bit code entry to be executed. + @param[in] Param1 The first parameter to pass to 32bit code. + @param[in] Param2 The second parameter to pass to 32bit code. + + @return EFI_STATUS. +**/ +EFI_STATUS +Execute32BitCode ( + IN UINT64 Function, + IN UINT64 Param1, + IN UINT64 Param2 + ); + +/** + Execute 64-bit FSP API entry code. + + @param[in] Function The 64bit code entry to be executed. + @param[in] Param1 The first parameter to pass to 64bit code. + @param[in] Param2 The second parameter to pass to 64bit code. + + @return EFI_STATUS. +**/ +EFI_STATUS +Execute64BitCode ( + IN UINT64 Function, + IN UINT64 Param1, + IN UINT64 Param2 + ); + +/** + Call FspsMultiPhase API. + + @param[in] FspsMultiPhaseParams - Parameters for MultiPhase API. + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FS= P-M completed) + @param[in] ComponentIndex - FSP Component which executing MultiPha= se initialization. + + @return EFI_UNSUPPORTED - the requested FspsMultiPhase API is not suppo= rted. + @return EFI_DEVICE_ERROR - the FSP header was not found. + @return EFI status returned by FspsMultiPhase API. +**/ +EFI_STATUS +EFIAPI +CallFspMultiPhaseEntry ( + IN VOID *FspMultiPhaseParams, + IN OUT VOID **FspHobListPtr, + IN UINT8 ComponentIndex + ) +{ + FSP_INFO_HEADER *FspHeader; + // + // FSP_MULTI_PHASE_INIT and FSP_MULTI_PHASE_SI_INIT API functions having= same prototype. + // + UINTN FspMultiPhaseApiEntry; + UINTN FspMultiPhaseApiOffset; + EFI_STATUS Status; + BOOLEAN InterruptState; + + if (ComponentIndex =3D=3D FspMultiPhaseMemInitApiIndex) { + FspHeader =3D (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 (PcdFspmBa= seAddress)); + if (FspHeader =3D=3D NULL) { + return EFI_DEVICE_ERROR; + } + + FspMultiPhaseApiOffset =3D FspHeader->FspMultiPhaseMemInitEntryOffset; + } else if (ComponentIndex =3D=3D FspMultiPhaseSiInitApiIndex) { + FspHeader =3D (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 (PcdFspsBa= seAddress)); + if (FspHeader =3D=3D NULL) { + return EFI_DEVICE_ERROR; + } + + FspMultiPhaseApiOffset =3D FspHeader->FspMultiPhaseSiInitEntryOffset; + } + + if (FspMultiPhaseApiOffset =3D=3D 0) { + return EFI_UNSUPPORTED; + } + + FspMultiPhaseApiEntry =3D FspHeader->ImageBase + FspMultiPhaseApiOffset; + InterruptState =3D SaveAndDisableInterrupts (); + if ((FspHeader->ImageAttribute & BIT2) =3D=3D 0) { + // BIT2: IMAGE_ATTRIBUTE_64BIT_MODE_SUPPORT + Status =3D Execute32BitCode ((UINTN)FspMultiPhaseApiEntry, (UINTN)FspM= ultiPhaseParams, (UINTN)NULL); + } else { + Status =3D Execute64BitCode ((UINTN)FspMultiPhaseApiEntry, (UINTN)FspM= ultiPhaseParams, (UINTN)NULL); + } + + SetInterruptState (InterruptState); + + DEBUG ((DEBUG_ERROR, "CallFspMultiPhaseEntry return Status %r \n", Statu= s)); + + return Status; +} + +/** + FSP Wrapper Variable Request Handler + + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FS= P-M completed) + @param[in] ComponentIndex - FSP Component which executing MultiPha= se initialization. + + @retval EFI_UNSUPPORTED FSP Wrapper cannot support the specific variab= le request + @retval EFI_STATUS Return FSP returned status + +**/ +EFI_STATUS +EFIAPI +FspWrapperVariableRequestHandler ( + IN OUT VOID **FspHobListPtr, + IN UINT8 ComponentIndex + ) +{ + EFI_STATUS Status; + FSP_MULTI_PHASE_PARAMS FspMultiPhaseParams; + FSP_MULTI_PHASE_VARIABLE_REQUEST_INFO_PARAMS *FspVariableRequestPar= ams; + EFI_PEI_READ_ONLY_VARIABLE2_PPI *ReadOnlyVariablePpi; + EDKII_PEI_VARIABLE_PPI *VariablePpi; + BOOLEAN WriteVariableSupport; + FSP_MULTI_PHASE_COMPLETE_VARIABLE_REQUEST_PARAMS CompleteVariableReques= tParams; + + WriteVariableSupport =3D TRUE; + Status =3D PeiServicesLocatePpi ( + &gEdkiiPeiVariablePpiGuid, + 0, + NULL, + (VOID **)&VariablePpi + ); + if (EFI_ERROR (Status)) { + WriteVariableSupport =3D FALSE; + Status =3D PeiServicesLocatePpi ( + &gEfiPeiReadOnlyVariable2PpiGuid, + 0, + NULL, + (VOID **)&ReadOnlyVariablePpi + ); + ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + return EFI_UNSUPPORTED; + } + } + + Status =3D FSP_STATUS_VARIABLE_REQUEST; + while (Status =3D=3D FSP_STATUS_VARIABLE_REQUEST) { + // + // Get the variable request information from FSP. + // + FspMultiPhaseParams.MultiPhaseAction =3D EnumMultiPhaseGetVariableRequ= estInfo; + FspMultiPhaseParams.PhaseIndex =3D 0; + Status =3D CallFspMultiPhaseEntry (&FspM= ultiPhaseParams, FspHobListPtr, ComponentIndex); + ASSERT_EFI_ERROR (Status); + // + // FSP should output this pointer for variable request information. + // + FspVariableRequestParams =3D (FSP_MULTI_PHASE_VARIABLE_REQUEST_INFO_PA= RAMS *)FspMultiPhaseParams.MultiPhaseParamPtr; + switch (FspVariableRequestParams->VariableRequest) { + case EnumFspVariableRequestGetVariable: + if (WriteVariableSupport) { + Status =3D VariablePpi->GetVariable ( + VariablePpi, + FspVariableRequestParams->VariableName, + FspVariableRequestParams->VariableGuid, + FspVariableRequestParams->Attributes, + (UINTN *)FspVariableRequestParams->DataS= ize, + FspVariableRequestParams->Data + ); + } else { + Status =3D ReadOnlyVariablePpi->GetVariable ( + ReadOnlyVariablePpi, + FspVariableRequestParams->Variab= leName, + FspVariableRequestParams->Variab= leGuid, + FspVariableRequestParams->Attrib= utes, + (UINTN *)FspVariableRequestParam= s->DataSize, + FspVariableRequestParams->Data + ); + } + + CompleteVariableRequestParams.VariableRequestStatus =3D Status; + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID *)&C= ompleteVariableRequestParams; + FspMultiPhaseParams.MultiPhaseAction =3D EnumMultiP= haseCompleteVariableRequest; + Status =3D CallFspMul= tiPhaseEntry (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); + break; + + case EnumFspVariableRequestSetVariable: + if (WriteVariableSupport) { + Status =3D VariablePpi->SetVariable ( + VariablePpi, + FspVariableRequestParams->VariableName, + FspVariableRequestParams->VariableGuid, + *FspVariableRequestParams->Attributes, + (UINTN)*FspVariableRequestParams->DataSi= ze, + FspVariableRequestParams->Data + ); + } else { + Status =3D EFI_UNSUPPORTED; + } + + CompleteVariableRequestParams.VariableRequestStatus =3D Status; + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID *)&C= ompleteVariableRequestParams; + FspMultiPhaseParams.MultiPhaseAction =3D EnumMultiP= haseCompleteVariableRequest; + Status =3D CallFspMul= tiPhaseEntry (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); + break; + + case EnumFspVariableRequestGetNextVariableName: + if (WriteVariableSupport) { + Status =3D VariablePpi->GetNextVariableName ( + VariablePpi, + (UINTN *)FspVariableRequestParams->Varia= bleNameSize, + FspVariableRequestParams->VariableName, + FspVariableRequestParams->VariableGuid + ); + } else { + Status =3D ReadOnlyVariablePpi->NextVariableName ( + ReadOnlyVariablePpi, + (UINTN *)FspVariableRequestParam= s->VariableNameSize, + FspVariableRequestParams->Variab= leName, + FspVariableRequestParams->Variab= leGuid + ); + } + + CompleteVariableRequestParams.VariableRequestStatus =3D Status; + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID *)&C= ompleteVariableRequestParams; + FspMultiPhaseParams.MultiPhaseAction =3D EnumMultiP= haseCompleteVariableRequest; + Status =3D CallFspMul= tiPhaseEntry (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); + break; + + case EnumFspVariableRequestQueryVariableInfo: + if (WriteVariableSupport) { + Status =3D VariablePpi->QueryVariableInfo ( + VariablePpi, + *FspVariableRequestParams->Attributes, + FspVariableRequestParams->MaximumVariabl= eStorageSize, + FspVariableRequestParams->RemainingVaria= bleStorageSize, + FspVariableRequestParams->MaximumVariabl= eSize + ); + } else { + Status =3D EFI_UNSUPPORTED; + } + + CompleteVariableRequestParams.VariableRequestStatus =3D Status; + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID *)&C= ompleteVariableRequestParams; + FspMultiPhaseParams.MultiPhaseAction =3D EnumMultiP= haseCompleteVariableRequest; + Status =3D CallFspMul= tiPhaseEntry (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); + break; + + default: + DEBUG ((DEBUG_ERROR, "Unknown VariableRequest type!\n")); + Status =3D EFI_UNSUPPORTED; + break; + } + } + + // + // Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status + // + if ((Status >=3D FSP_STATUS_RESET_REQUIRED_COLD) && (Status <=3D FSP_STA= TUS_RESET_REQUIRED_8)) { + DEBUG ((DEBUG_INFO, "FspMultiPhaseApi-0x%x requested reset %r\n", Comp= onentIndex, Status)); + CallFspWrapperResetSystem ((UINTN)Status); + } + + return Status; +} + +/** + FSP Wrapper MultiPhase Handler + + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FS= P-M completed) + @param[in] ComponentIndex - FSP Component which executing MultiPha= se initialization. + + @retval EFI_STATUS Always return EFI_SUCCESS + +**/ +EFI_STATUS +EFIAPI +FspWrapperMultiPhaseHandler ( + IN OUT VOID **FspHobListPtr, + IN UINT8 ComponentIndex + ) +{ + EFI_STATUS Status; + FSP_MULTI_PHASE_PARAMS FspMultiPhaseParams; + FSP_MULTI_PHASE_GET_NUMBER_OF_PHASES_PARAMS FspMultiPhaseGetNumber; + UINT32 Index; + UINT32 NumOfPhases; + + // + // Query FSP for the number of phases supported. + // + FspMultiPhaseParams.MultiPhaseAction =3D EnumMultiPhaseGetNumberOfPhas= es; + FspMultiPhaseParams.PhaseIndex =3D 0; + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID *)&FspMultiPhaseGetNumb= er; + Status =3D CallFspMultiPhaseEntry (&FspM= ultiPhaseParams, FspHobListPtr, ComponentIndex); + if (Status =3D=3D EFI_UNSUPPORTED) { + // + // MultiPhase API was not supported + // + return Status; + } else { + ASSERT_EFI_ERROR (Status); + } + + NumOfPhases =3D FspMultiPhaseGetNumber.NumberOfPhases; + + for (Index =3D 1; Index <=3D NumOfPhases; Index++) { + DEBUG ((DEBUG_ERROR, "MultiPhase Index/NumOfPhases =3D %d of %d\n", In= dex, NumOfPhases)); + // + // Platform actions can be added in below function for each component = and phase before returning control back to FSP. + // + FspWrapperPlatformMultiPhaseHandler (FspHobListPtr, ComponentIndex, In= dex); + + FspMultiPhaseParams.MultiPhaseAction =3D EnumMultiPhaseExecutePhase; + FspMultiPhaseParams.PhaseIndex =3D Index; + FspMultiPhaseParams.MultiPhaseParamPtr =3D NULL; + Status =3D CallFspMultiPhaseEntry (&Fs= pMultiPhaseParams, FspHobListPtr, ComponentIndex); + + if (Status =3D=3D FSP_STATUS_VARIABLE_REQUEST) { + // + // call to Variable request handler + // + FspWrapperVariableRequestHandler (FspHobListPtr, ComponentIndex); + } + + // + // Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED stat= us + // + if ((Status >=3D FSP_STATUS_RESET_REQUIRED_COLD) && (Status <=3D FSP_S= TATUS_RESET_REQUIRED_8)) { + DEBUG ((DEBUG_INFO, "FspMultiPhaseApi-0x%x requested reset %r\n", Co= mponentIndex, Status)); + CallFspWrapperResetSystem ((UINTN)Status); + } + + ASSERT_EFI_ERROR (Status); + } + + return EFI_SUCCESS; +} diff --git a/IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProces= sLib.h b/IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProcessLib= .h new file mode 100644 index 0000000000..65a5db233f --- /dev/null +++ b/IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProcessLib.h @@ -0,0 +1,62 @@ +/** @file + Provide FSP wrapper MultiPhase handling functions. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef __FSP_WRAPPER_MULTI_PHASE_PROCESS_LIB_H__ +#define __FSP_WRAPPER_MULTI_PHASE_PROCESS_LIB_H__ + +/** + FSP Wrapper Platform MultiPhase Handler + + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FS= P-M completed) + @param[in] ComponentIndex - FSP Component which executing MultiPha= se initialization. + @param[in] PhaseIndex - Indicates current execution phase of F= SP MultiPhase initialization. + + @retval EFI_STATUS Always return EFI_SUCCESS + +**/ +VOID +EFIAPI +FspWrapperPlatformMultiPhaseHandler ( + IN OUT VOID **FspHobListPtr, + IN UINT8 ComponentIndex, + IN UINT32 PhaseIndex + ); + +/** + FSP Wrapper Variable Request Handler + + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FS= P-M completed) + @param[in] ComponentIndex - FSP Component which executing MultiPha= se initialization. + + @retval EFI_UNSUPPORTED FSP Wrapper cannot support the specific variab= le request + @retval EFI_STATUS Return FSP returned status + +**/EFI_STATUS +EFIAPI +FspWrapperVariableRequestHandler ( + IN OUT VOID **FspHobListPtr, + IN UINT8 ComponentIndex + ); + +/** + FSP Wrapper MultiPhase Handler + + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FS= P-M completed) + @param[in] ComponentIndex - FSP Component which executing MultiPha= se initialization. + + @retval EFI_STATUS Always return EFI_SUCCESS + +**/ +EFI_STATUS +EFIAPI +FspWrapperMultiPhaseHandler ( + IN OUT VOID **FspHobListPtr, + IN UINT8 ComponentIndex + ); + +#endif diff --git a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec b/IntelFsp2Wrapper= Pkg/IntelFsp2WrapperPkg.dec index c43b0c2267..d96037b63b 100644 --- a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec +++ b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec @@ -1,7 +1,7 @@ ## @file # Provides drivers and definitions to support fsp in EDKII bios. # -# Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.
+# Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -28,6 +28,14 @@ =20 ## @libraryclass Provide FSP TPM measurement related function. FspMeasurementLib|Include/Library/FspMeasurementLib.h + + ## @libraryclass Provide MultiPhase handling related functions. + FspWrapperMultiPhaseProcessLib|Include/Library/FspWrapperMultiPhaseProce= ssLib.h + + ## @libraryclass Provide MultiPhase platform actions related functions. + FspWrapperPlatformMultiPhaseLib|Include/Library/FspWrapperMultiPhaseProc= essLib.h + + [Guids] # # GUID defined in package diff --git a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc b/IntelFsp2Wrapper= Pkg/IntelFsp2WrapperPkg.dsc index 21e089000e..79a5c7f13d 100644 --- a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc +++ b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc @@ -1,7 +1,7 @@ ## @file # Provides drivers and definitions to support fsp in EDKII bios. # -# Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.
+# Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -48,6 +48,8 @@ FspWrapperApiLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFs= pWrapperApiLib.inf FspWrapperApiTestLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperApiTestLi= bNull/BaseFspWrapperApiTestLibNull.inf FspMeasurementLib|IntelFsp2WrapperPkg/Library/BaseFspMeasurementLib/Base= FspMeasurementLib.inf + FspWrapperPlatformMultiPhaseLib|IntelFsp2WrapperPkg/Library/BaseFspWrapp= erPlatformMultiPhaseLibSample/BaseFspWrapperPlatformMultiPhaseLibSample.inf + FspWrapperMultiPhaseProcessLib|IntelFsp2WrapperPkg/Library/FspWrapperMul= tiPhaseProcessLib/FspWrapperMultiPhaseProcessLib.inf =20 # FSP platform sample FspWrapperPlatformLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatform= LibSample/BaseFspWrapperPlatformLibSample.inf @@ -91,6 +93,8 @@ IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLib.inf IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformLibSample/BaseFspWrapp= erPlatformLibSample.inf IntelFsp2WrapperPkg/FspWrapperNotifyDxe/FspWrapperNotifyDxe.inf + IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSample/Ba= seFspWrapperPlatformMultiPhaseLibSample.inf + IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrapperMul= tiPhaseProcessLib.inf =20 [PcdsFixedAtBuild.common] gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x1f diff --git a/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLi= bSample/BaseFspWrapperPlatformMultiPhaseLibSample.inf b/IntelFsp2WrapperPkg= /Library/BaseFspWrapperPlatformMultiPhaseLibSample/BaseFspWrapperPlatformMu= ltiPhaseLibSample.inf new file mode 100644 index 0000000000..607ad41a23 --- /dev/null +++ b/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSample= /BaseFspWrapperPlatformMultiPhaseLibSample.inf @@ -0,0 +1,37 @@ +## @file +# FSP Wrapper to handle platform specific actions for +# FSP MultiPhase (SeparatePhase) Initialization. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D BaseFspWrapperPlatformMultiPhaseLibSa= mple + FILE_GUID =3D DB63E5AA-21C6-40BB-879A-CD1762C8427B + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D FspWrapperPlatformMultiPhaseLib + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + FspWrapperPlatformMultiPhaseLibSample.c + +[Packages] + MdePkg/MdePkg.dec + IntelFsp2Pkg/IntelFsp2Pkg.dec + IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec + +[LibraryClasses] + DebugLib + BaseLib + PcdLib + PeiServicesLib diff --git a/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/Fsp= WrapperMultiPhaseProcessLib.inf b/IntelFsp2WrapperPkg/Library/FspWrapperMul= tiPhaseProcessLib/FspWrapperMultiPhaseProcessLib.inf new file mode 100644 index 0000000000..e76a7465f2 --- /dev/null +++ b/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrapper= MultiPhaseProcessLib.inf @@ -0,0 +1,48 @@ +## @file +# FSP wrapper to handle FSP MultiPhase (SeparatePhase) Initialization. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D FspWrapperMultiPhaseProcessLib + FILE_GUID =3D 11E657B7-C3D8-405B-94C5-516840E67B75 + MODULE_TYPE =3D PEIM + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D FspWrapperMultiPhaseProcessLib + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D IA32 +# + +[Sources] + PeiFspWrapperMultiPhaseProcessLib.c + +[Packages] + MdePkg/MdePkg.dec + IntelFsp2Pkg/IntelFsp2Pkg.dec + IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + BaseLib + PcdLib + FspWrapperPlatformLib + PeiServicesLib + FspWrapperPlatformMultiPhaseLib + +[Ppis] + gEfiPeiReadOnlyVariable2PpiGuid + gEdkiiPeiVariablePpiGuid + +[Pcd] + gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress ## CONSUMES + gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress ## CONSUMES --=20 2.35.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#92261): https://edk2.groups.io/g/devel/message/92261 Mute This Topic: https://groups.io/mt/92928033/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-