]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/PeiMain.h
1) add gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported and gEfiMdeModulePkgTo...
[mirror_edk2.git] / MdeModulePkg / Core / Pei / PeiMain.h
index 7cdcf30a2a32a176923e904ef9f661f57a53bda0..8c133d2b1ac6a1e56f402199c68aa066f1e2c591 100644 (file)
@@ -29,11 +29,14 @@ Revision History
 #include <Guid/StatusCodeDataTypeId.h>\r
 #include <Ppi/DxeIpl.h>\r
 #include <Ppi/MemoryDiscovered.h>\r
-#include <Ppi/FindFv.h>\r
 #include <Ppi/StatusCode.h>\r
-#include <Ppi/Security.h>\r
 #include <Ppi/Reset.h>\r
-#include <Ppi/FvLoadFile.h>\r
+#include <Ppi/FirmwareVolume.h>\r
+#include <Ppi/FirmwareVolumeInfo.h>\r
+#include <Ppi/Decompress.h>\r
+#include <Ppi/GuidedSectionExtraction.h>\r
+#include <Ppi/LoadFile.h>\r
+#include <Ppi/Security2.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/PeiCoreEntryPoint.h>\r
 #include <Library/BaseLib.h>\r
@@ -41,12 +44,19 @@ Revision History
 #include <Library/PerformanceLib.h>\r
 #include <Library/PeiServicesLib.h>\r
 #include <Library/ReportStatusCodeLib.h>\r
+#include <Library/PeCoffLib.h>\r
 #include <Library/PeCoffGetEntryPointLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
+#include <Library/CacheMaintenanceLib.h>\r
 #include <Library/TimerLib.h>\r
+#include <Library/PcdLib.h>\r
 #include <IndustryStandard/PeImage.h>\r
+#include <Library/PeiServicesTablePointerLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Guid/FirmwareFileSystem2.h>\r
+#include <Guid/AprioriFileName.h>\r
 \r
-extern EFI_GUID gEfiPeiCorePrivateGuid;\r
+#define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE   0xff\r
 \r
 //\r
 // Pei Core private data structures\r
@@ -70,17 +80,23 @@ typedef struct {
   PEI_PPI_LIST_POINTERS   PpiListPtrs[MAX_PPI_DESCRIPTORS];\r
 } PEI_PPI_DATABASE;\r
 \r
-typedef struct {\r
-  UINT8                       CurrentPeim;\r
-  UINT8                       CurrentFv;\r
-  UINT32                      DispatchedPeimBitMap;\r
-  UINT32                      PreviousPeimBitMap;\r
-  EFI_FFS_FILE_HEADER         *CurrentPeimAddress;\r
-  EFI_FIRMWARE_VOLUME_HEADER  *CurrentFvAddress;\r
-  EFI_FIRMWARE_VOLUME_HEADER  *BootFvAddress;\r
-  EFI_PEI_FIND_FV_PPI         *FindFv;\r
-} PEI_CORE_DISPATCH_DATA;\r
 \r
+//\r
+// PEI_CORE_FV_HANDE.PeimState\r
+// Do not change these values as there is code doing math to change states.\r
+// Look for Private->Fv[FvCount].PeimState[PeimCount]++;\r
+//\r
+#define PEIM_STATE_NOT_DISPATCHED         0x00\r
+#define PEIM_STATE_DISPATCHED             0x01\r
+#define PEIM_STATE_REGISITER_FOR_SHADOW   0x02\r
+#define PEIM_STATE_DONE                   0x03\r
+\r
+typedef struct {\r
+  EFI_FIRMWARE_VOLUME_HEADER          *FvHeader;\r
+  UINT8                               PeimState[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];   \r
+  EFI_PEI_FILE_HANDLE                 FvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
+  BOOLEAN                             ScanFv;\r
+} PEI_CORE_FV_HANDLE;\r
 \r
 //\r
 // Pei Core private data structure instance\r
