Tim,

I agree multiple repos in a WORKSPACE can potentially be confusing.  Especially 
if the 
same package dir exists in more than of the repos.  To alleviate this issue, a 
repo can
be pruned and the .gitignore feature can be used for git to ignore the packages 
that
have been pruned.

The reason I am asking these questions is not related to FSP.

There have been prior discussions on edk2-devel to organize the packages in 
edk2 
into subdirectories, and I am working on a proposal for that.  However, moving 
packages into subdirectories would require the use of the PACKAGES_PATH feature.

Is PACKAGES_PATH something you could add support for in your tools?

Thanks,

Mike

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

Reply via email to