]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/PeiMain.h
Fixed the bug that the PPI descriptor number defined in PeiCore.h is not enough to...
[mirror_edk2.git] / MdeModulePkg / Core / Pei / PeiMain.h
index e71ae78b0439e96b877daa269bb6c4b93f8ae1ed..ef2d592a5e51bcd6b92f1e41d23028672146cbb3 100644 (file)
@@ -25,15 +25,16 @@ Revision History
 #define _PEI_MAIN_H_\r
 \r
 #include <PiPei.h>\r
-#include <FrameworkPei.h>\r
-#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,13 +42,18 @@ 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
-\r
-extern EFI_GUID gEfiPeiCorePrivateGuid;\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/PeiPiLib.h>\r
+#include <Guid/FirmwareFileSystem2.h>\r
+#include <Guid/AprioriFileName.h>\r
 \r
 #define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE   0xff\r
 \r
@@ -62,7 +68,7 @@ typedef union {
 \r
 #define PEI_STACK_SIZE 0x20000\r
 \r
-#define MAX_PPI_DESCRIPTORS 64\r
+#define MAX_PPI_DESCRIPTORS 128\r
 \r
 typedef struct {\r
   INTN                    PpiListEnd;\r
@@ -74,9 +80,6 @@ typedef struct {
 } PEI_PPI_DATABASE;\r
 \r
 \r
-#define PEI_CORE_MAX_FV_SUPPORTED   4\r
-#define PEI_CORE_MAX_PEIM_PER_FV    32\r
-\r
 //\r
 // PEI_CORE_FV_HANDE.PeimState\r
 // Do not change these values as there is code doing math to change states.\r
@@ -89,22 +92,19 @@ typedef struct {
 \r
 typedef struct {\r
   EFI_FIRMWARE_VOLUME_HEADER          *FvHeader;\r
-  UINT8                               PeimState[PEI_CORE_MAX_PEIM_PER_FV];   \r
-  EFI_PEI_FILE_HANDLE                 FvFileHandles[PEI_CORE_MAX_PEIM_PER_FV];\r
+  UINT8                               PeimState[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
+  EFI_PEI_FILE_HANDLE                 FvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
   BOOLEAN                             ScanFv;\r
 } PEI_CORE_FV_HANDLE;\r
 \r
+#define CACHE_SETION_MAX_NUMBER       0x10\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
+  EFI_COMMON_SECTION_HEADER*          Section[CACHE_SETION_MAX_NUMBER];\r
+  VOID*                               SectionData[CACHE_SETION_MAX_NUMBER];\r
+  UINTN                               SectionSize[CACHE_SETION_MAX_NUMBER];\r
+  UINTN                               AllSectionCount;\r
+  UINTN                               SectionIndex;\r
+} CACHE_SECTION_DATA;\r
 \r
 //\r
 // Pei Core private data structure instance\r
@@ -116,16 +116,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[PEI_CORE_MAX_FV_SUPPORTED];\r
-  EFI_PEI_FILE_HANDLE                CurrentFvFileHandles[PEI_CORE_MAX_PEIM_PER_FV];\r
+  PEI_CORE_FV_HANDLE                 Fv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];\r
+  EFI_PEI_FILE_HANDLE                CurrentFvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
   UINTN                              AprioriCount;\r
-  UINTN                              CurrentPeimFvCount; \r
+  UINTN                              CurrentPeimFvCount;\r
   UINTN                              CurrentPeimCount;\r
   EFI_PEI_FILE_HANDLE                CurrentFileHandle;\r
   UINTN                              AllFvCount;\r
-  EFI_PEI_FV_HANDLE                  AllFv[PEI_CORE_MAX_FV_SUPPORTED];\r
+  EFI_PEI_FV_HANDLE                  AllFv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];\r
   EFI_PEI_HOB_POINTERS               HobList;\r
   BOOLEAN                            SwitchStackSignal;\r
   BOOLEAN                            PeiMemoryInstalled;\r
@@ -134,10 +133,12 @@ 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
+  CACHE_SECTION_DATA                 CacheSection;\r
 } PEI_CORE_INSTANCE;\r
 \r
 //\r
