X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FCore%2FPei%2FPeiMain.h;h=9e0d7a8530e9704c7f0eb4b10addb70943980c46;hp=e13604169887cb8a0bf849e80f5572c4bb577750;hb=0c2b5da80e9551286cd02a92d91090290ae2d816;hpb=192f6d4c29fa0dd595b8d5a36bd2078e1474aa4e diff --git a/MdeModulePkg/Core/Pei/PeiMain.h b/MdeModulePkg/Core/Pei/PeiMain.h index e136041698..9e0d7a8530 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.h +++ b/MdeModulePkg/Core/Pei/PeiMain.h @@ -24,13 +24,33 @@ Revision History #ifndef _PEI_MAIN_H_ #define _PEI_MAIN_H_ -// -// Include common header file for this module. -// -#include "CommonHeader.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include extern EFI_GUID gEfiPeiCorePrivateGuid; +#define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE 0xff + // // Pei Core private data structures // @@ -53,6 +73,27 @@ typedef struct { PEI_PPI_LIST_POINTERS PpiListPtrs[MAX_PPI_DESCRIPTORS]; } PEI_PPI_DATABASE; + +#define PEI_CORE_MAX_FV_SUPPORTED 4 +#define PEI_CORE_MAX_PEIM_PER_FV 32 + +// +// PEI_CORE_FV_HANDE.PeimState +// Do not change these values as there is code doing math to change states. +// Look for Private->Fv[FvCount].PeimState[PeimCount]++; +// +#define PEIM_STATE_NOT_DISPATCHED 0x00 +#define PEIM_STATE_DISPATCHED 0x01 +#define PEIM_STATE_REGISITER_FOR_SHADOW 0x02 +#define PEIM_STATE_DONE 0x03 + +typedef struct { + EFI_FIRMWARE_VOLUME_HEADER *FvHeader; + UINT8 PeimState[PEI_CORE_MAX_PEIM_PER_FV]; + EFI_PEI_FILE_HANDLE FvFileHandles[PEI_CORE_MAX_PEIM_PER_FV]; + BOOLEAN ScanFv; +} PEI_CORE_FV_HANDLE; + typedef struct { UINT8 CurrentPeim; UINT8 CurrentFv; @@ -76,6 +117,15 @@ typedef struct{ EFI_PEI_SERVICES *PS; // Point to ServiceTableShadow PEI_PPI_DATABASE PpiData; PEI_CORE_DISPATCH_DATA DispatchData; + UINTN FvCount; + PEI_CORE_FV_HANDLE Fv[PEI_CORE_MAX_FV_SUPPORTED]; + EFI_PEI_FILE_HANDLE CurrentFvFileHandles[PEI_CORE_MAX_PEIM_PER_FV]; + UINTN AprioriCount; + UINTN CurrentPeimFvCount; + UINTN CurrentPeimCount; + EFI_PEI_FILE_HANDLE CurrentFileHandle; + UINTN AllFvCount; + EFI_PEI_FV_HANDLE AllFv[PEI_CORE_MAX_FV_SUPPORTED]; EFI_PEI_HOB_POINTERS HobList; BOOLEAN SwitchStackSignal; BOOLEAN PeiMemoryInstalled; @@ -112,7 +162,7 @@ EFI_STATUS // typedef union { PEI_CORE_ENTRY_POINT PeiCore; - EFI_PEIM_ENTRY_POINT PeimEntry; + EFI_PEIM_ENTRY_POINT2 PeimEntry; EFI_PEIM_NOTIFY_ENTRY_POINT PeimNotifyEntry; EFI_DXE_IPL_PPI *DxeIpl; EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; @@ -412,7 +462,7 @@ Returns: VOID ConvertPpiPointers ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_HOB_HANDOFF_INFO_TABLE *OldHandOffHob, IN EFI_HOB_HANDOFF_INFO_TABLE *NewHandOffHob ) @@ -436,8 +486,8 @@ Returns: EFI_STATUS EFIAPI PeiInstallPpi ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PPI_DESCRIPTOR *PpiList + IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList ) /*++ @@ -463,9 +513,9 @@ Returns: EFI_STATUS EFIAPI PeiReInstallPpi ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PPI_DESCRIPTOR *OldPpi, - IN EFI_PEI_PPI_DESCRIPTOR *NewPpi + IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_PPI_DESCRIPTOR *OldPpi, + IN CONST EFI_PEI_PPI_DESCRIPTOR *NewPpi ) /*++ @@ -492,8 +542,8 @@ Returns: EFI_STATUS EFIAPI PeiLocatePpi ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_GUID *Guid, + IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_GUID *Guid, IN UINTN Instance, IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, IN OUT VOID **Ppi @@ -523,8 +573,8 @@ Returns: EFI_STATUS EFIAPI PeiNotifyPpi ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyList + IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_NOTIFY_DESCRIPTOR *NotifyList ) /*++ @@ -567,7 +617,7 @@ Returns: VOID DispatchNotify ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN UINTN NotifyType, IN INTN InstallStartIndex, IN INTN InstallStopIndex, @@ -600,7 +650,7 @@ Returns: None EFI_STATUS EFIAPI PeiGetBootMode ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN OUT EFI_BOOT_MODE *BootMode ) /*++ @@ -625,7 +675,7 @@ Returns: EFI_STATUS EFIAPI PeiSetBootMode ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_BOOT_MODE BootMode ) /*++ @@ -722,7 +772,7 @@ Returns: EFI_STATUS EFIAPI PeiGetHobList ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN OUT VOID **HobList ) /*++ @@ -748,7 +798,7 @@ Returns: EFI_STATUS EFIAPI PeiCreateHob ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN UINT16 Type, IN UINT16 Length, IN OUT VOID **Hob @@ -808,10 +858,10 @@ Returns: EFI_STATUS EFIAPI PeiFfsFindNextFile ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN UINT8 SearchType, - IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader, - IN OUT EFI_FFS_FILE_HEADER **FileHeader + IN EFI_PEI_FV_HANDLE FwVolHeader, + IN OUT EFI_PEI_FILE_HANDLE *FileHeader ) /*++ @@ -842,9 +892,9 @@ Returns: EFI_STATUS EFIAPI PeiFfsFindSectionData ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_SECTION_TYPE SectionType, - IN EFI_FFS_FILE_HEADER *FfsFileHeader, + IN EFI_PEI_FILE_HANDLE FfsFileHeader, IN OUT VOID **SectionData ) /*++ @@ -870,9 +920,9 @@ Returns: EFI_STATUS EFIAPI PeiFvFindNextVolume ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN UINTN Instance, - IN OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader + IN OUT EFI_PEI_FV_HANDLE *FwVolHeader ) /*++ @@ -932,7 +982,7 @@ Returns: EFI_STATUS EFIAPI PeiInstallPeiMemory ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_PHYSICAL_ADDRESS MemoryBegin, IN UINT64 MemoryLength ) @@ -959,7 +1009,7 @@ Returns: EFI_STATUS EFIAPI PeiAllocatePages ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_MEMORY_TYPE MemoryType, IN UINTN Pages, OUT EFI_PHYSICAL_ADDRESS *Memory @@ -993,7 +1043,7 @@ Returns: EFI_STATUS EFIAPI PeiAllocatePool ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN UINTN Size, OUT VOID **Buffer ) @@ -1051,12 +1101,12 @@ Returns: EFI_STATUS EFIAPI PeiReportStatusCode ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_STATUS_CODE_TYPE CodeType, IN EFI_STATUS_CODE_VALUE Value, IN UINT32 Instance, - IN EFI_GUID *CallerId, - IN EFI_STATUS_CODE_DATA *Data OPTIONAL + IN CONST EFI_GUID *CallerId, + IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL ) /*++ @@ -1112,6 +1162,24 @@ Returns: --*/ ; +/** + This routine enable a PEIM to register itself to shadow when PEI Foundation + discovery permanent memory. + + @param FileHandle File handle of a PEIM. + + @retval EFI_NOT_FOUND The file handle doesn't point to PEIM itself. + @retval EFI_ALREADY_STARTED Indicate that the PEIM has been registered itself. + @retval EFI_SUCCESS Successfully to register itself. + +**/ +EFI_STATUS +EFIAPI +PeiRegisterForShadow ( + IN EFI_PEI_FILE_HANDLE FileHandle + ) +; + /** Transfers control to a function starting with a new stack.