#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
#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 <IndustryStandard/PeImage.h>\r
#include <Library/PeiServicesTablePointerLib.h>\r
-\r
-extern EFI_GUID gEfiPeiCorePrivateGuid;\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Guid/FirmwareFileSystem2.h>\r
+#include <Guid/AprioriFileName.h>\r
\r
#define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE 0xff\r
\r
} PEI_PPI_DATABASE;\r
\r
\r
-#define PEI_CORE_MAX_FV_SUPPORTED 4\r
+#define PEI_CORE_MAX_FV_SUPPORTED 6\r
#define PEI_CORE_MAX_PEIM_PER_FV 32\r
\r
//\r
BOOLEAN ScanFv;\r
} PEI_CORE_FV_HANDLE;\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
//\r
// Pei Core private data structure instance\r
//\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
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
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
\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
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
ProcessNotifyList (\r
- IN EFI_PEI_SERVICES **PeiServices\r
+ IN PEI_CORE_INSTANCE *PrivateData\r
)\r
/*++\r
\r
\r
VOID\r
DispatchNotify (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
+ IN PEI_CORE_INSTANCE *PrivateData,\r
IN UINTN NotifyType,\r
IN INTN InstallStartIndex,\r
IN INTN InstallStopIndex,\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
PeiFfsFindSectionData (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\r
IN EFI_SECTION_TYPE SectionType,\r
IN EFI_PEI_FILE_HANDLE FfsFileHeader,\r
IN OUT VOID **SectionData\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
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
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
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