@@ -153,8 +154,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
@@ -171,14 +173,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
@@ -206,11 +216,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
@@ -229,9 +238,6 @@ Arguments:
 \r
   DependencyExpression      - Pointer to a dependency expression.  The Grammar adheres to\r
                               the BNF described above and is stored in postfix notation.\r
-  Runnable                  - is True if the driver can be scheduled and False if the driver\r
-                              cannot be scheduled.  This is the value that the schedulers\r
-                              should use for deciding the state of the driver.\r
 \r
 Returns:\r
 \r
@@ -246,11 +252,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
@@ -276,9 +281,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
@@ -302,35 +307,6 @@ Returns:
 ;\r
 \r
 \r
-EFI_STATUS\r
-FindNextPeim (\r
-  IN EFI_PEI_SERVICES            **PeiServices,\r
-  IN EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader,\r
-  IN OUT EFI_FFS_FILE_HEADER     **PeimFileHeader\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-    Given the input file pointer, search for the next matching file in the\r
-    FFS volume. 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
-\r
-    FwVolHeader - Pointer to the FV header of the volume to search.\r
-                     This parameter must point to a valid FFS volume.\r
-\r
-    PeimFileHeader  - Pointer to the current file from which to begin searching.\r
-                  This pointer will be updated upon return to reflect the file found.\r
-\r
-Returns:\r
-    EFI_NOT_FOUND - No files matching the search criteria were found\r
-    EFI_SUCCESS\r
-\r
---*/\r
-;\r
-\r
 BOOLEAN\r
 Dispatched (\r
   IN UINT8  CurrentPeim,\r
@@ -381,8 +357,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
@@ -439,7 +416,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
@@ -462,7 +439,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
@@ -486,8 +463,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
@@ -513,9 +490,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
@@ -542,8 +519,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
@@ -573,8 +550,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
@@ -598,7 +575,7 @@ Returns:
 \r
 VOID\r
 ProcessNotifyList (\r
-  IN EFI_PEI_SERVICES    **PeiServices\r
+  IN PEI_CORE_INSTANCE  *PrivateData\r
   )\r
 /*++\r
 \r
@@ -617,7 +594,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
@@ -650,7 +627,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
@@ -675,7 +652,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
@@ -746,8 +723,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
@@ -772,7 +750,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
@@ -798,7 +776,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
@@ -858,10 +836,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
@@ -892,9 +870,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
@@ -920,9 +898,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
@@ -955,8 +933,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
@@ -982,7 +960,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
@@ -1009,7 +987,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
@@ -1043,7 +1021,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
@@ -1073,8 +1051,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
@@ -1101,12 +1080,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
@@ -1140,7 +1119,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
@@ -1162,17 +1141,159 @@ 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
+\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
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PeiRegisterForShadow (\r
@@ -1212,4 +1333,78 @@ 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
+/**\r
+  Get Fv image from the FV type file, then install FV INFO ppi, Build FV hob.\r
+\r
+       @param PeiServices          Pointer to the PEI Core Services Table.\r
+       @param FileHandle               File handle of a Fv type file.\r
+  @param AuthenticationState  Pointer to attestation authentication state of image.\r
+\r
+\r
+  @retval EFI_NOT_FOUND                                FV image can't be found.\r
+  @retval EFI_SUCCESS                                          Successfully to process it.\r
+\r
+**/\r
+EFI_STATUS\r
+ProcessFvFile (\r
+  IN  EFI_PEI_SERVICES      **PeiServices,\r
+  IN  EFI_PEI_FILE_HANDLE   FvFileHandle,\r
+  OUT UINT32                *AuthenticationState\r
+  );\r
+\r
 #endif\r