\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/LoadFile.h>\r
+#include <Ppi/FvLoadFile.h>\r
#include <Library/DebugLib.h>\r
#include <Library/PeiCoreEntryPoint.h>\r
#include <Library/BaseLib.h>\r
#include <Library/PeCoffGetEntryPointLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/TimerLib.h>\r
-\r
+#include <IndustryStandard/PeImage.h>\r
+#include <Library/PeiServicesTablePointerLib.h>\r
\r
extern EFI_GUID gEfiPeiCorePrivateGuid;\r
\r
+#define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE 0xff\r
+\r
//\r
// Pei Core private data structures\r
//\r
PEI_PPI_LIST_POINTERS PpiListPtrs[MAX_PPI_DESCRIPTORS];\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
+// 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[PEI_CORE_MAX_PEIM_PER_FV]; \r
+ EFI_PEI_FILE_HANDLE FvFileHandles[PEI_CORE_MAX_PEIM_PER_FV];\r
+ BOOLEAN ScanFv;\r
+} PEI_CORE_FV_HANDLE;\r
+\r
typedef struct {\r
UINT8 CurrentPeim;\r
UINT8 CurrentFv;\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
+ UINTN AprioriCount;\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_HOB_POINTERS HobList;\r
BOOLEAN SwitchStackSignal;\r
BOOLEAN PeiMemoryInstalled;\r
//\r
typedef union {\r
PEI_CORE_ENTRY_POINT PeiCore;\r
- EFI_PEIM_ENTRY_POINT PeimEntry;\r
+ EFI_PEIM_ENTRY_POINT2 PeimEntry;\r
EFI_PEIM_NOTIFY_ENTRY_POINT PeimNotifyEntry;\r
EFI_DXE_IPL_PPI *DxeIpl;\r
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;\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
\r
EFI_STATUS\r
PeiDispatcher (\r
- IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor,\r
+ IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,\r
IN PEI_CORE_INSTANCE *PrivateData,\r
IN PEI_CORE_DISPATCH_DATA *DispatchData\r
)\r
InitializeDispatcherData (\r
IN EFI_PEI_SERVICES **PeiServices,\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
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
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
DispatchNotify (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\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
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
VOID\r
InitializeMemoryServices (\r
IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor,\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
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
--*/\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
IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
IN VOID *Context1, OPTIONAL\r
IN VOID *Context2, OPTIONAL\r
+ IN VOID *Context3, OPTIONAL\r
IN VOID *NewStack,\r
IN VOID *NewBsp\r
);\r