]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/PeiMain.h
Merge the PI enabling works from the branch
[mirror_edk2.git] / MdeModulePkg / Core / Pei / PeiMain.h
index 3c7395e983a9ccdb51f9b8a770e38a3d4378a9a9..9e0d7a8530e9704c7f0eb4b10addb70943980c46 100644 (file)
@@ -26,6 +26,7 @@ Revision History
 \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
@@ -43,10 +44,13 @@ Revision History
 #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
@@ -69,6 +73,27 @@ typedef struct {
   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
@@ -92,6 +117,15 @@ typedef struct{
   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
@@ -128,7 +162,7 @@ EFI_STATUS
 //\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
@@ -428,7 +462,7 @@ Returns:
 \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
@@ -452,8 +486,8 @@ Returns:
 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
@@ -479,9 +513,9 @@ Returns:
 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
@@ -508,8 +542,8 @@ Returns:
 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
@@ -539,8 +573,8 @@ Returns:
 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
@@ -583,7 +617,7 @@ Returns:
 \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
@@ -616,7 +650,7 @@ Returns:  None
 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
@@ -641,7 +675,7 @@ Returns:
 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
@@ -738,7 +772,7 @@ Returns:
 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
@@ -764,7 +798,7 @@ Returns:
 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
@@ -824,10 +858,10 @@ Returns:
 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
@@ -858,9 +892,9 @@ Returns:
 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
@@ -886,9 +920,9 @@ Returns:
 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
@@ -948,7 +982,7 @@ Returns:
 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
@@ -975,7 +1009,7 @@ Returns:
 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
@@ -1009,7 +1043,7 @@ Returns:
 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
@@ -1067,12 +1101,12 @@ Returns:
 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
@@ -1128,6 +1162,24 @@ Returns:
 --*/\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