@@ -92,7 +108,15 @@ typedef struct{
   UINTN                              Signature;\r
   EFI_PEI_SERVICES                   *PS;     // Point to ServiceTableShadow\r
   PEI_PPI_DATABASE                   PpiData;\r
-  PEI_CORE_DISPATCH_DATA             DispatchData;\r
+  UINTN                              FvCount;\r
+  PEI_CORE_FV_HANDLE                 Fv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];\r
+  EFI_PEI_FILE_HANDLE                CurrentFvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
+  UINTN                              AprioriCount;\r
+  UINTN                              CurrentPeimFvCount; \r
+  UINTN                              CurrentPeimCount;\r
+  EFI_PEI_FILE_HANDLE                CurrentFileHandle;\r
+  UINTN                              AllFvCount;\r
+  EFI_PEI_FV_HANDLE                  AllFv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];\r
   EFI_PEI_HOB_POINTERS               HobList;\r
   BOOLEAN                            SwitchStackSignal;\r
   BOOLEAN                            PeiMemoryInstalled;\r
@@ -101,10 +125,11 @@ typedef struct{
   VOID                               *BottomOfCarHeap;\r
   VOID                               *TopOfCarHeap;\r
   VOID                               *CpuIo;\r
-  EFI_PEI_SECURITY_PPI               *PrivateSecurityPpi;\r
+  EFI_PEI_SECURITY2_PPI              *PrivateSecurityPpi;\r
   EFI_PEI_SERVICES                   ServiceTableShadow;\r
   UINTN                              SizeOfCacheAsRam;\r
   VOID                               *MaxTopOfCarHeap;\r
+  EFI_PEI_PPI_DESCRIPTOR             *XipLoadFile;\r
 } PEI_CORE_INSTANCE;\r
 \r
 //\r
