-/*++\r
+/** @file\r
\r
Copyright (c) 2006 - 2007, Intel Corporation\r
All rights reserved. This program and the accompanying materials\r
\r
Revision History\r
\r
---*/\r
+**/\r
\r
#ifndef _PEI_MAIN_H_\r
#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 <Ppi/TemporaryRamSupport.h>\r
#include <Library/DebugLib.h>\r
#include <Library/PeiCoreEntryPoint.h>\r
#include <Library/BaseLib.h>\r
#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
VOID *Raw;\r
} PEI_PPI_LIST_POINTERS;\r
\r
-#define PEI_STACK_SIZE 0x20000\r
-\r
#define MAX_PPI_DESCRIPTORS 64\r
\r
typedef struct {\r
} 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
\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
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
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 SizeOfTemporaryMemory;\r
UINTN SizeOfCacheAsRam;\r
VOID *MaxTopOfCarHeap;\r
+ EFI_PEI_PPI_DESCRIPTOR *XipLoadFile;\r
+ EFI_PHYSICAL_ADDRESS PhysicalMemoryBegin;\r
+ UINT64 PhysicalMemoryLength;\r
+ EFI_PHYSICAL_ADDRESS FreePhysicalMemoryTop;\r
+ VOID* ShadowedPeiCore;\r
+ CACHE_SECTION_DATA CacheSection;\r
} PEI_CORE_INSTANCE;\r
\r
//\r
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
} 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
// 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
\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
;\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
\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
\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
--*/\r
;\r
\r
-#if defined (MDE_CPU_IPF)\r
- //\r
- // In Ipf we should make special changes for the PHIT pointers to support\r
- // recovery boot in cache mode.\r
- //\r
-#define SWITCH_TO_CACHE_MODE(CoreData) SwitchToCacheMode(CoreData)\r
-#define CACHE_MODE_ADDRESS_MASK 0x7FFFFFFFFFFFFFFFULL\r
-VOID\r
-SwitchToCacheMode (\r
- IN PEI_CORE_INSTANCE *CoreData\r
-)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Switch the PHIT pointers to cache mode after InstallPeiMemory in CAR.\r
-\r
-Arguments:\r
-\r
- CoreData - The PEI core Private Data\r
-\r
-Returns:\r
-\r
---*/\r
-;\r
-\r
-#else\r
-\r
-#define SWITCH_TO_CACHE_MODE(CoreData)\r
-\r
-#endif\r
-\r
//\r
// PPI support functions\r
//\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
\r
VOID\r
ConvertPpiPointers (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_HOB_HANDOFF_INFO_TABLE *OldHandOffHob,\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\r
+ IN UINTN OldCheckingBottom,\r
+ IN UINTN OldCheckingTop,\r
IN EFI_HOB_HANDOFF_INFO_TABLE *NewHandOffHob\r
)\r
/*++\r
\r
Arguments:\r
\r
- PeiServices - The PEI core services table.\r
- OldHandOffHob - The old handoff HOB list.\r
- NewHandOffHob - The new handoff HOB list.\r
+ PeiServices - The PEI core services table.\r
+ OldCheckingBottom - The old checking bottom.\r
+ OldCheckingTop - The old checking top.\r
+ NewHandOffHob - The new handoff HOB list.\r
\r
Returns:\r
\r
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
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
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
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
\r
VOID\r
ProcessNotifyList (\r
- IN EFI_PEI_SERVICES **PeiServices\r
+ IN PEI_CORE_INSTANCE *PrivateData\r
)\r
/*++\r
\r
\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
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
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
\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
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
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
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
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
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
//\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
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
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
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
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
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
EFI_STATUS\r
EFIAPI\r
PeiResetSystem (\r
- IN EFI_PEI_SERVICES **PeiServices\r
+ IN CONST EFI_PEI_SERVICES **PeiServices\r
)\r
/*++\r
\r
--*/\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
)\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
- Transfers control to a function starting with a new stack.\r
-\r
- Transfers control to the function specified by EntryPoint using the new stack\r
- specified by NewStack and passing in the parameters specified by Context1 and\r
- Context2. Context1 and Context2 are optional and may be NULL. The function\r
- EntryPoint must never return.\r
-\r
- If EntryPoint is NULL, then ASSERT().\r
- If NewStack is NULL, then ASSERT().\r
-\r
- @param EntryPoint A pointer to function to call with the new stack.\r
- @param Context1 A pointer to the context to pass into the EntryPoint\r
- function.\r
- @param Context2 A pointer to the context to pass into the EntryPoint\r
- function.\r
- @param NewStack A pointer to the new stack to use for the EntryPoint\r
- function.\r
- @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's\r
- Reserved on other architectures.\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
-VOID\r
-EFIAPI\r
-PeiSwitchStacks (\r
- IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
- IN VOID *Context1, OPTIONAL\r
- IN VOID *Context2, OPTIONAL\r
- IN VOID *NewStack,\r
- IN VOID *NewBsp\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