\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
--*/\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