Yes. Tim
-----Original Message----- From: Yao, Jiewen [mailto:jiewen....@intel.com] Sent: Monday, May 09, 2016 6:42 PM To: Kinney, Michael D <michael.d.kin...@intel.com>; Tim Lewis <tim.le...@insyde.com>; Mudusuru, Giri P <giri.p.mudus...@intel.com>; edk2-devel@lists.01.org Cc: Mudusuru, Giri P <giri.p.mudus...@intel.com>; Zimmer, Vincent <vincent.zim...@intel.com>; Rangarajan, Ravi P <ravi.p.rangara...@intel.com> Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split FspInitPei to FspmWrapperPeim and FspsWrapperPeim. Good discussion on PACKAGES_PATH usage. For this specific case (FSP2 without FSP1.1 support), do we need change to IntelFsp2Pkg? Thank you Yao Jiewen > -----Original Message----- > From: Kinney, Michael D > Sent: Friday, May 6, 2016 10:07 AM > To: Tim Lewis <tim.le...@insyde.com>; Mudusuru, Giri P > <giri.p.mudus...@intel.com>; Yao, Jiewen <jiewen....@intel.com>; > edk2-devel@lists.01.org; Kinney, Michael D <michael.d.kin...@intel.com> > Cc: Mudusuru, Giri P <giri.p.mudus...@intel.com>; Zimmer, Vincent > <vincent.zim...@intel.com>; Rangarajan, Ravi P > <ravi.p.rangara...@intel.com> > Subject: RE: [edk2] [PATCH 17/19] IntelFspWrapperPkg/FspInit: Split > FspInitPei to FspmWrapperPeim and FspsWrapperPeim. > > 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:tim.le...@insyde.com] > > Sent: Thursday, May 5, 2016 6:53 PM > > To: Kinney, Michael D <michael.d.kin...@intel.com>; Mudusuru, Giri P > > <giri.p.mudus...@intel.com>; Yao, Jiewen <jiewen....@intel.com>; edk2- > > de...@lists.01.org > > Cc: Mudusuru, Giri P <giri.p.mudus...@intel.com>; Zimmer, Vincent > > <vincent.zim...@intel.com>; Rangarajan, Ravi P > <ravi.p.rangara...@intel.com> > > 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:michael.d.kin...@intel.com] > > Sent: Thursday, May 05, 2016 6:14 PM > > To: Tim Lewis <tim.le...@insyde.com>; Mudusuru, Giri P > <giri.p.mudus...@intel.com>; > > Yao, Jiewen <jiewen....@intel.com>; edk2-devel@lists.01.org; Kinney, > Michael D > > <michael.d.kin...@intel.com> > > Cc: Mudusuru, Giri P <giri.p.mudus...@intel.com>; Zimmer, Vincent > > <vincent.zim...@intel.com>; Rangarajan, Ravi P > <ravi.p.rangara...@intel.com> > > 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:edk2-devel-boun...@lists.01.org] On Behalf > Of Tim Lewis > > > Sent: Thursday, May 5, 2016 12:09 PM > > > To: Mudusuru, Giri P <giri.p.mudus...@intel.com>; Yao, Jiewen > <jiewen....@intel.com>; > > > edk2-devel@lists.01.org > > > Cc: Mudusuru, Giri P <giri.p.mudus...@intel.com>; Zimmer, Vincent > > > <vincent.zim...@intel.com>; Rangarajan, Ravi P > <ravi.p.rangara...@intel.com> > > > 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:giri.p.mudus...@intel.com> > > > Sent: Thursday, May 5, 2016 12:07 PM > > > To: Tim Lewis<mailto:tim.le...@insyde.com>; Yao, > Jiewen<mailto:jiewen....@intel.com>; > > > edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Rangarajan, Ravi P<mailto:ravi.p.rangara...@intel.com>; Yarlagadda, > Satya > > > P<mailto:satya.p.yarlaga...@intel.com>; Zimmer, > > > Vincent<mailto:vincent.zim...@intel.com>; Mudusuru, Giri > > > P<mailto:giri.p.mudus...@intel.com> > > > 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:tim.le...@insyde.com] > > > Sent: Wednesday, May 4, 2016 6:40 AM > > > To: Mudusuru, Giri P <giri.p.mudus...@intel.com>; Yao, Jiewen > <jiewen....@intel.com>; > > > edk2-devel@lists.01.org > > > Cc: Rangarajan, Ravi P <ravi.p.rangara...@intel.com>; Yarlagadda, Satya > P > > > <satya.p.yarlaga...@intel.com>; Zimmer, Vincent > <vincent.zim...@intel.com>; Mudusuru, > > > Giri P <giri.p.mudus...@intel.com> > > > 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:giri.p.mudus...@intel.com> > > > Sent: Tuesday, May 3, 2016 11:06 PM > > > To: Tim Lewis<mailto:tim.le...@insyde.com>; Yao, > Jiewen<mailto:jiewen....@intel.com>; > > > edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Rangarajan, Ravi P<mailto:ravi.p.rangara...@intel.com>; Yarlagadda, > Satya > > > P<mailto:satya.p.yarlaga...@intel.com>; Zimmer, > > > Vincent<mailto:vincent.zim...@intel.com>; Mudusuru, Giri > > > P<mailto:giri.p.mudus...@intel.com> > > > 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:tim.le...@insyde.com] > > > Sent: Tuesday, May 3, 2016 4:24 PM > > > To: Mudusuru, Giri P > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>>; > > > Yao, Jiewen <jiewen....@intel.com<mailto:jiewen....@intel.com>>; > edk2- > > > de...@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Rangarajan, Ravi P > > > <ravi.p.rangara...@intel.com<mailto:ravi.p.rangara...@intel.com>>; > Yarlagadda, Satya > > P > > > <satya.p.yarlaga...@intel.com<mailto:satya.p.yarlaga...@intel.com>>; > Zimmer, Vincent > > > <vincent.zim...@intel.com<mailto:vincent.zim...@intel.com>> > > > 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:giri.p.mudus...@intel.com] > > > Sent: Tuesday, May 03, 2016 4:07 PM > > > To: Tim Lewis <tim.le...@insyde.com<mailto:tim.le...@insyde.com>>; > Yao, Jiewen > > > <jiewen....@intel.com<mailto:jiewen....@intel.com>>; edk2- > > > de...@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Rangarajan, Ravi P > > > <ravi.p.rangara...@intel.com<mailto:ravi.p.rangara...@intel.com>>; > Yarlagadda, Satya > > P > > > <satya.p.yarlaga...@intel.com<mailto:satya.p.yarlaga...@intel.com>>; > Zimmer, Vincent > > > <vincent.zim...@intel.com<mailto:vincent.zim...@intel.com>>; > Mudusuru, Giri P > > > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>> > > > 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:tim.le...@insyde.com] > > > Sent: Tuesday, May 03, 2016 8:47 AM > > > To: Mudusuru, Giri P > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>>; > > > Yao, Jiewen <jiewen....@intel.com<mailto:jiewen....@intel.com>>; > edk2- > > > de...@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Rangarajan, Ravi P > > > <ravi.p.rangara...@intel.com<mailto:ravi.p.rangara...@intel.com>>; > Yarlagadda, Satya > > P > > > <satya.p.yarlaga...@intel.com<mailto:satya.p.yarlaga...@intel.com>>; > Zimmer, Vincent > > > <vincent.zim...@intel.com<mailto:vincent.zim...@intel.com>>; > Mudusuru, Giri P > > > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>> > > > 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:giri.p.mudus...@intel.com> > > > Sent: Tuesday, May 3, 2016 8:07 AM > > > To: Tim Lewis<mailto:tim.le...@insyde.com>; Yao, > Jiewen<mailto:jiewen....@intel.com>; > > > edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Rangarajan, Ravi P<mailto:ravi.p.rangara...@intel.com>; Yarlagadda, > Satya > > > P<mailto:satya.p.yarlaga...@intel.com>; Zimmer, > > > Vincent<mailto:vincent.zim...@intel.com>; Mudusuru, Giri > > > P<mailto:giri.p.mudus...@intel.com> > > > 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:tim.le...@insyde.com] > > > Sent: Tuesday, May 3, 2016 4:48 AM > > > To: Yao, Jiewen <jiewen....@intel.com<mailto:jiewen....@intel.com>>; > edk2- > > > de...@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Mudusuru, Giri P > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>>; > > > Rangarajan, Ravi P > <ravi.p.rangara...@intel.com<mailto:ravi.p.rangara...@intel.com>> > > > 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:edk2-devel-boun...@lists.01.org] On Behalf > Of Jiewen Yao > > > Sent: Monday, May 02, 2016 9:51 PM > > > To: edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org> > > > Cc: Giri P Mudusuru > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>>; > > Ravi > > > P Rangarajan > <ravi.p.rangara...@intel.com<mailto:ravi.p.rangara...@intel.com>> > > > 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%20Exter > nal.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 > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>> > > > Cc: Maurice Ma > <maurice...@intel.com<mailto:maurice...@intel.com>> > > > Cc: Ravi P Rangarajan > > <ravi.p.rangara...@intel.com<mailto:ravi.p.rangara...@intel.com>> > > > Contributed-under: TianoCore Contribution Agreement 1.0 > > > Signed-off-by: Jiewen Yao > <jiewen....@intel.com<mailto:jiewen....@intel.com>> > > > Reviewed-by: Giri P Mudusuru > > > <giri.p.mudus...@intel.com<mailto:giri.p.mudus...@intel.com>> > > > Reviewed-by: Maurice Ma > <maurice...@intel.com<mailto:maurice...@intel.com>> > > > Reviewed-by: Ravi P Rangarajan > > > <ravi.p.rangara...@intel.com<mailto:ravi.p.rangara...@intel.com>> > > > --- > > > 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 > > > edk2-devel@lists.01.org > > > https://lists.01.org/mailman/listinfo/edk2-devel > > > _______________________________________________ > > > edk2-devel mailing list > > > edk2-devel@lists.01.org > > > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel