Tim, I agree multiple repos in a WORKSPACE can potentially be confusing. Especially if the same package dir exists in more than of the repos. To alleviate this issue, a repo can be pruned and the .gitignore feature can be used for git to ignore the packages that have been pruned.
The reason I am asking these questions is not related to FSP. There have been prior discussions on edk2-devel to organize the packages in edk2 into subdirectories, and I am working on a proposal for that. However, moving packages into subdirectories would require the use of the PACKAGES_PATH feature. Is PACKAGES_PATH something you could add support for in your tools? Thanks, Mike > -----Original Message----- > From: Tim Lewis [mailto:[email protected]] > Sent: Thursday, May 5, 2016 6:53 PM > To: Kinney, Michael D <[email protected]>; Mudusuru, Giri P > <[email protected]>; Yao, Jiewen <[email protected]>; edk2- > [email protected] > Cc: Mudusuru, Giri P <[email protected]>; Zimmer, Vincent > <[email protected]>; Rangarajan, Ravi P <[email protected]> > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > FspInitPei to > FspmWrapperPeim and FspsWrapperPeim. > > Mike -- > > At this time, no. Our internal tools do not recognize it, and would fail > during tree > analysis. > > Likewise, our policy does not allow it because we find our customers are > confused by > multiple roots. It makes it hard for the engineers looking at a downstream > file to > predict where the final file resides. That leads to bad bug reports, etc. > > Tim > > -----Original Message----- > From: Kinney, Michael D [mailto:[email protected]] > Sent: Thursday, May 05, 2016 6:14 PM > To: Tim Lewis <[email protected]>; Mudusuru, Giri P > <[email protected]>; > Yao, Jiewen <[email protected]>; [email protected]; Kinney, Michael D > <[email protected]> > Cc: Mudusuru, Giri P <[email protected]>; Zimmer, Vincent > <[email protected]>; Rangarajan, Ravi P <[email protected]> > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > FspInitPei to > FspmWrapperPeim and FspsWrapperPeim. > > Hi Tim, > > I wanted to follow up on the general concern on the use of the PACKAGES_PATH > feature. > > The EDK II BaseTools still use a single WORKSPACE and can use PACKAGES_PATH > for > additional search paths for packages. PACKAGES_PATH can point to directories > Below WORKSPACE or outside WORKSPACE, so it is very flexible. > > https://github.com/tianocore/tianocore.github.io/wiki/Multiple_Workspace > > For your specific use case, could you use PACKAGES_PATH if all the paths > listed > in PACKAGES_PATH are below WORKSPACE? > > For example, if you have the following dir structure: > > tianocore/ > edk2/ > Udk2015/ > > You can set WORKSPACE to tianocore/ and PACKAGES_PATH to > tianocore/edk2;tianocore/Udk2015. > > This means an additional directory level is added, so all the packages are > not in the > root of WORKSPACE. This is how we can support pulling content from multiple > git > repos/tags/branches for a single WSORKSPACE build environment without having > to update > the [Packages] section in every INF. > > Thanks, > > Mike > > > > -----Original Message----- > > From: edk2-devel [mailto:[email protected]] On Behalf Of Tim > > Lewis > > Sent: Thursday, May 5, 2016 12:09 PM > > To: Mudusuru, Giri P <[email protected]>; Yao, Jiewen > > <[email protected]>; > > [email protected] > > Cc: Mudusuru, Giri P <[email protected]>; Zimmer, Vincent > > <[email protected]>; Rangarajan, Ravi P <[email protected]> > > Subject: Re: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > That works well, thank you > > > > Tim > > > > Sent from my Windows 10 phone > > > > From: Mudusuru, Giri P<mailto:[email protected]> > > Sent: Thursday, May 5, 2016 12:07 PM > > To: Tim Lewis<mailto:[email protected]>; Yao, > > Jiewen<mailto:[email protected]>; > > [email protected]<mailto:[email protected]> > > Cc: Rangarajan, Ravi P<mailto:[email protected]>; Yarlagadda, > > Satya > > P<mailto:[email protected]>; Zimmer, > > Vincent<mailto:[email protected]>; Mudusuru, Giri > > P<mailto:[email protected]> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > Hi Tim, > > Here is summary of the plan and next steps after discussing internally with > > Vincent > and > > others... > > > > > > 1) IntelFspPkg & IntelFspWrapperPkg will continue to support FSP v1.x > > support. > > These packages are in maintenance mode i.e., only critical bug fix or > > changes > > > > 2) Create new packages IntelFsp2Pkg and IntelFsp2WrapperPkg to support > > FSP v2.0 > > support > > > > Please let me know if this meets your need. > > > > Thanks, > > -Giri > > > > From: Tim Lewis [mailto:[email protected]] > > Sent: Wednesday, May 4, 2016 6:40 AM > > To: Mudusuru, Giri P <[email protected]>; Yao, Jiewen > > <[email protected]>; > > [email protected] > > Cc: Rangarajan, Ravi P <[email protected]>; Yarlagadda, Satya P > > <[email protected]>; Zimmer, Vincent <[email protected]>; > > Mudusuru, > > Giri P <[email protected]> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > Thank you. > > > > Tim > > > > Sent from my Windows 10 phone > > > > From: Mudusuru, Giri P<mailto:[email protected]> > > Sent: Tuesday, May 3, 2016 11:06 PM > > To: Tim Lewis<mailto:[email protected]>; Yao, > > Jiewen<mailto:[email protected]>; > > [email protected]<mailto:[email protected]> > > Cc: Rangarajan, Ravi P<mailto:[email protected]>; Yarlagadda, > > Satya > > P<mailto:[email protected]>; Zimmer, > > Vincent<mailto:[email protected]>; Mudusuru, Giri > > P<mailto:[email protected]> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > Thanks for info on the policy and usage. Let me follow up internally and > > get back to > > you. > > > > Thanks, > > -Giri > > From: Tim Lewis [mailto:[email protected]] > > Sent: Tuesday, May 3, 2016 4:24 PM > > To: Mudusuru, Giri P > > <[email protected]<mailto:[email protected]>>; > > Yao, Jiewen <[email protected]<mailto:[email protected]>>; edk2- > > [email protected]<mailto:[email protected]> > > Cc: Rangarajan, Ravi P > > <[email protected]<mailto:[email protected]>>; > > Yarlagadda, Satya > P > > <[email protected]<mailto:[email protected]>>; > > Zimmer, Vincent > > <[email protected]<mailto:[email protected]>> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > > > 1. Because we, per our custom tools and per our company policy, > > require that all > > source code exist underneath $(WORKSPACE). As previously discussed on this > > list, we > > think multiple workspaces makes our projects harder to maintain and harder > > to scan. > > Multiple workspaces was meant to be an OPTIONAL feature and, while some may > > use it, > > making it a requirement that all codebases follow this path to support what > > is today > > already supported seems a bit steep. > > > > 2. There is NO PRODUCTION silicon that uses FSP 2.0 at this time that > > I am aware > > of. That means Intel is upgrading the Wrapper package to support silicon > > that is not > > yet shipping and removing support for the (by my count) 5 publicly announced > chipsets, > > and probably a few others that are in alpha or beta. > > > > 3. Many of these chipsets have a long life, which means new projects > > start on > them > > well after initial product launch. Because of features and security > > concerns, we > > continually upgrade our chipsets to use newer kernel code. This puts an > > extra > variable. > > > > Regards, > > > > Tim Lewis > > CTO, Insyde Software > > www.insyde.com<http://www.insyde.com> > > > > From: Mudusuru, Giri P [mailto:[email protected]] > > Sent: Tuesday, May 03, 2016 4:07 PM > > To: Tim Lewis <[email protected]<mailto:[email protected]>>; Yao, > > Jiewen > > <[email protected]<mailto:[email protected]>>; edk2- > > [email protected]<mailto:[email protected]> > > Cc: Rangarajan, Ravi P > > <[email protected]<mailto:[email protected]>>; > > Yarlagadda, Satya > P > > <[email protected]<mailto:[email protected]>>; > > Zimmer, Vincent > > <[email protected]<mailto:[email protected]>>; Mudusuru, Giri > > P > > <[email protected]<mailto:[email protected]>> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > Hi Tim, > > Yes we considered creating a separate package name along with moving the > > package > under > > Deprecated folder and just leave it in the UDK2015 branch. > > > > There are pro's and con's for all options. > > > > Can you please help me understand on why multi-workspace is not an option? > > > > Thanks, > > -Giri > > > > From: Tim Lewis [mailto:[email protected]] > > Sent: Tuesday, May 03, 2016 8:47 AM > > To: Mudusuru, Giri P > > <[email protected]<mailto:[email protected]>>; > > Yao, Jiewen <[email protected]<mailto:[email protected]>>; edk2- > > [email protected]<mailto:[email protected]> > > Cc: Rangarajan, Ravi P > > <[email protected]<mailto:[email protected]>>; > > Yarlagadda, Satya > P > > <[email protected]<mailto:[email protected]>>; > > Zimmer, Vincent > > <[email protected]<mailto:[email protected]>>; Mudusuru, Giri > > P > > <[email protected]<mailto:[email protected]>> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > > > Giri , > > > > I suggest you create a new package name, rather than use the same one with > > different > > semantics. > > > > > > > > Multiple workspaces is not ah option for us. > > > > > > > > Tim > > > > > > > > Sent from my Windows 10 phone > > > > > > > > From: Mudusuru, Giri P<mailto:[email protected]> > > Sent: Tuesday, May 3, 2016 8:07 AM > > To: Tim Lewis<mailto:[email protected]>; Yao, > > Jiewen<mailto:[email protected]>; > > [email protected]<mailto:[email protected]> > > Cc: Rangarajan, Ravi P<mailto:[email protected]>; Yarlagadda, > > Satya > > P<mailto:[email protected]>; Zimmer, > > Vincent<mailto:[email protected]>; Mudusuru, Giri > > P<mailto:[email protected]> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > > > Hi Tim, > > The main reason to deprecate the v1.x support was to reduce the complexity > > and focus > on > > v2.0 going forward. At the same time as Jiewen mentioned below our plan is > > to > continue > > maintaining v1.1 in the UDK2015 branch for the existing chipsets. > > > > Understand your usage with single tree. For this usage, suggest to use the > > multi- > > workspace capability so you can have both in a single tree. > > > > Thanks, > > -Giri > > > > -----Original Message----- > > From: Tim Lewis [mailto:[email protected]] > > Sent: Tuesday, May 3, 2016 4:48 AM > > To: Yao, Jiewen <[email protected]<mailto:[email protected]>>; edk2- > > [email protected]<mailto:[email protected]> > > Cc: Mudusuru, Giri P > > <[email protected]<mailto:[email protected]>>; > > Rangarajan, Ravi P > > <[email protected]<mailto:[email protected]>> > > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > > FspInitPei to > > FspmWrapperPeim and FspsWrapperPeim. > > > > Is this really a good idea, dropping 1.1 support? We don't maintain two > > separate > trees > > for our products, just 1. There are several chipsets which have long life > > that will > > need additional features, but are only 1.1 > > > > Tim > > > > -----Original Message----- > > From: edk2-devel [mailto:[email protected]] On Behalf Of > > Jiewen Yao > > Sent: Monday, May 02, 2016 9:51 PM > > To: [email protected]<mailto:[email protected]> > > Cc: Giri P Mudusuru > > <[email protected]<mailto:[email protected]>>; > Ravi > > P Rangarajan > > <[email protected]<mailto:[email protected]>> > > Subject: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split FspInitPei > > to > > FspmWrapperPeim and FspsWrapperPeim. > > > > Update FSP to follow: > > https://firmware.intel.com/sites/default/files/FSP_EAS_v2.0_Draft%20External.pdf > > > > Align to FSP2.0. > > Remove 1.1 support from FspInit. > > Split it into FspmWrapperPeim and FspsWrapperPeim, so they can build in > > different FV. > > > > The FSP1.1 compatibility is NOT maintained. > > > > The new Intel platform will follow FSP2.0. > > The old platform can either use an old EDK branch, > > or move FSP1.1 support to platform directory. > > > > Cc: Giri P Mudusuru > > <[email protected]<mailto:[email protected]>> > > Cc: Maurice Ma <[email protected]<mailto:[email protected]>> > > Cc: Ravi P Rangarajan > <[email protected]<mailto:[email protected]>> > > Contributed-under: TianoCore Contribution Agreement 1.0 > > Signed-off-by: Jiewen Yao > > <[email protected]<mailto:[email protected]>> > > Reviewed-by: Giri P Mudusuru > > <[email protected]<mailto:[email protected]>> > > Reviewed-by: Maurice Ma <[email protected]<mailto:[email protected]>> > > Reviewed-by: Ravi P Rangarajan > > <[email protected]<mailto:[email protected]>> > > --- > > IntelFspWrapperPkg/FspInitPei/FindPeiCore.c | 199 ------------ > > IntelFspWrapperPkg/FspInitPei/FspInitPei.c | 66 ---- > > IntelFspWrapperPkg/FspInitPei/FspInitPei.h | 64 ---- > > IntelFspWrapperPkg/FspInitPei/FspInitPei.inf | 90 ------ > > IntelFspWrapperPkg/FspInitPei/FspInitPeiV1.c | 182 ----------- > > IntelFspWrapperPkg/FspInitPei/FspInitPeiV2.c | 338 > > -------------------- > > IntelFspWrapperPkg/FspInitPei/FspNotifyS3.c | 80 ----- > > IntelFspWrapperPkg/FspInitPei/SecMain.c | 310 > > ------------------ > > IntelFspWrapperPkg/FspInitPei/SecMain.h | 116 ------- > > IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c | 161 ++++++++++ > > IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf | 77 +++++ > > IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c | 313 > > ++++++++++++++++++ > > IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf | 79 +++++ > > 13 files changed, 630 insertions(+), 1445 deletions(-) > > > > diff --git a/IntelFspWrapperPkg/FspInitPei/FindPeiCore.c > > b/IntelFspWrapperPkg/FspInitPei/FindPeiCore.c > > deleted file mode 100644 > > index ce003d0..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/FindPeiCore.c > > +++ /dev/null > > @@ -1,199 +0,0 @@ > > -/** @file > > - Locate the entry point for the PEI Core > > - > > - Copyright (c) 2014, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > -#include <PiPei.h> > > -#include <Library/BaseLib.h> > > -#include <Library/PeCoffGetEntryPointLib.h> > > - > > -#include "SecMain.h" > > - > > -/** > > - Find core image base. > > - > > - @param[in] BootFirmwareVolumePtr Point to the boot firmware volume. > > - @param[out] SecCoreImageBase The base address of the SEC core > > image. > > - @param[out] PeiCoreImageBase The base address of the PEI core > > image. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -FindImageBase ( > > - IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, > > - OUT EFI_PHYSICAL_ADDRESS *SecCoreImageBase, > > - OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase > > - ) > > -{ > > - EFI_PHYSICAL_ADDRESS CurrentAddress; > > - EFI_PHYSICAL_ADDRESS EndOfFirmwareVolume; > > - EFI_FFS_FILE_HEADER *File; > > - UINT32 Size; > > - EFI_PHYSICAL_ADDRESS EndOfFile; > > - EFI_COMMON_SECTION_HEADER *Section; > > - EFI_PHYSICAL_ADDRESS EndOfSection; > > - > > - *SecCoreImageBase = 0; > > - *PeiCoreImageBase = 0; > > - > > - CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) BootFirmwareVolumePtr; > > - EndOfFirmwareVolume = CurrentAddress + BootFirmwareVolumePtr->FvLength; > > - > > - // > > - // Loop through the FFS files in the Boot Firmware Volume > > - // > > - for (EndOfFile = CurrentAddress + BootFirmwareVolumePtr->HeaderLength; ; > > ) { > > - > > - CurrentAddress = (EndOfFile + 7) & 0xfffffffffffffff8ULL; > > - if (CurrentAddress > EndOfFirmwareVolume) { > > - return EFI_NOT_FOUND; > > - } > > - > > - File = (EFI_FFS_FILE_HEADER*)(UINTN) CurrentAddress; > > - if (IS_FFS_FILE2 (File)) { > > - Size = FFS_FILE2_SIZE (File); > > - if (Size <= 0x00FFFFFF) { > > - return EFI_NOT_FOUND; > > - } > > - } else { > > - Size = FFS_FILE_SIZE (File); > > - if (Size < sizeof (EFI_FFS_FILE_HEADER)) { > > - return EFI_NOT_FOUND; > > - } > > - } > > - > > - EndOfFile = CurrentAddress + Size; > > - if (EndOfFile > EndOfFirmwareVolume) { > > - return EFI_NOT_FOUND; > > - } > > - > > - // > > - // Look for SEC Core / PEI Core files > > - // > > - if (File->Type != EFI_FV_FILETYPE_SECURITY_CORE && > > - File->Type != EFI_FV_FILETYPE_PEI_CORE) { > > - continue; > > - } > > - > > - // > > - // Loop through the FFS file sections within the FFS file > > - // > > - if (IS_FFS_FILE2 (File)) { > > - EndOfSection = (EFI_PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) File + > > sizeof > > (EFI_FFS_FILE_HEADER2)); > > - } else { > > - EndOfSection = (EFI_PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) File + > > sizeof > > (EFI_FFS_FILE_HEADER)); > > - } > > - for (;;) { > > - CurrentAddress = (EndOfSection + 3) & 0xfffffffffffffffcULL; > > - Section = (EFI_COMMON_SECTION_HEADER*)(UINTN) CurrentAddress; > > - > > - if (IS_SECTION2 (Section)) { > > - Size = SECTION2_SIZE (Section); > > - if (Size <= 0x00FFFFFF) { > > - return EFI_NOT_FOUND; > > - } > > - } else { > > - Size = SECTION_SIZE (Section); > > - if (Size < sizeof (EFI_COMMON_SECTION_HEADER)) { > > - return EFI_NOT_FOUND; > > - } > > - } > > - > > - EndOfSection = CurrentAddress + Size; > > - if (EndOfSection > EndOfFile) { > > - return EFI_NOT_FOUND; > > - } > > - > > - // > > - // Look for executable sections > > - // > > - if (Section->Type == EFI_SECTION_PE32 || Section->Type == > > EFI_SECTION_TE) { > > - if (File->Type == EFI_FV_FILETYPE_SECURITY_CORE) { > > - if (IS_SECTION2 (Section)) { > > - *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) > > Section + > sizeof > > (EFI_COMMON_SECTION_HEADER2)); > > - } else { > > - *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) > > Section + > sizeof > > (EFI_COMMON_SECTION_HEADER)); > > - } > > - } else { > > - if (IS_SECTION2 (Section)) { > > - *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) > > Section + > sizeof > > (EFI_COMMON_SECTION_HEADER2)); > > - } else { > > - *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) > > Section + > sizeof > > (EFI_COMMON_SECTION_HEADER)); > > - } > > - } > > - break; > > - } > > - } > > - > > - // > > - // Both SEC Core and PEI Core images found > > - // > > - if (*SecCoreImageBase != 0 && *PeiCoreImageBase != 0) { > > - return EFI_SUCCESS; > > - } > > - } > > -} > > - > > -/** > > - Find and return Pei Core entry point. > > - > > - It also find SEC and PEI Core file debug inforamtion. It will report > > them if > > - remote debug is enabled. > > - > > - @param[in] BootFirmwareVolumePtr Point to the boot firmware volume. > > - @param[out] PeiCoreEntryPoint The entry point of the PEI core. > > - > > -**/ > > -VOID > > -EFIAPI > > -FindAndReportEntryPoints ( > > - IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, > > - OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint > > - ) > > -{ > > - EFI_STATUS Status; > > - EFI_PHYSICAL_ADDRESS SecCoreImageBase; > > - EFI_PHYSICAL_ADDRESS PeiCoreImageBase; > > - PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; > > - > > - // > > - // Find SEC Core and PEI Core image base > > - // > > - Status = FindImageBase (BootFirmwareVolumePtr, &SecCoreImageBase, > > &PeiCoreImageBase); > > - ASSERT_EFI_ERROR (Status); > > - > > - ZeroMem ((VOID *) &ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT)); > > - // > > - // Report SEC Core debug information when remote debug is enabled > > - // > > - ImageContext.ImageAddress = SecCoreImageBase; > > - ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) > > ImageContext.ImageAddress); > > - PeCoffLoaderRelocateImageExtraAction (&ImageContext); > > - > > - // > > - // Report PEI Core debug information when remote debug is enabled > > - // > > - ImageContext.ImageAddress = PeiCoreImageBase; > > - ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) > > ImageContext.ImageAddress); > > - PeCoffLoaderRelocateImageExtraAction (&ImageContext); > > - > > - // > > - // Find PEI Core entry point > > - // > > - Status = PeCoffLoaderGetEntryPoint ((VOID *) (UINTN) PeiCoreImageBase, > > (VOID**) > > PeiCoreEntryPoint); > > - if (EFI_ERROR (Status)) { > > - *PeiCoreEntryPoint = 0; > > - } > > - > > - return; > > -} > > - > > diff --git a/IntelFspWrapperPkg/FspInitPei/FspInitPei.c > > b/IntelFspWrapperPkg/FspInitPei/FspInitPei.c > > deleted file mode 100644 > > index 48a0307..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/FspInitPei.c > > +++ /dev/null > > @@ -1,66 +0,0 @@ > > -/** @file > > - This PEIM initialize FSP. > > - > > - Copyright (c) 2014 - 2015, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > - > > -#include "FspInitPei.h" > > - > > -/** > > - This is the entrypoint of PEIM > > - > > - @param[in] FileHandle Handle of the file being invoked. > > - @param[in] PeiServices Describes the list of possible PEI Services. > > - > > - @retval EFI_SUCCESS if it completed successfully. > > -**/ > > -EFI_STATUS > > -EFIAPI > > -FspPeiEntryPoint ( > > - IN EFI_PEI_FILE_HANDLE FileHandle, > > - IN CONST EFI_PEI_SERVICES **PeiServices > > - ) > > -{ > > - FSP_INFO_HEADER *FspHeader; > > - UINT8 PcdFspApiVersion; > > - > > - DEBUG ((DEBUG_INFO, "FspPeiEntryPoint\n")); > > - PcdFspApiVersion = 1; > > - > > - FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase)); > > - DEBUG ((DEBUG_INFO, "FspHeader - 0x%x\n", FspHeader)); > > - if (FspHeader == NULL) { > > - return EFI_DEVICE_ERROR; > > - } > > - > > - ASSERT (FspHeader->TempRamInitEntryOffset != 0); > > - ASSERT (FspHeader->FspInitEntryOffset != 0); > > - ASSERT (FspHeader->NotifyPhaseEntryOffset != 0); > > - > > - if ((PcdGet8 (PcdFspApiVersion) >= 2) && > > - (FspHeader->HeaderRevision >= FSP_HEADER_REVISION_2) && > > - (FspHeader->ApiEntryNum >= 6) ) { > > - ASSERT (FspHeader->FspMemoryInitEntryOffset != 0); > > - ASSERT (FspHeader->TempRamExitEntryOffset != 0); > > - ASSERT (FspHeader->FspSiliconInitEntryOffset != 0); > > - PcdFspApiVersion = PcdGet8 (PcdFspApiVersion); > > - } > > - DEBUG ((DEBUG_INFO, "PcdFspApiVersion - 0x%x\n", PcdFspApiVersion)); > > - > > - if (PcdFspApiVersion == 1) { > > - PeiFspInitV1 (FspHeader); > > - } else { > > - PeiFspInitV2 (FspHeader); > > - } > > - > > - return EFI_SUCCESS; > > -} > > diff --git a/IntelFspWrapperPkg/FspInitPei/FspInitPei.h > > b/IntelFspWrapperPkg/FspInitPei/FspInitPei.h > > deleted file mode 100644 > > index 6d70f0c..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/FspInitPei.h > > +++ /dev/null > > @@ -1,64 +0,0 @@ > > -/** @file > > - This is PEIM header file. > > - > > - Copyright (c) 2014 - 2015, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > -#ifndef _FSP_INIT_PEI_H_ > > -#define _FSP_INIT_PEI_H_ > > - > > -#include <PiPei.h> > > - > > -#include <Library/PeimEntryPoint.h> > > -#include <Library/PeiServicesLib.h> > > -#include <Library/PeiServicesTablePointerLib.h> > > -#include <Library/BaseLib.h> > > -#include <Library/DebugLib.h> > > -#include <Library/BaseMemoryLib.h> > > -#include <Library/HobLib.h> > > -#include <Library/PcdLib.h> > > -#include <Library/FspPlatformInfoLib.h> > > -#include <Library/FspPlatformSecLib.h> > > -#include <Library/FspHobProcessLib.h> > > -#include <Library/FspApiLib.h> > > - > > -#include <Ppi/FspInitDone.h> > > -#include <Ppi/EndOfPeiPhase.h> > > -#include <Ppi/MemoryDiscovered.h> > > -#include <Ppi/TemporaryRamDone.h> > > - > > -extern EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc; > > - > > -/** > > - Do FSP initialization based on FspApi version 1. > > - > > - @param[in] FspHeader FSP header pointer. > > - > > - @return FSP initialization status. > > -**/ > > -EFI_STATUS > > -PeiFspInitV1 ( > > - IN FSP_INFO_HEADER *FspHeader > > - ); > > - > > -/** > > - Do FSP initialization based on FspApi version 2. > > - > > - @param[in] FspHeader FSP header pointer. > > - > > - @return FSP initialization status. > > -**/ > > -EFI_STATUS > > -PeiFspInitV2 ( > > - IN FSP_INFO_HEADER *FspHeader > > - ); > > - > > -#endif > > diff --git a/IntelFspWrapperPkg/FspInitPei/FspInitPei.inf > > b/IntelFspWrapperPkg/FspInitPei/FspInitPei.inf > > deleted file mode 100644 > > index cde101b..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/FspInitPei.inf > > +++ /dev/null > > @@ -1,90 +0,0 @@ > > -## @file > > -# FSP PEI Module > > -# > > -# This PEIM initialize FSP. > > -# In FSP API V1 mode, it will be invoked twice by pei core. In 1st entry, > > it will > > -# call FspInit API. In 2nd entry, it will parse the hoblist from fsp and > > report > > -# them into pei core. > > -# In FSP API V2 mode, it will be invoked only once. It will call > > FspMemoryInit API, > > -# register TemporaryRamDonePpi to call TempRamExit API, and register > > MemoryDiscoveredPpi > > -# notify to call FspSiliconInit API. > > -# > > -# Copyright (c) 2014 - 2015, 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 distribution. The full text of the license may > > be found at > > -# http://opensource.org/licenses/bsd-license.php. > > -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > -# > > -## > > - > > -[Defines] > > - INF_VERSION = 0x00010005 > > - BASE_NAME = FspInitPeim > > - FILE_GUID = BC59E2E1-7492-4031-806E-C48DCCC3A026 > > - MODULE_TYPE = PEIM > > - VERSION_STRING = 1.0 > > - ENTRY_POINT = FspPeiEntryPoint > > - > > -# > > -# The following information is for reference only and not required by the > > build > tools. > > -# > > -# VALID_ARCHITECTURES = IA32 > > -# > > - > > -[Sources] > > - FspInitPei.c > > - FspInitPei.h > > - FspInitPeiV1.c > > - FspInitPeiV2.c > > - FspNotifyS3.c > > - SecMain.c > > - SecMain.h > > - FindPeiCore.c > > - > > -[Packages] > > - MdePkg/MdePkg.dec > > - MdeModulePkg/MdeModulePkg.dec > > - UefiCpuPkg/UefiCpuPkg.dec > > - IntelFspPkg/IntelFspPkg.dec > > - IntelFspWrapperPkg/IntelFspWrapperPkg.dec > > - > > -[LibraryClasses] > > - PeimEntryPoint > > - PeiServicesLib > > - PeiServicesTablePointerLib > > - BaseLib > > - BaseMemoryLib > > - DebugLib > > - HobLib > > - FspPlatformInfoLib > > - FspHobProcessLib > > - FspPlatformSecLib > > - DebugAgentLib > > - UefiCpuLib > > - PeCoffGetEntryPointLib > > - PeCoffExtraActionLib > > - FspApiLib > > - > > -[Ppis] > > - gTopOfTemporaryRamPpiGuid ## PRODUCES > > - gFspInitDonePpiGuid ## PRODUCES > > - gEfiEndOfPeiSignalPpiGuid ## PRODUCES > > - gEfiTemporaryRamDonePpiGuid ## PRODUCES > > - gEfiPeiMemoryDiscoveredPpiGuid ## PRODUCES > > - > > -[FixedPcd] > > - gFspWrapperTokenSpaceGuid.PcdSecCoreMaxPpiSupported ## CONSUMES > > - > > -[Pcd] > > - gFspWrapperTokenSpaceGuid.PcdPeiTemporaryRamStackSize ## CONSUMES > > - gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase ## CONSUMES > > - gFspWrapperTokenSpaceGuid.PcdFlashFvSecondFspBase ## CONSUMES > > - gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize ## CONSUMES > > - gFspWrapperTokenSpaceGuid.PcdMaxUpdRegionSize ## CONSUMES > > - gFspWrapperTokenSpaceGuid.PcdFspApiVersion ## CONSUMES > > - > > -[Depex] > > - gEfiPeiMasterBootModePpiGuid > > diff --git a/IntelFspWrapperPkg/FspInitPei/FspInitPeiV1.c > > b/IntelFspWrapperPkg/FspInitPei/FspInitPeiV1.c > > deleted file mode 100644 > > index b145b50..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/FspInitPeiV1.c > > +++ /dev/null > > @@ -1,182 +0,0 @@ > > -/** @file > > - In FSP API V1 mode, it will be invoked twice by pei core. In 1st entry, > > it will > > - call FspInit API. In 2nd entry, it will parse the hoblist from fsp and > > report > > - them into pei core. > > - > > - Copyright (c) 2015, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > - > > -#include "FspInitPei.h" > > - > > -/** > > - FSP Init continuation function. > > - Control will be returned to this callback function after FspInit API > > call. > > - > > - @param[in] Status Status of the FSP INIT API > > - @param[in] HobListPtr Pointer to the HOB data structure defined in the > > PI > > specification. > > - > > -**/ > > -VOID > > -ContinuationFunc ( > > - IN EFI_STATUS Status, > > - IN VOID *HobListPtr > > - ) > > -{ > > - EFI_BOOT_MODE BootMode; > > - UINT64 StackSize; > > - EFI_PHYSICAL_ADDRESS StackBase; > > - > > - DEBUG ((DEBUG_INFO, "ContinuationFunc - %r\n", Status)); > > - DEBUG ((DEBUG_INFO, "HobListPtr - 0x%x\n", HobListPtr)); > > - > > - if (Status != EFI_SUCCESS) { > > - CpuDeadLoop (); > > - } > > - > > - // > > - // Can not call any PeiServices > > - // > > - BootMode = GetBootMode (); > > - > > - GetStackInfo (BootMode, TRUE, &StackSize, &StackBase); > > - DEBUG ((DEBUG_INFO, "StackBase - 0x%x\n", StackBase)); > > - DEBUG ((DEBUG_INFO, "StackSize - 0x%x\n", StackSize)); > > - CallPeiCoreEntryPoint ( > > - HobListPtr, > > - (VOID *)(UINTN)StackBase, > > - (VOID *)(UINTN)(StackBase + StackSize) > > - ); > > -} > > - > > -/** > > - Call FspInit API. > > - > > - @param[in] FspHeader FSP header pointer. > > -**/ > > -VOID > > -PeiFspInit ( > > - IN FSP_INFO_HEADER *FspHeader > > - ) > > -{ > > - FSP_INIT_PARAMS FspInitParams; > > - FSP_INIT_RT_COMMON_BUFFER FspRtBuffer; > > - UINT8 FspUpdRgn[FixedPcdGet32 (PcdMaxUpdRegionSize)]; > > - UINT32 UpdRegionSize; > > - EFI_BOOT_MODE BootMode; > > - UINT64 StackSize; > > - EFI_PHYSICAL_ADDRESS StackBase; > > - EFI_STATUS Status; > > - > > - DEBUG ((DEBUG_INFO, "PeiFspInit enter\n")); > > - > > - PeiServicesGetBootMode (&BootMode); > > - DEBUG ((DEBUG_INFO, "BootMode - 0x%x\n", BootMode)); > > - > > - GetStackInfo (BootMode, FALSE, &StackSize, &StackBase); > > - DEBUG ((DEBUG_INFO, "StackBase - 0x%x\n", StackBase)); > > - DEBUG ((DEBUG_INFO, "StackSize - 0x%x\n", StackSize)); > > - > > - ZeroMem (&FspRtBuffer, sizeof(FspRtBuffer)); > > - FspRtBuffer.StackTop = (UINT32 *)(UINTN)(StackBase + StackSize); > > - > > - FspRtBuffer.BootMode = BootMode; > > - > > - /* Platform override any UPD configs */ > > - UpdRegionSize = GetUpdRegionSize(); > > - DEBUG ((DEBUG_INFO, "UpdRegionSize - 0x%x\n", UpdRegionSize)); > > - DEBUG ((DEBUG_INFO, "sizeof(FspUpdRgn) - 0x%x\n", sizeof(FspUpdRgn))); > > - ASSERT(sizeof(FspUpdRgn) >= UpdRegionSize); > > - ZeroMem (FspUpdRgn, UpdRegionSize); > > - FspRtBuffer.UpdDataRgnPtr = UpdateFspUpdConfigs (FspUpdRgn); > > - FspRtBuffer.BootLoaderTolumSize = 0; > > - > > - ZeroMem (&FspInitParams, sizeof(FspInitParams)); > > - FspInitParams.NvsBufferPtr = GetNvsBuffer (); > > - DEBUG ((DEBUG_INFO, "NvsBufferPtr - 0x%x\n", > > FspInitParams.NvsBufferPtr)); > > - FspInitParams.RtBufferPtr = (VOID *)&FspRtBuffer; > > - FspInitParams.ContinuationFunc = (CONTINUATION_PROC)ContinuationFunc; > > - > > - SaveSecContext (GetPeiServicesTablePointer ()); > > - > > - DEBUG ((DEBUG_INFO, "FspInitParams - 0x%x\n", &FspInitParams)); > > - DEBUG ((DEBUG_INFO, " NvsBufferPtr - 0x%x\n", > > FspInitParams.NvsBufferPtr)); > > - DEBUG ((DEBUG_INFO, " RtBufferPtr - 0x%x\n", > > FspInitParams.RtBufferPtr)); > > - DEBUG ((DEBUG_INFO, " StackTop - 0x%x\n", > > FspRtBuffer.StackTop)); > > - DEBUG ((DEBUG_INFO, " BootMode - 0x%x\n", > > FspRtBuffer.BootMode)); > > - DEBUG ((DEBUG_INFO, " UpdDataRgnPtr - 0x%x\n", > > FspRtBuffer.UpdDataRgnPtr)); > > - DEBUG ((DEBUG_INFO, " ContinuationFunc - 0x%x\n", > FspInitParams.ContinuationFunc)); > > - > > - Status = CallFspInit (FspHeader, &FspInitParams); > > - // > > - // Should never return > > - // > > - DEBUG((DEBUG_ERROR, "FSP Init failed, status: 0x%x\n", Status)); > > - CpuDeadLoop (); > > -} > > - > > -/** > > - Do FSP initialization based on FspApi version 1. > > - > > - @param[in] FspHeader FSP header pointer. > > - > > - @return FSP initialization status. > > -**/ > > -EFI_STATUS > > -PeiFspInitV1 ( > > - IN FSP_INFO_HEADER *FspHeader > > - ) > > -{ > > - EFI_STATUS Status; > > - FSP_INIT_DONE_PPI *FspInitDone; > > - VOID *FspHobList; > > - EFI_BOOT_MODE BootMode; > > - > > - Status = PeiServicesLocatePpi ( > > - &gFspInitDonePpiGuid, > > - 0, > > - NULL, > > - (VOID **) &FspInitDone > > - ); > > - if (EFI_ERROR (Status)) { > > - // > > - // 1st entry > > - // > > - DEBUG ((DEBUG_INFO, "1st entry\n")); > > - > > - PeiFspInit (FspHeader); > > - // > > - // Never return here, for FspApi version 1. > > - // > > - CpuDeadLoop (); > > - } else { > > - // > > - // 2nd entry for FspApi version 1 only. > > - // > > - DEBUG ((DEBUG_INFO, "2nd entry\n")); > > - > > - Status = FspInitDone->GetFspHobList (GetPeiServicesTablePointer (), > > FspInitDone, > > &FspHobList); > > - ASSERT_EFI_ERROR (Status); > > - DEBUG ((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList)); > > - FspHobProcess (FspHobList); > > - > > - // > > - // Register EndOfPei Notify for S3 to run FspNotifyPhase > > - // > > - PeiServicesGetBootMode (&BootMode); > > - if (BootMode == BOOT_ON_S3_RESUME) { > > - Status = PeiServicesNotifyPpi (&mS3EndOfPeiNotifyDesc); > > - ASSERT_EFI_ERROR (Status); > > - } > > - } > > - > > - return EFI_SUCCESS; > > -} > > \ No newline at end of file > > diff --git a/IntelFspWrapperPkg/FspInitPei/FspInitPeiV2.c > > b/IntelFspWrapperPkg/FspInitPei/FspInitPeiV2.c > > deleted file mode 100644 > > index 50b150a..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/FspInitPeiV2.c > > +++ /dev/null > > @@ -1,338 +0,0 @@ > > -/** @file > > - In FSP API V2 mode, it will be invoked only once. It will call > > FspMemoryInit API, > > - register TemporaryRamDonePpi to call TempRamExit API, and register > > MemoryDiscoveredPpi > > - notify to call FspSiliconInit API. > > - > > - Copyright (c) 2015, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > - > > -#include "FspInitPei.h" > > - > > -/** > > - Return Hob list produced by FSP. > > - > > - @param[in] PeiServices The pointer to the PEI Services Table. > > - @param[in] This The pointer to this instance of this PPI. > > - @param[out] FspHobList The pointer to Hob list produced by FSP. > > - > > - @return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > > -**/ > > -EFI_STATUS > > -EFIAPI > > -FspInitDoneGetFspHobListV2 ( > > - IN CONST EFI_PEI_SERVICES **PeiServices, > > - IN FSP_INIT_DONE_PPI *This, > > - OUT VOID **FspHobList > > - ); > > - > > -FSP_INIT_DONE_PPI mFspInitDonePpiV2 = { > > - FspInitDoneGetFspHobListV2 > > -}; > > - > > -EFI_PEI_PPI_DESCRIPTOR mPeiFspInitDonePpiV2 = { > > - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, > > - &gFspInitDonePpiGuid, > > - &mFspInitDonePpiV2 > > -}; > > - > > -/** > > - This function is called after PEI core discover memory and finish > > migration. > > - > > - @param[in] PeiServices Pointer to PEI Services Table. > > - @param[in] NotifyDesc Pointer to the descriptor for the Notification > > event > that > > - caused this function to execute. > > - @param[in] Ppi Pointer to the PPI data associated with this > > function. > > - > > - @retval EFI_STATUS Always return EFI_SUCCESS > > -**/ > > -EFI_STATUS > > -EFIAPI > > -PeiMemoryDiscoveredNotify ( > > - IN EFI_PEI_SERVICES **PeiServices, > > - IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > - IN VOID *Ppi > > - ); > > - > > -EFI_PEI_NOTIFY_DESCRIPTOR mPeiMemoryDiscoveredNotifyDesc = { > > - (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | > > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), > > - &gEfiPeiMemoryDiscoveredPpiGuid, > > - PeiMemoryDiscoveredNotify > > -}; > > - > > -/** > > - TemporaryRamDone() disables the use of Temporary RAM. If present, this > > service is > > invoked > > - by the PEI Foundation after the EFI_PEI_PERMANANT_MEMORY_INSTALLED_PPI is > installed. > > - > > - @retval EFI_SUCCESS Use of Temporary RAM was disabled. > > - @retval EFI_INVALID_PARAMETER Temporary RAM could not be disabled. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -PeiTemporaryRamDone ( > > - VOID > > - ); > > - > > -EFI_PEI_TEMPORARY_RAM_DONE_PPI mPeiTemporaryRamDonePpi = { > > - PeiTemporaryRamDone > > -}; > > - > > -EFI_PEI_PPI_DESCRIPTOR mPeiTemporaryRamDoneDesc = { > > - (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), > > - &gEfiTemporaryRamDonePpiGuid, > > - &mPeiTemporaryRamDonePpi > > -}; > > - > > -/** > > - Return Hob list produced by FSP. > > - > > - @param[in] PeiServices The pointer to the PEI Services Table. > > - @param[in] This The pointer to this instance of this PPI. > > - @param[out] FspHobList The pointer to Hob list produced by FSP. > > - > > - @return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > > -**/ > > -EFI_STATUS > > -EFIAPI > > -FspInitDoneGetFspHobListV2 ( > > - IN CONST EFI_PEI_SERVICES **PeiServices, > > - IN FSP_INIT_DONE_PPI *This, > > - OUT VOID **FspHobList > > - ) > > -{ > > - EFI_HOB_GUID_TYPE *GuidHob; > > - > > - GuidHob = GetFirstGuidHob (&gFspInitDonePpiGuid); > > - if (GuidHob != NULL) { > > - *FspHobList = *(VOID **)GET_GUID_HOB_DATA (GuidHob); > > - return EFI_SUCCESS; > > - } else { > > - return EFI_NOT_FOUND; > > - } > > -} > > - > > -/** > > - Call FspMemoryInit API. > > - > > - @param[in] FspHeader FSP header pointer. > > - > > - @return Status returned by FspMemoryInit API. > > -**/ > > -EFI_STATUS > > -PeiFspMemoryInit ( > > - IN FSP_INFO_HEADER *FspHeader > > - ) > > -{ > > - FSP_MEMORY_INIT_PARAMS FspMemoryInitParams; > > - FSP_INIT_RT_COMMON_BUFFER FspRtBuffer; > > - UINT8 FspUpdRgn[FixedPcdGet32 (PcdMaxUpdRegionSize)]; > > - UINT32 UpdRegionSize; > > - EFI_BOOT_MODE BootMode; > > - UINT64 StackSize; > > - EFI_PHYSICAL_ADDRESS StackBase; > > - EFI_STATUS Status; > > - VOID *FspHobList; > > - VOID *HobData; > > - > > - DEBUG ((DEBUG_INFO, "PeiFspMemoryInit enter\n")); > > - > > - PeiServicesGetBootMode (&BootMode); > > - DEBUG ((DEBUG_INFO, "BootMode - 0x%x\n", BootMode)); > > - > > - GetStackInfo (BootMode, FALSE, &StackSize, &StackBase); > > - DEBUG ((DEBUG_INFO, "StackBase - 0x%x\n", StackBase)); > > - DEBUG ((DEBUG_INFO, "StackSize - 0x%x\n", StackSize)); > > - > > - ZeroMem (&FspRtBuffer, sizeof(FspRtBuffer)); > > - FspRtBuffer.StackTop = (UINT32 *)(UINTN)(StackBase + StackSize); > > - > > - FspRtBuffer.BootMode = BootMode; > > - > > - /* Platform override any UPD configs */ > > - UpdRegionSize = GetUpdRegionSize(); > > - DEBUG ((DEBUG_INFO, "UpdRegionSize - 0x%x\n", UpdRegionSize)); > > - DEBUG ((DEBUG_INFO, "sizeof(FspUpdRgn) - 0x%x\n", sizeof(FspUpdRgn))); > > - ASSERT(sizeof(FspUpdRgn) >= UpdRegionSize); > > - ZeroMem (FspUpdRgn, UpdRegionSize); > > - FspRtBuffer.UpdDataRgnPtr = UpdateFspUpdConfigs (FspUpdRgn); > > - FspRtBuffer.BootLoaderTolumSize = GetBootLoaderTolumSize (); > > - > > - ZeroMem (&FspMemoryInitParams, sizeof(FspMemoryInitParams)); > > - FspMemoryInitParams.NvsBufferPtr = GetNvsBuffer (); > > - DEBUG ((DEBUG_INFO, "NvsBufferPtr - 0x%x\n", > > FspMemoryInitParams.NvsBufferPtr)); > > - FspMemoryInitParams.RtBufferPtr = (VOID *)&FspRtBuffer; > > - FspHobList = NULL; > > - FspMemoryInitParams.HobListPtr = &FspHobList; > > - > > - DEBUG ((DEBUG_INFO, "FspMemoryInitParams - 0x%x\n", > > &FspMemoryInitParams)); > > - DEBUG ((DEBUG_INFO, " NvsBufferPtr - 0x%x\n", > > FspMemoryInitParams.NvsBufferPtr)); > > - DEBUG ((DEBUG_INFO, " RtBufferPtr - 0x%x\n", > > FspMemoryInitParams.RtBufferPtr)); > > - DEBUG ((DEBUG_INFO, " StackTop - 0x%x\n", > > FspRtBuffer.StackTop)); > > - DEBUG ((DEBUG_INFO, " BootMode - 0x%x\n", > > FspRtBuffer.BootMode)); > > - DEBUG ((DEBUG_INFO, " UpdDataRgnPtr - 0x%x\n", > > FspRtBuffer.UpdDataRgnPtr)); > > - DEBUG ((DEBUG_INFO, " HobListPtr - 0x%x\n", > > FspMemoryInitParams.HobListPtr)); > > - > > - Status = CallFspMemoryInit (FspHeader, &FspMemoryInitParams); > > - DEBUG((DEBUG_INFO, "FspMemoryInit status: 0x%x\n", Status)); > > - ASSERT_EFI_ERROR (Status); > > - > > - DEBUG ((DEBUG_INFO, " HobListPtr (returned) - 0x%x\n", FspHobList)); > > - ASSERT (FspHobList != NULL); > > - > > - FspHobProcessForMemoryResource (FspHobList); > > - > > - // > > - // FspHobList is not complete at this moment. > > - // Save FspHobList pointer to hob, so that it can be got later > > - // > > - HobData = BuildGuidHob ( > > - &gFspInitDonePpiGuid, > > - sizeof (VOID *) > > - ); > > - ASSERT (HobData != NULL); > > - CopyMem (HobData, &FspHobList, sizeof (FspHobList)); > > - > > - return Status; > > -} > > - > > -/** > > - TemporaryRamDone() disables the use of Temporary RAM. If present, this > > service is > > invoked > > - by the PEI Foundation after the EFI_PEI_PERMANANT_MEMORY_INSTALLED_PPI is > installed. > > - > > - @retval EFI_SUCCESS Use of Temporary RAM was disabled. > > - @retval EFI_INVALID_PARAMETER Temporary RAM could not be disabled. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -PeiTemporaryRamDone ( > > - VOID > > - ) > > -{ > > - EFI_STATUS Status; > > - VOID *TempRamExitParam; > > - FSP_INFO_HEADER *FspHeader; > > - > > - FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase)); > > - if (FspHeader == NULL) { > > - return EFI_DEVICE_ERROR; > > - } > > - > > - DEBUG ((DEBUG_INFO, "PeiTemporaryRamDone enter\n")); > > - > > - TempRamExitParam = GetTempRamExitParam (); > > - Status = CallTempRamExit (FspHeader, TempRamExitParam); > > - DEBUG((DEBUG_INFO, "TempRamExit status: 0x%x\n", Status)); > > - ASSERT_EFI_ERROR (Status); > > - > > - return EFI_SUCCESS; > > -} > > - > > -/** > > - This function is called after PEI core discover memory and finish > > migration. > > - > > - @param[in] PeiServices Pointer to PEI Services Table. > > - @param[in] NotifyDesc Pointer to the descriptor for the Notification > > event > that > > - caused this function to execute. > > - @param[in] Ppi Pointer to the PPI data associated with this > > function. > > - > > - @retval EFI_STATUS Always return EFI_SUCCESS > > -**/ > > -EFI_STATUS > > -EFIAPI > > -PeiMemoryDiscoveredNotify ( > > - IN EFI_PEI_SERVICES **PeiServices, > > - IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > - IN VOID *Ppi > > - ) > > -{ > > - EFI_STATUS Status; > > - VOID *FspSiliconInitParam; > > - FSP_INFO_HEADER *FspHeader; > > - VOID *FspHobList; > > - EFI_HOB_GUID_TYPE *GuidHob; > > - > > - if (PcdGet32 (PcdFlashFvSecondFspBase) == 0) { > > - FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase)); > > - } else { > > - FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvSecondFspBase)); > > - } > > - if (FspHeader == NULL) { > > - return EFI_DEVICE_ERROR; > > - } > > - > > - DEBUG ((DEBUG_INFO, "PeiMemoryDiscoveredNotify enter\n")); > > - > > - FspSiliconInitParam = GetFspSiliconInitParam (); > > - Status = CallFspSiliconInit (FspHeader, FspSiliconInitParam); > > - DEBUG((DEBUG_ERROR, "FspSiliconInit status: 0x%x\n", Status)); > > - ASSERT_EFI_ERROR (Status); > > - > > - // > > - // Now FspHobList complete, process it > > - // > > - GuidHob = GetFirstGuidHob (&gFspInitDonePpiGuid); > > - ASSERT (GuidHob != NULL); > > - FspHobList = *(VOID **)GET_GUID_HOB_DATA (GuidHob); > > - DEBUG ((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList)); > > - FspHobProcessForOtherData (FspHobList); > > - > > - // > > - // Install FspInitDonePpi so that any other driver can consume this info. > > - // > > - Status = PeiServicesInstallPpi (&mPeiFspInitDonePpiV2); > > - ASSERT_EFI_ERROR(Status); > > - > > - return EFI_SUCCESS; > > -} > > - > > -/** > > - Do FSP initialization based on FspApi version 2. > > - > > - @param[in] FspHeader FSP header pointer. > > - > > - @return FSP initialization status. > > -**/ > > -EFI_STATUS > > -PeiFspInitV2 ( > > - IN FSP_INFO_HEADER *FspHeader > > - ) > > -{ > > - EFI_STATUS Status; > > - EFI_BOOT_MODE BootMode; > > - > > - Status = PeiFspMemoryInit (FspHeader); > > - ASSERT_EFI_ERROR (Status); > > - > > - // > > - // Install TempramDonePpi to run TempRamExit > > - // > > - Status = PeiServicesInstallPpi (&mPeiTemporaryRamDoneDesc); > > - ASSERT_EFI_ERROR(Status); > > - > > - // > > - // Register MemoryDiscovered Nofity to run FspSiliconInit > > - // > > - Status = PeiServicesNotifyPpi (&mPeiMemoryDiscoveredNotifyDesc); > > - ASSERT_EFI_ERROR (Status); > > - > > - // > > - // Register EndOfPei Notify for S3 to run FspNotifyPhase > > - // > > - PeiServicesGetBootMode (&BootMode); > > - if (BootMode == BOOT_ON_S3_RESUME) { > > - Status = PeiServicesNotifyPpi (&mS3EndOfPeiNotifyDesc); > > - ASSERT_EFI_ERROR (Status); > > - } > > - > > - return EFI_SUCCESS; > > -} > > \ No newline at end of file > > diff --git a/IntelFspWrapperPkg/FspInitPei/FspNotifyS3.c > > b/IntelFspWrapperPkg/FspInitPei/FspNotifyS3.c > > deleted file mode 100644 > > index f784b01..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/FspNotifyS3.c > > +++ /dev/null > > @@ -1,80 +0,0 @@ > > -/** @file > > - In EndOfPei notify, it will call FspNotifyPhase API. > > - > > - Copyright (c) 2014 - 2015, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > - > > -#include "FspInitPei.h" > > - > > -/** > > - This function handles S3 resume task at the end of PEI > > - > > - @param[in] PeiServices Pointer to PEI Services Table. > > - @param[in] NotifyDesc Pointer to the descriptor for the Notification > > event > that > > - caused this function to execute. > > - @param[in] Ppi Pointer to the PPI data associated with this > > function. > > - > > - @retval EFI_STATUS Always return EFI_SUCCESS > > -**/ > > -EFI_STATUS > > -EFIAPI > > -S3EndOfPeiNotify ( > > - IN EFI_PEI_SERVICES **PeiServices, > > - IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > - IN VOID *Ppi > > - ); > > - > > -EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc = { > > - (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | > > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), > > - &gEfiEndOfPeiSignalPpiGuid, > > - S3EndOfPeiNotify > > -}; > > - > > -/** > > - This function handles S3 resume task at the end of PEI > > - > > - @param[in] PeiServices Pointer to PEI Services Table. > > - @param[in] NotifyDesc Pointer to the descriptor for the Notification > > event > that > > - caused this function to execute. > > - @param[in] Ppi Pointer to the PPI data associated with this > > function. > > - > > - @retval EFI_STATUS Always return EFI_SUCCESS > > -**/ > > -EFI_STATUS > > -EFIAPI > > -S3EndOfPeiNotify ( > > - IN EFI_PEI_SERVICES **PeiServices, > > - IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > - IN VOID *Ppi > > - ) > > -{ > > - NOTIFY_PHASE_PARAMS NotifyPhaseParams; > > - EFI_STATUS Status; > > - FSP_INFO_HEADER *FspHeader; > > - > > - FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase)); > > - if (FspHeader == NULL) { > > - return EFI_DEVICE_ERROR; > > - } > > - > > - DEBUG ((DEBUG_INFO, "S3EndOfPeiNotify enter\n")); > > - > > - NotifyPhaseParams.Phase = EnumInitPhaseAfterPciEnumeration; > > - Status = CallFspNotifyPhase (FspHeader, &NotifyPhaseParams); > > - DEBUG((DEBUG_INFO, "FSP S3NotifyPhase AfterPciEnumeration status: > > 0x%x\n", > Status)); > > - > > - NotifyPhaseParams.Phase = EnumInitPhaseReadyToBoot; > > - Status = CallFspNotifyPhase (FspHeader, &NotifyPhaseParams); > > - DEBUG((DEBUG_INFO, "FSP S3NotifyPhase ReadyToBoot status: 0x%x\n", > > Status)); > > - > > - return EFI_SUCCESS; > > -} > > diff --git a/IntelFspWrapperPkg/FspInitPei/SecMain.c > > b/IntelFspWrapperPkg/FspInitPei/SecMain.c > > deleted file mode 100644 > > index 4d0878a..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/SecMain.c > > +++ /dev/null > > @@ -1,310 +0,0 @@ > > -/** @file > > - C functions in SEC > > - > > - Copyright (c) 2014 - 2015, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > - > > -#include "SecMain.h" > > - > > -EFI_PEI_PPI_DESCRIPTOR mPeiSecMainPpi[] = { > > - { > > - EFI_PEI_PPI_DESCRIPTOR_PPI, > > - &gTopOfTemporaryRamPpiGuid, > > - NULL // To be patched later. > > - }, > > - { > > - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, > > - &gFspInitDonePpiGuid, > > - &gFspInitDonePpi > > - }, > > -}; > > - > > -FSP_INIT_DONE_PPI gFspInitDonePpi = { > > - FspInitDoneGetFspHobList > > -}; > > - > > -// > > -// These are IDT entries pointing to 10:FFFFFFE4h. > > -// > > -UINT64 mIdtEntryTemplate = 0xffff8e000010ffe4ULL; > > - > > -/** > > - Caller provided function to be invoked at the end of > > InitializeDebugAgent(). > > - > > - Entry point to the C language phase of SEC. After the SEC assembly > > - code has initialized some temporary memory and set up the stack, > > - the control is transferred to this function. > > - > > - @param[in] Context The first input parameter of > > InitializeDebugAgent(). > > - > > -**/ > > -VOID > > -EFIAPI > > -SecStartupPhase2( > > - IN VOID *Context > > - ); > > - > > - > > -/** > > - > > - Entry point to the C language phase of SEC. After the SEC assembly > > - code has initialized some temporary memory and set up the stack, > > - the control is transferred to this function. > > - > > - @param[in] SizeOfRam Size of the temporary memory available > > for use. > > - @param[in] TempRamBase Base address of tempory ram > > - @param[in] BootFirmwareVolume Base address of the Boot Firmware Volume. > > -**/ > > -VOID > > -EFIAPI > > -SecStartup ( > > - IN UINT32 SizeOfRam, > > - IN UINT32 TempRamBase, > > - IN VOID *BootFirmwareVolume > > - ) > > -{ > > - EFI_SEC_PEI_HAND_OFF SecCoreData; > > - IA32_DESCRIPTOR IdtDescriptor; > > - SEC_IDT_TABLE IdtTableInStack; > > - UINT32 Index; > > - UINT32 PeiStackSize; > > - > > - PeiStackSize = PcdGet32 (PcdPeiTemporaryRamStackSize); > > - if (PeiStackSize == 0) { > > - PeiStackSize = (SizeOfRam >> 1); > > - } > > - > > - ASSERT (PeiStackSize < SizeOfRam); > > - > > - // > > - // Process all libraries constructor function linked to SecCore. > > - // > > - ProcessLibraryConstructorList (); > > - > > - DEBUG ((DEBUG_INFO, "FspPei - SecStartup\n")); > > - > > - // > > - // Initialize floating point operating environment > > - // to be compliant with UEFI spec. > > - // > > - InitializeFloatingPointUnits (); > > - > > - > > - // |-------------------|----> > > - // |Idt Table | > > - // |-------------------| > > - // |PeiService Pointer | PeiStackSize > > - // |-------------------| > > - // | | > > - // | Stack | > > - // |-------------------|----> > > - // | | > > - // | | > > - // | Heap | PeiTemporayRamSize > > - // | | > > - // | | > > - // |-------------------|----> TempRamBase > > - > > - IdtTableInStack.PeiService = 0; > > - for (Index = 0; Index < SEC_IDT_ENTRY_COUNT; Index ++) { > > - CopyMem ((VOID*)&IdtTableInStack.IdtTable[Index], > > (VOID*)&mIdtEntryTemplate, > > sizeof (UINT64)); > > - } > > - > > - IdtDescriptor.Base = (UINTN) &IdtTableInStack.IdtTable; > > - IdtDescriptor.Limit = (UINT16)(sizeof (IdtTableInStack.IdtTable) - 1); > > - > > - AsmWriteIdtr (&IdtDescriptor); > > - > > - // > > - // Update the base address and length of Pei temporary memory > > - // > > - SecCoreData.DataSize = (UINT16) sizeof > > (EFI_SEC_PEI_HAND_OFF); > > - SecCoreData.BootFirmwareVolumeBase = BootFirmwareVolume; > > - SecCoreData.BootFirmwareVolumeSize = (UINTN)(SIZE_4GB - (UINTN) > BootFirmwareVolume); > > - SecCoreData.TemporaryRamBase = (VOID*)(UINTN) TempRamBase; > > - SecCoreData.TemporaryRamSize = SizeOfRam; > > - SecCoreData.PeiTemporaryRamBase = SecCoreData.TemporaryRamBase; > > - SecCoreData.PeiTemporaryRamSize = SizeOfRam - PeiStackSize; > > - SecCoreData.StackBase = (VOID*)(UINTN)(TempRamBase + > > SecCoreData.PeiTemporaryRamSize); > > - SecCoreData.StackSize = PeiStackSize; > > - > > - DEBUG ((DEBUG_INFO, "BootFirmwareVolumeBase - 0x%x\n", > > SecCoreData.BootFirmwareVolumeBase)); > > - DEBUG ((DEBUG_INFO, "BootFirmwareVolumeSize - 0x%x\n", > > SecCoreData.BootFirmwareVolumeSize)); > > - DEBUG ((DEBUG_INFO, "TemporaryRamBase - 0x%x\n", > > SecCoreData.TemporaryRamBase)); > > - DEBUG ((DEBUG_INFO, "TemporaryRamSize - 0x%x\n", > > SecCoreData.TemporaryRamSize)); > > - DEBUG ((DEBUG_INFO, "PeiTemporaryRamBase - 0x%x\n", > > SecCoreData.PeiTemporaryRamBase)); > > - DEBUG ((DEBUG_INFO, "PeiTemporaryRamSize - 0x%x\n", > > SecCoreData.PeiTemporaryRamSize)); > > - DEBUG ((DEBUG_INFO, "StackBase - 0x%x\n", > > SecCoreData.StackBase)); > > - DEBUG ((DEBUG_INFO, "StackSize - 0x%x\n", > > SecCoreData.StackSize)); > > - > > - // > > - // Initialize Debug Agent to support source level debug in SEC/PEI > > phases before > > memory ready. > > - // > > - InitializeDebugAgent (DEBUG_AGENT_INIT_PREMEM_SEC, &SecCoreData, > SecStartupPhase2); > > - > > -} > > - > > -/** > > - This API patch the TopOfTemporaryRam value in SecPpiList. > > - > > - @param[in,out] SecPpiList PPI list to be patched. > > - @param[in] TopOfTemporaryRam The top of Temporary Ram. > > - > > -**/ > > -VOID > > -PatchTopOfTemporaryRamPpi ( > > - IN OUT EFI_PEI_PPI_DESCRIPTOR *SecPpiList, > > - IN VOID *TopOfTemporaryRam > > - ) > > -{ > > - SecPpiList[0].Ppi = TopOfTemporaryRam; > > -} > > - > > -/** > > - Caller provided function to be invoked at the end of > > InitializeDebugAgent(). > > - > > - Entry point to the C language phase of SEC. After the SEC assembly > > - code has initialized some temporary memory and set up the stack, > > - the control is transferred to this function. > > - > > - @param[in] Context The first input parameter of > > InitializeDebugAgent(). > > - > > -**/ > > -VOID > > -EFIAPI > > -SecStartupPhase2( > > - IN VOID *Context > > - ) > > -{ > > - EFI_SEC_PEI_HAND_OFF *SecCoreData; > > - EFI_PEI_PPI_DESCRIPTOR *PpiList; > > - UINT32 Index; > > - EFI_PEI_PPI_DESCRIPTOR > > LocalSecPpiList[sizeof(mPeiSecMainPpi)/sizeof(mPeiSecMainPpi[0])]; > > - EFI_PEI_PPI_DESCRIPTOR > AllSecPpiList[FixedPcdGet32(PcdSecCoreMaxPpiSupported)]; > > - EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint; > > - > > - SecCoreData = (EFI_SEC_PEI_HAND_OFF *) Context; > > - // > > - // Find Pei Core entry point. It will report SEC and Pei Core debug > > information if > > remote debug > > - // is enabled. > > - // > > - FindAndReportEntryPoints ((EFI_FIRMWARE_VOLUME_HEADER *) SecCoreData- > > >BootFirmwareVolumeBase, &PeiCoreEntryPoint); > > - if (PeiCoreEntryPoint == NULL) > > - { > > - CpuDeadLoop (); > > - } > > - > > - CopyMem (LocalSecPpiList, mPeiSecMainPpi, sizeof(mPeiSecMainPpi)); > > - PatchTopOfTemporaryRamPpi (LocalSecPpiList, (VOID *)((UINTN)SecCoreData- > > >TemporaryRamBase + SecCoreData->TemporaryRamSize)); > > - > > - // > > - // Perform platform specific initialization before entering PeiCore. > > - // > > - PpiList = SecPlatformMain (SecCoreData); > > - if (PpiList != NULL) { > > - // > > - // Remove the terminal flag from the terminal Ppi > > - // > > - CopyMem (AllSecPpiList, LocalSecPpiList, sizeof (LocalSecPpiList)); > > - for (Index = 0; Index < PcdGet32 (PcdSecCoreMaxPpiSupported); Index > > ++) { > > - if ((AllSecPpiList[Index].Flags & > > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) == > > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) { > > - break; > > - } > > - } > > - AllSecPpiList[Index].Flags = AllSecPpiList[Index].Flags & > > (~EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST); > > - > > - // > > - // Append the platform additional Ppi list > > - // > > - Index += 1; > > - while (Index < PcdGet32 (PcdSecCoreMaxPpiSupported) && > > - ((PpiList->Flags & EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) != > > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST)) { > > - CopyMem (&AllSecPpiList[Index], PpiList, sizeof > > (EFI_PEI_PPI_DESCRIPTOR)); > > - Index++; > > - PpiList++; > > - } > > - > > - // > > - // Check whether the total Ppis exceeds the max supported Ppi. > > - // > > - if (Index >= PcdGet32 (PcdSecCoreMaxPpiSupported)) { > > - // > > - // the total Ppi is larger than the supported Max > > - // PcdSecCoreMaxPpiSupported can be enlarged to solve it. > > - // > > - CpuDeadLoop (); > > - } else { > > - // > > - // Add the terminal Ppi > > - // > > - CopyMem (&AllSecPpiList[Index], PpiList, sizeof > > (EFI_PEI_PPI_DESCRIPTOR)); > > - } > > - > > - // > > - // Set PpiList to the total Ppi > > - // > > - PpiList = &AllSecPpiList[0]; > > - } else { > > - // > > - // No addition Ppi, PpiList directly point to the common Ppi list. > > - // > > - PpiList = &LocalSecPpiList[0]; > > - } > > - > > - // > > - // Transfer the control to the PEI core > > - // > > - ASSERT (PeiCoreEntryPoint != NULL); > > - (*PeiCoreEntryPoint) (SecCoreData, PpiList); > > - > > - // > > - // Should not come here. > > - // > > - return ; > > -} > > - > > -/** > > - Return Hob list produced by FSP. > > - > > - @param[in] PeiServices The pointer to the PEI Services Table. > > - @param[in] This The pointer to this instance of this PPI. > > - @param[out] FspHobList The pointer to Hob list produced by FSP. > > - > > - @return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > > -**/ > > -EFI_STATUS > > -EFIAPI > > -FspInitDoneGetFspHobList ( > > - IN CONST EFI_PEI_SERVICES **PeiServices, > > - IN FSP_INIT_DONE_PPI *This, > > - OUT VOID **FspHobList > > - ) > > -{ > > - VOID *TopOfTemporaryRamPpi; > > - EFI_STATUS Status; > > - > > - Status = (*PeiServices)->LocatePpi ( > > - PeiServices, > > - &gTopOfTemporaryRamPpiGuid, > > - 0, > > - NULL, > > - (VOID **) &TopOfTemporaryRamPpi > > - ); > > - if (EFI_ERROR (Status)) { > > - return EFI_NOT_FOUND; > > - } > > - > > - *FspHobList = (VOID *)(UINTN)(*(UINT32 *)((UINTN)TopOfTemporaryRamPpi - > > sizeof(UINT32))); > > - > > - return EFI_SUCCESS; > > -} > > - > > diff --git a/IntelFspWrapperPkg/FspInitPei/SecMain.h > > b/IntelFspWrapperPkg/FspInitPei/SecMain.h > > deleted file mode 100644 > > index fc20397..0000000 > > --- a/IntelFspWrapperPkg/FspInitPei/SecMain.h > > +++ /dev/null > > @@ -1,116 +0,0 @@ > > -/** @file > > - Master header file for SecCore. > > - > > - Copyright (c) 2014, 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 distribution. The full text of the license may > > be found at > > - http://opensource.org/licenses/bsd-license.php. > > - > > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > - > > -**/ > > - > > -#ifndef _SEC_CORE_H_ > > -#define _SEC_CORE_H_ > > - > > - > > -#include <PiPei.h> > > - > > -#include <Ppi/TopOfTemporaryRam.h> > > -#include <Ppi/FspInitDone.h> > > - > > -#include <Library/BaseLib.h> > > -#include <Library/DebugLib.h> > > -#include <Library/PcdLib.h> > > -#include <Library/BaseMemoryLib.h> > > -#include <Library/FspPlatformSecLib.h> > > -#include <Library/FspPlatformInfoLib.h> > > -#include <Library/UefiCpuLib.h> > > -#include <Library/PeCoffGetEntryPointLib.h> > > -#include <Library/PeCoffExtraActionLib.h> > > -#include <Library/DebugAgentLib.h> > > - > > -#include <FspApi.h> > > -#include <FspInfoHeader.h> > > - > > -#define SEC_IDT_ENTRY_COUNT 34 > > - > > -typedef struct _SEC_IDT_TABLE { > > - // > > - // Reserved 8 bytes preceding IDT to store EFI_PEI_SERVICES**, since IDT > > base > > - // address should be 8-byte alignment. > > - // Note: For IA32, only the 4 bytes immediately preceding IDT is used to > > store > > - // EFI_PEI_SERVICES** > > - // > > - UINT64 PeiService; > > - UINT64 IdtTable[SEC_IDT_ENTRY_COUNT]; > > -} SEC_IDT_TABLE; > > - > > -/** > > - Entry point to the C language phase of SEC. After the SEC assembly > > - code has initialized some temporary memory and set up the stack, > > - the control is transferred to this function. > > - > > - @param[in] SizeOfRam Size of the temporary memory available > > for use. > > - @param[in] TempRamBase Base address of tempory ram > > - @param[in] BootFirmwareVolume Base address of the Boot Firmware Volume. > > -**/ > > -VOID > > -EFIAPI > > -SecStartup ( > > - IN UINT32 SizeOfRam, > > - IN UINT32 TempRamBase, > > - IN VOID *BootFirmwareVolume > > - ); > > - > > -/** > > - Find and return Pei Core entry point. > > - > > - It also find SEC and PEI Core file debug inforamtion. It will report > > them if > > - remote debug is enabled. > > - > > - @param[in] BootFirmwareVolumePtr Point to the boot firmware volume. > > - @param[out] PeiCoreEntryPoint Point to the PEI core entry point. > > - > > -**/ > > -VOID > > -EFIAPI > > -FindAndReportEntryPoints ( > > - IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, > > - OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint > > - ); > > - > > -/** > > - Autogenerated function that calls the library constructors for all of > > the module's > > - dependent libraries. This function must be called by the SEC Core once > > a stack > has > > - been established. > > - > > -**/ > > -VOID > > -EFIAPI > > -ProcessLibraryConstructorList ( > > - VOID > > - ); > > - > > -/** > > - Return Hob list produced by FSP. > > - > > - @param[in] PeiServices The pointer to the PEI Services Table. > > - @param[in] This The pointer to this instance of this PPI. > > - @param[out] FspHobList The pointer to Hob list produced by FSP. > > - > > - @return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > > -**/ > > -EFI_STATUS > > -EFIAPI > > -FspInitDoneGetFspHobList ( > > - IN CONST EFI_PEI_SERVICES **PeiServices, > > - IN FSP_INIT_DONE_PPI *This, > > - OUT VOID **FspHobList > > - ); > > - > > -extern FSP_INIT_DONE_PPI gFspInitDonePpi; > > - > > -#endif > > diff --git a/IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c > > b/IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c > > new file mode 100644 > > index 0000000..4370fde > > --- /dev/null > > +++ b/IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c > > @@ -0,0 +1,161 @@ > > +/** @file > > + This will be invoked only once. It will call FspMemoryInit API, > > + register TemporaryRamDonePpi to call TempRamExit API, and register > > MemoryDiscoveredPpi > > + notify to call FspSiliconInit API. > > + > > + 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 distribution. The full text of the license may > > be found at > > + http://opensource.org/licenses/bsd-license.php. > > + > > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > + > > +**/ > > + > > + > > +#include <PiPei.h> > > + > > +#include <Library/PeimEntryPoint.h> > > +#include <Library/PeiServicesLib.h> > > +#include <Library/PeiServicesTablePointerLib.h> > > +#include <Library/BaseLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/BaseMemoryLib.h> > > +#include <Library/MemoryAllocationLib.h> > > +#include <Library/HobLib.h> > > +#include <Library/PcdLib.h> > > +#include <Library/TimerLib.h> > > +#include <Library/PerformanceLib.h> > > +#include <Library/FspWrapperPlatformLib.h> > > +#include <Library/FspWrapperHobProcessLib.h> > > +#include <Library/FspWrapperApiLib.h> > > + > > +#include <Ppi/FspSiliconInitDone.h> > > +#include <Ppi/EndOfPeiPhase.h> > > +#include <Ppi/MemoryDiscovered.h> > > +#include <Ppi/SecPlatformInformation.h> > > +#include <Library/PlatformSecLib.h> > > +#include <Library/FspWrapperApiTestLib.h> > > +#include <FspApi.h> > > + > > +extern EFI_GUID gFspHobGuid; > > + > > +/** > > + Call FspMemoryInit API. > > + > > + @return Status returned by FspMemoryInit API. > > +**/ > > +EFI_STATUS > > +PeiFspMemoryInit ( > > + VOID > > + ) > > +{ > > + FSP_INFO_HEADER *FspmHeaderPtr; > > + EFI_STATUS Status; > > + UINT64 TimeStampCounterStart; > > + VOID *FspHobListPtr; > > + VOID *HobData; > > + FSPM_UPD_COMMON *FspmUpdDataPtr; > > + UINTN *SourceData; > > + > > + DEBUG ((DEBUG_INFO, "PeiFspMemoryInit enter\n")); > > + > > + FspHobListPtr = NULL; > > + > > + // > > + // Copy default FSP-M UPD data from Flash > > + // > > + FspmHeaderPtr = (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 > (PcdFspmBaseAddress)); > > + FspmUpdDataPtr = (FSPM_UPD_COMMON *)AllocateZeroPool > > ((UINTN)FspmHeaderPtr- > > >CfgRegionSize); > > + ASSERT (FspmUpdDataPtr != NULL); > > + SourceData = (UINTN *)((UINTN)FspmHeaderPtr->ImageBase + > > (UINTN)FspmHeaderPtr- > > >CfgRegionOffset); > > + CopyMem (FspmUpdDataPtr, SourceData, > > (UINTN)FspmHeaderPtr->CfgRegionSize); > > + > > + DEBUG ((DEBUG_INFO, "FspWrapperPlatformInitPreMem enter\n")); > > + UpdateFspmUpdData ((VOID *)FspmUpdDataPtr); > > + DEBUG ((DEBUG_INFO, " NvsBufferPtr - 0x%x\n", FspmUpdDataPtr- > > >FspmArchUpd.NvsBufferPtr)); > > + DEBUG ((DEBUG_INFO, " StackBase - 0x%x\n", FspmUpdDataPtr- > > >FspmArchUpd.StackBase)); > > + DEBUG ((DEBUG_INFO, " StackSize - 0x%x\n", FspmUpdDataPtr- > > >FspmArchUpd.StackSize)); > > + DEBUG ((DEBUG_INFO, " BootLoaderTolumSize - 0x%x\n", FspmUpdDataPtr- > > >FspmArchUpd.BootLoaderTolumSize)); > > + DEBUG ((DEBUG_INFO, " BootMode - 0x%x\n", FspmUpdDataPtr- > > >FspmArchUpd.BootMode)); > > + DEBUG ((DEBUG_INFO, " HobListPtr - 0x%x\n", &FspHobListPtr)); > > + > > + TimeStampCounterStart = AsmReadTsc (); > > + Status = CallFspMemoryInit (FspmUpdDataPtr, &FspHobListPtr); > > + // @note: Create hobs after memory initialization and not in temp RAM. > > Hence > passing > > the recorded timestamp here > > + PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, > > TimeStampCounterStart, > > 0xD000); > > + PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0xD07F); > > + DEBUG ((DEBUG_INFO, "Total time spent executing FspMemoryInitApi: %d > millisecond\n", > > DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), > > 1000000))); > > + if (EFI_ERROR(Status)) { > > + DEBUG ((DEBUG_ERROR, "ERROR - Failed to execute FspMemoryInitApi(), > > Status = > > %r\n", Status)); > > + } > > + DEBUG((DEBUG_INFO, "FspMemoryInit status: 0x%x\n", Status)); > > + ASSERT_EFI_ERROR (Status); > > + > > + > > + Status = TestFspMemoryInitApiOutput (FspmUpdDataPtr, &FspHobListPtr); > > + if (EFI_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "ERROR - TestFspMemoryInitApiOutput () fail, > > Status = > %r\n", > > Status)); > > + } > > + > > + DEBUG ((DEBUG_INFO, " FspHobListPtr (returned) - 0x%x\n", > > FspHobListPtr)); > > + ASSERT (FspHobListPtr != NULL); > > + > > + PostFspmHobProcess (FspHobListPtr); > > + > > + // > > + // FspHobList is not complete at this moment. > > + // Save FspHobList pointer to hob, so that it can be got later > > + // > > + HobData = BuildGuidHob ( > > + &gFspHobGuid, > > + sizeof (VOID *) > > + ); > > + ASSERT (HobData != NULL); > > + CopyMem (HobData, &FspHobListPtr, sizeof (FspHobListPtr)); > > + > > + return Status; > > +} > > + > > +/** > > + Do FSP initialization. > > + > > + @return FSP initialization status. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +FspmWrapperInit ( > > + VOID > > + ) > > +{ > > + EFI_STATUS Status; > > + > > + Status = PeiFspMemoryInit (); > > + ASSERT_EFI_ERROR (Status); > > + > > + return Status; > > +} > > + > > +/** > > + This is the entrypoint of PEIM > > + > > + @param[in] FileHandle Handle of the file being invoked. > > + @param[in] PeiServices Describes the list of possible PEI Services. > > + > > + @retval EFI_SUCCESS if it completed successfully. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +FspmWrapperPeimEntryPoint ( > > + IN EFI_PEI_FILE_HANDLE FileHandle, > > + IN CONST EFI_PEI_SERVICES **PeiServices > > + ) > > +{ > > + DEBUG((DEBUG_INFO, "FspmWrapperPeimEntryPoint\n")); > > + > > + FspmWrapperInit (); > > + > > + return EFI_SUCCESS; > > +} > > diff --git a/IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf > > b/IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf > > new file mode 100644 > > index 0000000..55b9679 > > --- /dev/null > > +++ b/IntelFspWrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf > > @@ -0,0 +1,77 @@ > > +## @file > > +# FSP-M wrapper PEI Module > > +# > > +# This PEIM initialize FSP. > > +# This will be invoked only once. It will call FspMemoryInit API, > > +# register TemporaryRamDonePpi to call TempRamExit API, and register > > MemoryDiscoveredPpi > > +# notify to call FspSiliconInit API. > > +# > > +# 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 distribution. The full text of the license may > > be found at > > +# http://opensource.org/licenses/bsd-license.php. > > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010017 > > + BASE_NAME = FspmWrapperPeim > > + FILE_GUID = CCD05B01-8C4E-409D-B6D3-BFB82F175C3A > > + VERSION_STRING = 1.0 > > + MODULE_TYPE = PEIM > > + ENTRY_POINT = FspmWrapperPeimEntryPoint > > + > > +# > > +# The following information is for reference only and not required by the > > build > tools. > > +# > > +# VALID_ARCHITECTURES = IA32 > > +# > > + > > +[LibraryClasses] > > + PeimEntryPoint > > + PeiServicesLib > > + PeiServicesTablePointerLib > > + BaseLib > > + BaseMemoryLib > > + MemoryAllocationLib > > + DebugLib > > + HobLib > > + FspWrapperPlatformLib > > + FspWrapperHobProcessLib > > + DebugAgentLib > > + UefiCpuLib > > + PeCoffGetEntryPointLib > > + PeCoffExtraActionLib > > + PerformanceLib > > + TimerLib > > + FspWrapperApiLib > > + FspWrapperApiTestLib > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + UefiCpuPkg/UefiCpuPkg.dec > > + IntelFspPkg/IntelFspPkg.dec > > + IntelFspWrapperPkg/IntelFspWrapperPkg.dec > > + > > +[Pcd] > > + gFspWrapperTokenSpaceGuid.PcdFspmBaseAddress ## CONSUMES > > + > > +[Sources] > > + FspmWrapperPeim.c > > + > > +[Ppis] > > + gTopOfTemporaryRamPpiGuid ## PRODUCES > > + gEfiEndOfPeiSignalPpiGuid ## PRODUCES > > + gEfiPeiMemoryDiscoveredPpiGuid ## PRODUCES > > + > > +[Guids] > > + gFspHobGuid ## PRODUCES ## HOB > > + gFspApiPerformanceGuid ## CONSUMES ## GUID > > + > > +[Depex] > > + gEfiPeiMasterBootModePpiGuid > > diff --git a/IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c > > b/IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c > > new file mode 100644 > > index 0000000..8dfb311 > > --- /dev/null > > +++ b/IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c > > @@ -0,0 +1,313 @@ > > +/** @file > > + This will be invoked only once. It will call FspMemoryInit API, > > + register TemporaryRamDonePpi to call TempRamExit API, and register > > MemoryDiscoveredPpi > > + notify to call FspSiliconInit API. > > + > > + 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 distribution. The full text of the license may > > be found at > > + http://opensource.org/licenses/bsd-license.php. > > + > > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > + > > +**/ > > + > > +#include <PiPei.h> > > + > > +#include <Library/PeimEntryPoint.h> > > +#include <Library/PeiServicesLib.h> > > +#include <Library/PeiServicesTablePointerLib.h> > > +#include <Library/BaseLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/BaseMemoryLib.h> > > +#include <Library/HobLib.h> > > +#include <Library/PcdLib.h> > > +#include <Library/MemoryAllocationLib.h> > > +#include <Library/FspWrapperPlatformLib.h> > > +#include <Library/FspWrapperHobProcessLib.h> > > +#include <Library/TimerLib.h> > > +#include <Library/PerformanceLib.h> > > +#include <Library/FspWrapperApiLib.h> > > + > > +#include <Ppi/FspSiliconInitDone.h> > > +#include <Ppi/EndOfPeiPhase.h> > > +#include <Ppi/MemoryDiscovered.h> > > +#include <Ppi/TemporaryRamDone.h> > > +#include <Ppi/SecPlatformInformation.h> > > +#include <Library/PlatformSecLib.h> > > +#include <Library/FspWrapperApiTestLib.h> > > +#include <FspApi.h> > > + > > +extern EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc; > > +extern EFI_GUID gFspHobGuid; > > + > > +/** > > +This function handles S3 resume task at the end of PEI > > + > > +@param[in] PeiServices Pointer to PEI Services Table. > > +@param[in] NotifyDesc Pointer to the descriptor for the Notification > > event that > > +caused this function to execute. > > +@param[in] Ppi Pointer to the PPI data associated with this > > function. > > + > > +@retval EFI_STATUS Always return EFI_SUCCESS > > +**/ > > +EFI_STATUS > > +EFIAPI > > +S3EndOfPeiNotify( > > + IN EFI_PEI_SERVICES **PeiServices, > > + IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > + IN VOID *Ppi > > + ); > > + > > +EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc = { > > + (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | > > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), > > + &gEfiEndOfPeiSignalPpiGuid, > > + S3EndOfPeiNotify > > +}; > > + > > +/** > > +This function handles S3 resume task at the end of PEI > > + > > +@param[in] PeiServices Pointer to PEI Services Table. > > +@param[in] NotifyDesc Pointer to the descriptor for the Notification > > event that > > +caused this function to execute. > > +@param[in] Ppi Pointer to the PPI data associated with this > > function. > > + > > +@retval EFI_STATUS Always return EFI_SUCCESS > > +**/ > > +EFI_STATUS > > +EFIAPI > > +S3EndOfPeiNotify( > > + IN EFI_PEI_SERVICES **PeiServices, > > + IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > + IN VOID *Ppi > > + ) > > +{ > > + NOTIFY_PHASE_PARAMS NotifyPhaseParams; > > + EFI_STATUS Status; > > + > > + DEBUG((DEBUG_INFO, "S3EndOfPeiNotify enter\n")); > > + > > + NotifyPhaseParams.Phase = EnumInitPhaseAfterPciEnumeration; > > + Status = CallFspNotifyPhase (&NotifyPhaseParams); > > + DEBUG((DEBUG_INFO, "FSP S3NotifyPhase AfterPciEnumeration status: > > 0x%x\n", > Status)); > > + > > + NotifyPhaseParams.Phase = EnumInitPhaseReadyToBoot; > > + Status = CallFspNotifyPhase (&NotifyPhaseParams); > > + DEBUG((DEBUG_INFO, "FSP S3NotifyPhase ReadyToBoot status: 0x%x\n", > > Status)); > > + > > + NotifyPhaseParams.Phase = EnumInitPhaseEndOfFirmware; > > + Status = CallFspNotifyPhase (&NotifyPhaseParams); > > + DEBUG((DEBUG_INFO, "FSP S3NotifyPhase EndOfFirmware status: 0x%x\n", > > Status)); > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** > > +Return Hob list produced by FSP. > > + > > +@param[in] PeiServices The pointer to the PEI Services Table. > > +@param[in] This The pointer to this instance of this PPI. > > +@param[out] FspHobList The pointer to Hob list produced by FSP. > > + > > +@return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +FspSiliconInitDoneGetFspHobList ( > > + IN CONST EFI_PEI_SERVICES **PeiServices, > > + IN FSP_SILICON_INIT_DONE_PPI *This, > > + OUT VOID **FspHobList > > + ); > > + > > +FSP_SILICON_INIT_DONE_PPI mFspSiliconInitDonePpi = { > > + FspSiliconInitDoneGetFspHobList > > +}; > > + > > +EFI_PEI_PPI_DESCRIPTOR mPeiFspSiliconInitDonePpi = { > > + EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, > > + &gFspSiliconInitDonePpiGuid, > > + &mFspSiliconInitDonePpi > > +}; > > + > > +/** > > +Return Hob list produced by FSP. > > + > > +@param[in] PeiServices The pointer to the PEI Services Table. > > +@param[in] This The pointer to this instance of this PPI. > > +@param[out] FspHobList The pointer to Hob list produced by FSP. > > + > > +@return EFI_SUCCESS FReturn Hob list produced by FSP successfully. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +FspSiliconInitDoneGetFspHobList ( > > + IN CONST EFI_PEI_SERVICES **PeiServices, > > + IN FSP_SILICON_INIT_DONE_PPI *This, > > + OUT VOID **FspHobList > > + ) > > +{ > > + EFI_HOB_GUID_TYPE *GuidHob; > > + > > + GuidHob = GetFirstGuidHob (&gFspHobGuid); > > + if (GuidHob != NULL) { > > + *FspHobList = *(VOID **)GET_GUID_HOB_DATA(GuidHob); > > + return EFI_SUCCESS; > > + } else { > > + return EFI_NOT_FOUND; > > + } > > +} > > + > > +/** > > + This function is called after PEI core discover memory and finish > > migration. > > + > > + @param[in] PeiServices Pointer to PEI Services Table. > > + @param[in] NotifyDesc Pointer to the descriptor for the Notification > > event > that > > + caused this function to execute. > > + @param[in] Ppi Pointer to the PPI data associated with this > > function. > > + > > + @retval EFI_STATUS Always return EFI_SUCCESS > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PeiMemoryDiscoveredNotify ( > > + IN EFI_PEI_SERVICES **PeiServices, > > + IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > + IN VOID *Ppi > > + ); > > + > > +EFI_PEI_NOTIFY_DESCRIPTOR mPeiMemoryDiscoveredNotifyDesc = { > > + (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | > > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), > > + &gEfiPeiMemoryDiscoveredPpiGuid, > > + PeiMemoryDiscoveredNotify > > +}; > > + > > +/** > > +This function is called after PEI core discover memory and finish > > migration. > > + > > +@param[in] PeiServices Pointer to PEI Services Table. > > +@param[in] NotifyDesc Pointer to the descriptor for the Notification > > event that > > +caused this function to execute. > > +@param[in] Ppi Pointer to the PPI data associated with this > > function. > > + > > +@retval EFI_STATUS Always return EFI_SUCCESS > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PeiMemoryDiscoveredNotify ( > > + IN EFI_PEI_SERVICES **PeiServices, > > + IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, > > + IN VOID *Ppi > > + ) > > +{ > > + FSP_INFO_HEADER *FspsHeaderPtr; > > + UINT64 TimeStampCounterStart; > > + EFI_STATUS Status; > > + VOID *FspHobListPtr; > > + EFI_HOB_GUID_TYPE *GuidHob; > > + FSPS_UPD_COMMON *FspsUpdDataPtr; > > + UINTN *SourceData; > > + > > + > > + DEBUG ((DEBUG_INFO, "PeiMemoryDiscoveredNotify enter\n")); > > + > > + // > > + // Copy default FSP-S UPD data from Flash > > + // > > + FspsHeaderPtr = (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 > (PcdFspsBaseAddress)); > > + FspsUpdDataPtr = (FSPS_UPD_COMMON *)AllocateZeroPool > > ((UINTN)FspsHeaderPtr- > > >CfgRegionSize); > > + ASSERT (FspsUpdDataPtr != NULL); > > + SourceData = (UINTN *)((UINTN)FspsHeaderPtr->ImageBase + > > (UINTN)FspsHeaderPtr- > > >CfgRegionOffset); > > + CopyMem (FspsUpdDataPtr, SourceData, > > (UINTN)FspsHeaderPtr->CfgRegionSize); > > + > > + UpdateFspsUpdData ((VOID *)FspsUpdDataPtr); > > + > > + TimeStampCounterStart = AsmReadTsc (); > > + PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x9000); > > + Status = CallFspSiliconInit ((VOID *)FspsUpdDataPtr); > > + PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x907F); > > + DEBUG ((DEBUG_INFO, "Total time spent executing FspSiliconInitApi: %d > > millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - > TimeStampCounterStart), > > 1000000))); > > + if (EFI_ERROR(Status)) { > > + DEBUG ((DEBUG_ERROR, "ERROR - Failed to execute FspSiliconInitApi(), > > Status = > > %r\n", Status)); > > + } > > + DEBUG((DEBUG_INFO, "FspSiliconInit status: 0x%x\n", Status)); > > + ASSERT_EFI_ERROR (Status); > > + > > + Status = TestFspSiliconInitApiOutput ((VOID *)NULL); > > + if (RETURN_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "ERROR - TestFspSiliconInitApiOutput () fail, > > Status = > %r\n", > > Status)); > > + } > > + > > + // > > + // Now FspHobList complete, process it > > + // > > + GuidHob = GetFirstGuidHob (&gFspHobGuid); > > + ASSERT (GuidHob != NULL); > > + FspHobListPtr = *(VOID **)GET_GUID_HOB_DATA (GuidHob); > > + DEBUG ((DEBUG_INFO, "FspHobListPtr - 0x%x\n", FspHobListPtr)); > > + PostFspsHobProcess (FspHobListPtr); > > + > > + // > > + // Install FspSiliconInitDonePpi so that any other driver can consume > > this info. > > + // > > + Status = PeiServicesInstallPpi (&mPeiFspSiliconInitDonePpi); > > + ASSERT_EFI_ERROR(Status); > > + > > + return Status; > > +} > > + > > +/** > > + Do FSP initialization. > > + > > + @return FSP initialization status. > > +**/ > > +EFI_STATUS > > +FspsWrapperInit ( > > + VOID > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_BOOT_MODE BootMode; > > + > > + // > > + // Register MemoryDiscovered Nofity to run FspSiliconInit > > + // > > + Status = PeiServicesNotifyPpi (&mPeiMemoryDiscoveredNotifyDesc); > > + ASSERT_EFI_ERROR (Status); > > + > > + // > > + // Register EndOfPei Notify for S3 to run FSP NotifyPhase > > + // > > + PeiServicesGetBootMode (&BootMode); > > + if (BootMode == BOOT_ON_S3_RESUME) { > > + Status = PeiServicesNotifyPpi (&mS3EndOfPeiNotifyDesc); > > + ASSERT_EFI_ERROR (Status); > > + } > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** > > + This is the entrypoint of PEIM > > + > > + @param[in] FileHandle Handle of the file being invoked. > > + @param[in] PeiServices Describes the list of possible PEI Services. > > + > > + @retval EFI_SUCCESS if it completed successfully. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +FspsWrapperPeimEntryPoint ( > > + IN EFI_PEI_FILE_HANDLE FileHandle, > > + IN CONST EFI_PEI_SERVICES **PeiServices > > + ) > > +{ > > + > > + DEBUG ((DEBUG_INFO, "FspsWrapperPeimEntryPoint\n")); > > + > > + FspsWrapperInit (); > > + > > + return EFI_SUCCESS; > > +} > > diff --git a/IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf > > b/IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf > > new file mode 100644 > > index 0000000..6304dbf > > --- /dev/null > > +++ b/IntelFspWrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf > > @@ -0,0 +1,79 @@ > > +## @file > > +# FSP-S wrapper PEI Module > > +# > > +# This PEIM initialize FSP. > > +# This will be invoked only once. It will call FspMemoryInit API, > > +# register TemporaryRamDonePpi to call TempRamExit API, and register > > MemoryDiscoveredPpi > > +# notify to call FspSiliconInit API. > > +# > > +# 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 distribution. The full text of the license may > > be found at > > +# http://opensource.org/licenses/bsd-license.php. > > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010017 > > + BASE_NAME = FspsWrapperPeim > > + FILE_GUID = DA516A06-05B6-4C52-9580-A45403EA9E8A > > + VERSION_STRING = 1.0 > > + MODULE_TYPE = PEIM > > + ENTRY_POINT = FspsWrapperPeimEntryPoint > > + > > +# > > +# The following information is for reference only and not required by the > > build > tools. > > +# > > +# VALID_ARCHITECTURES = IA32 > > +# > > + > > +[LibraryClasses] > > + PeimEntryPoint > > + PeiServicesLib > > + PeiServicesTablePointerLib > > + BaseLib > > + BaseMemoryLib > > + TimerLib > > + DebugLib > > + HobLib > > + MemoryAllocationLib > > + FspWrapperPlatformLib > > + FspWrapperHobProcessLib > > + DebugAgentLib > > + UefiCpuLib > > + PeCoffGetEntryPointLib > > + PeCoffExtraActionLib > > + PerformanceLib > > + FspWrapperApiLib > > + FspWrapperApiTestLib > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + UefiCpuPkg/UefiCpuPkg.dec > > + IntelFspPkg/IntelFspPkg.dec > > + IntelFspWrapperPkg/IntelFspWrapperPkg.dec > > + > > +[Ppis] > > + gTopOfTemporaryRamPpiGuid ## PRODUCES > > + gFspSiliconInitDonePpiGuid ## PRODUCES > > + gEfiEndOfPeiSignalPpiGuid ## PRODUCES > > + gEfiTemporaryRamDonePpiGuid ## PRODUCES > > + gEfiPeiMemoryDiscoveredPpiGuid ## PRODUCES > > + > > +[Pcd] > > + gFspWrapperTokenSpaceGuid.PcdFspsBaseAddress ## CONSUMES > > + > > +[Guids] > > + gFspHobGuid ## CONSUMES ## HOB > > + gFspApiPerformanceGuid ## CONSUMES ## GUID > > + > > +[Sources] > > + FspsWrapperPeim.c > > + > > +[Depex] > > + gEfiPeiMemoryDiscoveredPpiGuid > > -- > > 2.7.4.windows.1 > > > > _______________________________________________ > > edk2-devel mailing list > > [email protected] > > https://lists.01.org/mailman/listinfo/edk2-devel > > _______________________________________________ > > edk2-devel mailing list > > [email protected] > > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