@@ -120,8 +145,9 @@ typedef struct{
 typedef\r
 EFI_STATUS\r
 (EFIAPI *PEI_CORE_ENTRY_POINT)(\r
-  IN EFI_PEI_STARTUP_DESCRIPTOR  *PeiStartupDescriptor,\r
-  IN PEI_CORE_INSTANCE           *OldCoreData\r
+  IN CONST  EFI_SEC_PEI_HAND_OFF    *SecCoreData,\r
+  IN CONST  EFI_PEI_PPI_DESCRIPTOR  *PpiList,\r
+  IN PEI_CORE_INSTANCE              *OldCoreData\r
   );\r
 \r
 //\r
@@ -138,14 +164,22 @@ typedef union {
 } PEI_CORE_TEMP_POINTERS;\r
 \r
 \r
+\r
+typedef struct {\r
+  CONST EFI_SEC_PEI_HAND_OFF    *SecCoreData;\r
+  EFI_PEI_PPI_DESCRIPTOR        *PpiList;\r
+  VOID                          *Data;\r
+} PEI_CORE_PARAMETERS;\r
+\r
 //\r
 // PeiCore function\r
 //\r
 EFI_STATUS\r
 EFIAPI\r
 PeiCore (\r
-  IN EFI_PEI_STARTUP_DESCRIPTOR  *PeiStartupDescriptor,\r
-  IN VOID                        *Data\r
+  IN CONST EFI_SEC_PEI_HAND_OFF        *SecCoreData,\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR      *PpList,\r
+  IN VOID                              *Data\r
   )\r
 /*++\r
 \r
@@ -173,11 +207,10 @@ Returns:
 // Dispatcher support functions\r
 //\r
 \r
-EFI_STATUS\r
+BOOLEAN\r
 PeimDispatchReadiness (\r
   IN EFI_PEI_SERVICES   **PeiServices,\r
-  IN VOID               *DependencyExpression,\r
-  IN OUT BOOLEAN        *Runnable\r
+  IN VOID               *DependencyExpression\r
   )\r
 /*++\r
 \r
@@ -213,11 +246,10 @@ Returns:
 ;\r
 \r
 \r
-EFI_STATUS\r
+VOID\r
 PeiDispatcher (\r
-  IN EFI_PEI_STARTUP_DESCRIPTOR  *PeiStartupDescriptor,\r
-  IN PEI_CORE_INSTANCE           *PrivateData,\r
-  IN PEI_CORE_DISPATCH_DATA      *DispatchData\r
+  IN CONST EFI_SEC_PEI_HAND_OFF  *SecCoreData,\r
+  IN PEI_CORE_INSTANCE           *PrivateData\r
   )\r
 \r
 /*++\r
@@ -243,9 +275,9 @@ Returns:
 \r
 VOID\r
 InitializeDispatcherData (\r
-  IN EFI_PEI_SERVICES             **PeiServices,\r
+  IN PEI_CORE_INSTANCE            *PrivateData,\r
   IN PEI_CORE_INSTANCE            *OldCoreData,\r
-  IN EFI_PEI_STARTUP_DESCRIPTOR   *PeiStartupDescriptor\r
+  IN CONST EFI_SEC_PEI_HAND_OFF   *SecCoreData\r
   )\r
 /*++\r
 \r
@@ -348,8 +380,9 @@ Returns:
 \r
 BOOLEAN\r
 DepexSatisfied (\r
-  IN EFI_PEI_SERVICES  **PeiServices,\r
-  IN  VOID             *CurrentPeimAddress\r
+  IN PEI_CORE_INSTANCE          *Private,\r
+  IN EFI_PEI_FILE_HANDLE        FileHandle,\r
+  IN UINTN                      PeimCount\r
   )\r
 /*++\r
 \r
@@ -406,7 +439,7 @@ Returns:
 //\r
 VOID\r
 InitializePpiServices (\r
-  IN EFI_PEI_SERVICES    **PeiServices,\r
+  IN PEI_CORE_INSTANCE   *PrivateData,\r
   IN PEI_CORE_INSTANCE   *OldCoreData\r
   )\r
 /*++\r
@@ -429,7 +462,7 @@ Returns:
 \r
 VOID\r
 ConvertPpiPointers (\r
-  IN EFI_PEI_SERVICES              **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES              **PeiServices,\r
   IN EFI_HOB_HANDOFF_INFO_TABLE    *OldHandOffHob,\r
   IN EFI_HOB_HANDOFF_INFO_TABLE    *NewHandOffHob\r
   )\r
@@ -453,8 +486,8 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiInstallPpi (\r
-  IN EFI_PEI_SERVICES        **PeiServices,\r
-  IN EFI_PEI_PPI_DESCRIPTOR  *PpiList\r
+  IN CONST EFI_PEI_SERVICES        **PeiServices,\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR  *PpiList\r
   )\r
 /*++\r
 \r
@@ -480,9 +513,9 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiReInstallPpi (\r
-  IN EFI_PEI_SERVICES        **PeiServices,\r
-  IN EFI_PEI_PPI_DESCRIPTOR  *OldPpi,\r
-  IN EFI_PEI_PPI_DESCRIPTOR  *NewPpi\r
+  IN CONST EFI_PEI_SERVICES        **PeiServices,\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR  *OldPpi,\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR  *NewPpi\r
   )\r
 /*++\r
 \r
@@ -509,8 +542,8 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiLocatePpi (\r
-  IN EFI_PEI_SERVICES            **PeiServices,\r
-  IN EFI_GUID                    *Guid,\r
+  IN CONST EFI_PEI_SERVICES            **PeiServices,\r
+  IN CONST EFI_GUID                    *Guid,\r
   IN UINTN                       Instance,\r
   IN OUT EFI_PEI_PPI_DESCRIPTOR  **PpiDescriptor,\r
   IN OUT VOID                    **Ppi\r
@@ -540,8 +573,8 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiNotifyPpi (\r
-  IN EFI_PEI_SERVICES           **PeiServices,\r
-  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyList\r
+  IN CONST EFI_PEI_SERVICES           **PeiServices,\r
+  IN CONST EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyList\r
   )\r
 /*++\r
 \r
@@ -565,7 +598,7 @@ Returns:
 \r
 VOID\r
 ProcessNotifyList (\r
-  IN EFI_PEI_SERVICES    **PeiServices\r
+  IN PEI_CORE_INSTANCE  *PrivateData\r
   )\r
 /*++\r
 \r
@@ -584,7 +617,7 @@ Returns:
 \r
 VOID\r
 DispatchNotify (\r
-  IN EFI_PEI_SERVICES    **PeiServices,\r
+  IN PEI_CORE_INSTANCE  *PrivateData,\r
   IN UINTN               NotifyType,\r
   IN INTN                InstallStartIndex,\r
   IN INTN                InstallStopIndex,\r
@@ -617,7 +650,7 @@ Returns:  None
 EFI_STATUS\r
 EFIAPI\r
 PeiGetBootMode (\r
-  IN EFI_PEI_SERVICES  **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES  **PeiServices,\r
   IN OUT EFI_BOOT_MODE *BootMode\r
   )\r
 /*++\r
@@ -642,7 +675,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiSetBootMode (\r
-  IN EFI_PEI_SERVICES  **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES  **PeiServices,\r
   IN EFI_BOOT_MODE     BootMode\r
   )\r
 /*++\r
@@ -713,8 +746,9 @@ Returns:
 \r
 EFI_STATUS\r
 VerifyPeim (\r
-  IN EFI_PEI_SERVICES     **PeiServices,\r
-  IN EFI_FFS_FILE_HEADER  *CurrentPeimAddress\r
+  IN PEI_CORE_INSTANCE      *PrivateData,\r
+  IN EFI_PEI_FV_HANDLE      VolumeHandle,\r
+  IN EFI_PEI_FILE_HANDLE    FileHandle\r
   )\r
 /*++\r
 \r
@@ -739,7 +773,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiGetHobList (\r
-  IN EFI_PEI_SERVICES  **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES  **PeiServices,\r
   IN OUT VOID          **HobList\r
   )\r
 /*++\r
@@ -765,7 +799,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiCreateHob (\r
-  IN EFI_PEI_SERVICES  **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES  **PeiServices,\r
   IN UINT16            Type,\r
   IN UINT16            Length,\r
   IN OUT VOID          **Hob\r
@@ -825,10 +859,10 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiFfsFindNextFile (\r
-  IN EFI_PEI_SERVICES            **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES      **PeiServices,\r
   IN UINT8                       SearchType,\r
-  IN EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader,\r
-  IN OUT EFI_FFS_FILE_HEADER     **FileHeader\r
+  IN EFI_PEI_FV_HANDLE           FwVolHeader,\r
+  IN OUT EFI_PEI_FILE_HANDLE     *FileHeader\r
   )\r
 /*++\r
 \r
@@ -859,9 +893,9 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiFfsFindSectionData (\r
-  IN EFI_PEI_SERVICES            **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES      **PeiServices,\r
   IN EFI_SECTION_TYPE            SectionType,\r
-  IN EFI_FFS_FILE_HEADER         *FfsFileHeader,\r
+  IN EFI_PEI_FILE_HANDLE         FfsFileHeader,\r
   IN OUT VOID                    **SectionData\r
   )\r
 /*++\r
@@ -887,9 +921,9 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiFvFindNextVolume (\r
-  IN EFI_PEI_SERVICES                **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES                **PeiServices,\r
   IN UINTN                           Instance,\r
-  IN OUT EFI_FIRMWARE_VOLUME_HEADER  **FwVolHeader\r
+  IN OUT EFI_PEI_FV_HANDLE           *FwVolHeader\r
   )\r
 /*++\r
 \r
@@ -922,8 +956,8 @@ Returns:
 //\r
 VOID\r
 InitializeMemoryServices (\r
-  IN EFI_PEI_SERVICES            **PeiServices,\r
-  IN EFI_PEI_STARTUP_DESCRIPTOR  *PeiStartupDescriptor,\r
+  IN PEI_CORE_INSTANCE           *PrivateData,\r
+  IN CONST EFI_SEC_PEI_HAND_OFF  *SecCoreData,\r
   IN PEI_CORE_INSTANCE           *OldCoreData\r
   )\r
 /*++\r
@@ -949,7 +983,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiInstallPeiMemory (\r
-  IN EFI_PEI_SERVICES      **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES      **PeiServices,\r
   IN EFI_PHYSICAL_ADDRESS  MemoryBegin,\r
   IN UINT64                MemoryLength\r
   )\r
@@ -976,7 +1010,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiAllocatePages (\r
-  IN EFI_PEI_SERVICES           **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES           **PeiServices,\r
   IN EFI_MEMORY_TYPE            MemoryType,\r
   IN UINTN                      Pages,\r
   OUT EFI_PHYSICAL_ADDRESS      *Memory\r
@@ -1010,7 +1044,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiAllocatePool (\r
-  IN EFI_PEI_SERVICES           **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES           **PeiServices,\r
   IN UINTN                      Size,\r
   OUT VOID                      **Buffer\r
   )\r
@@ -1040,8 +1074,9 @@ Returns:
 EFI_STATUS\r
 PeiLoadImage (\r
   IN  EFI_PEI_SERVICES            **PeiServices,\r
-  IN  EFI_FFS_FILE_HEADER         *PeimFileHeader,\r
-  OUT VOID                        **EntryPoint\r
+  IN  EFI_PEI_FILE_HANDLE         FileHandle,\r
+  OUT    EFI_PHYSICAL_ADDRESS     *EntryPoint,\r
+  OUT    UINT32                   *AuthenticationState\r
   )\r
 /*++\r
 \r
@@ -1068,12 +1103,12 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiReportStatusCode (\r
-  IN EFI_PEI_SERVICES         **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES         **PeiServices,\r
   IN EFI_STATUS_CODE_TYPE     CodeType,\r
   IN EFI_STATUS_CODE_VALUE    Value,\r
   IN UINT32                   Instance,\r
-  IN EFI_GUID                 *CallerId,\r
-  IN EFI_STATUS_CODE_DATA     *Data OPTIONAL\r
+  IN CONST EFI_GUID                 *CallerId,\r
+  IN CONST EFI_STATUS_CODE_DATA     *Data OPTIONAL\r
   )\r
 /*++\r
 \r
@@ -1107,7 +1142,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 PeiResetSystem (\r
-  IN EFI_PEI_SERVICES   **PeiServices\r
+  IN CONST EFI_PEI_SERVICES   **PeiServices\r
   )\r
 /*++\r
 \r
@@ -1129,6 +1164,166 @@ Returns:
 --*/\r
 ;\r
 \r
+VOID \r
+PeiInitializeFv (\r
+  IN  PEI_CORE_INSTANCE           *PrivateData,\r
+  IN CONST EFI_SEC_PEI_HAND_OFF   *SecCoreData\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Initialize PeiCore Fv List.\r
+\r
+Arguments:\r
+  PrivateData     - Pointer to PEI_CORE_INSTANCE.\r
+  SecCoreData     - Pointer to EFI_SEC_PEI_HAND_OFF.\r
+\r
+Returns:\r
+  NONE  \r
+  \r
+--*/  \r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+FirmwareVolmeInfoPpiNotifyCallback (\r
+  IN EFI_PEI_SERVICES              **PeiServices,\r
+  IN EFI_PEI_NOTIFY_DESCRIPTOR     *NotifyDescriptor,\r
+  IN VOID                          *Ppi\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Process Firmware Volum Information once FvInfoPPI install.\r
+\r
+Arguments:\r
+\r
+  PeiServices - General purpose services available to every PEIM.\r
+    \r
+Returns:\r
+\r
+  Status -  EFI_SUCCESS if the interface could be successfully\r
+            installed\r
+\r
+--*/\r
+;\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI \r
+PeiFfsFindFileByName (\r
+  IN  CONST EFI_GUID        *FileName,\r
+  IN  EFI_PEI_FV_HANDLE     VolumeHandle,\r
+  OUT EFI_PEI_FILE_HANDLE   *FileHandle\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Given the input VolumeHandle, search for the next matching name file.\r
+\r
+Arguments:\r
+\r
+  FileName      - File name to search.\r
+  VolumeHandle  - The current FV to search.\r
+  FileHandle    - Pointer to the file matching name in VolumeHandle.\r
+                - NULL if file not found\r
+Returns:\r
+  EFI_STATUS\r
+  \r
+--*/  \r
+;\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI \r
+PeiFfsGetFileInfo (\r
+  IN EFI_PEI_FILE_HANDLE  FileHandle,\r
+  OUT EFI_FV_FILE_INFO    *FileInfo\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Collect information of given file.\r
+\r
+Arguments:\r
+  FileHandle   - The handle to file.\r
+  FileInfo     - Pointer to the file information.\r
+\r
+Returns:\r
+  EFI_STATUS\r
+  \r
+--*/    \r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI \r
+PeiFfsGetVolumeInfo (\r
+  IN EFI_PEI_FV_HANDLE  VolumeHandle,\r
+  OUT EFI_FV_INFO       *VolumeInfo\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Collect information of given Fv Volume.\r
+\r
+Arguments:\r
+  VolumeHandle    - The handle to Fv Volume.\r
+  VolumeInfo      - The pointer to volume information.\r
+  \r
+Returns:\r
+  EFI_STATUS\r
+  \r
+--*/    \r
+;\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+PeiRegisterForShadow (\r
+  IN EFI_PEI_FILE_HANDLE       FileHandle\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This routine enable a PEIM to register itself to shadow when PEI Foundation\r
+  discovery permanent memory.\r
+\r
+Arguments:\r
+  FileHandle  - File handle of a PEIM.\r
+  \r
+Returns:\r
+  EFI_NOT_FOUND        - The file handle doesn't point to PEIM itself.\r
+  EFI_ALREADY_STARTED  - Indicate that the PEIM has been registered itself.\r
+  EFI_SUCCESS          - Successfully to register itself.\r
+\r
+--*/  \r
+;\r
+\r
+\r
+/**\r
+  This routine enable a PEIM to register itself to shadow when PEI Foundation\r
+  discovery permanent memory.\r
+\r
+       @param FileHandle       File handle of a PEIM.\r
+  \r
+  @retval EFI_NOT_FOUND                                The file handle doesn't point to PEIM itself.\r
+  @retval EFI_ALREADY_STARTED          Indicate that the PEIM has been registered itself.\r
+  @retval EFI_SUCCESS                                          Successfully to register itself.\r
+\r
+**/  \r
+EFI_STATUS\r
+EFIAPI\r
+PeiRegisterForShadow (\r
+  IN EFI_PEI_FILE_HANDLE       FileHandle\r
+  )\r
+;\r
+\r
 /**\r
   Transfers control to a function starting with a new stack.\r
 \r
@@ -1161,4 +1356,59 @@ PeiSwitchStacks (
   IN      VOID                      *NewBsp\r
   );\r
 \r
+EFI_STATUS\r
+PeiFindFileEx (\r
+  IN  CONST EFI_PEI_FV_HANDLE        FvHandle,\r
+  IN  CONST EFI_GUID                 *FileName,   OPTIONAL\r
+  IN        EFI_FV_FILETYPE          SearchType,\r
+  IN OUT    EFI_PEI_FILE_HANDLE      *FileHandle,\r
+  IN OUT    EFI_PEI_FV_HANDLE        *AprioriFile  OPTIONAL\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+    Given the input file pointer, search for the next matching file in the\r
+    FFS volume as defined by SearchType. The search starts from FileHeader inside\r
+    the Firmware Volume defined by FwVolHeader.\r
+\r
+Arguments:\r
+    PeiServices - Pointer to the PEI Core Services Table.\r
+    SearchType - Filter to find only files of this type.\r
+      Type EFI_FV_FILETYPE_ALL causes no filtering to be done.\r
+    FwVolHeader - Pointer to the FV header of the volume to search.\r
+      This parameter must point to a valid FFS volume.\r
+    FileHeader  - Pointer to the current file from which to begin searching.\r
+      This pointer will be updated upon return to reflect the file found.\r
+    Flag        - Indicator for if this is for PEI Dispath search \r
+    \r
+Returns:\r
+    EFI_NOT_FOUND - No files matching the search criteria were found\r
+    EFI_SUCCESS\r
+\r
+--*/\r
+;\r
+\r
+VOID\r
+InitializeImageServices (\r
+  IN  PEI_CORE_INSTANCE   *PrivateData,\r
+  IN  PEI_CORE_INSTANCE   *OldCoreData\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Install Pei Load File PPI.\r
+\r
+Arguments:\r
+\r
+  PrivateData    - Pointer to PEI_CORE_INSTANCE.\r
+  OldCoreData    - Pointer to PEI_CORE_INSTANCE.\r
+\r
+Returns:\r
+\r
+  NONE.\r
+  \r
+--*/      \r
+;\r
+\r
 #endif\r