#ifndef _PEI_MAIN_H_\r
#define _PEI_MAIN_H_\r
\r
-//\r
-// Include common header file for this module.\r
-//\r
-#include "CommonHeader.h"\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 <Library/DebugLib.h>\r
+#include <Library/PeiCoreEntryPoint.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/HobLib.h>\r
+#include <Library/PerformanceLib.h>\r
+#include <Library/PeiServicesLib.h>\r
+#include <Library/ReportStatusCodeLib.h>\r
+#include <Library/PeCoffGetEntryPointLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/TimerLib.h>\r
+#include <IndustryStandard/PeImage.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