X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;ds=sidebyside;f=MdeModulePkg%2FCore%2FPei%2FPeiMain.h;h=156c6b2ed44d459ef320ffaff79928a4973d2493;hb=1d9cf613bc1b9a65d633eb1534f9db1e3b1f5483;hp=e71ae78b0439e96b877daa269bb6c4b93f8ae1ed;hpb=14e8823a34c01cf6d75b37c959fb2cae91caf771;p=mirror_edk2.git diff --git a/MdeModulePkg/Core/Pei/PeiMain.h b/MdeModulePkg/Core/Pei/PeiMain.h index e71ae78b04..156c6b2ed4 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.h +++ b/MdeModulePkg/Core/Pei/PeiMain.h @@ -29,11 +29,14 @@ Revision History #include #include #include -#include #include -#include #include -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -41,13 +44,17 @@ Revision History #include #include #include +#include #include #include +#include #include +#include #include #include - -extern EFI_GUID gEfiPeiCorePrivateGuid; +#include +#include +#include #define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE 0xff @@ -74,9 +81,6 @@ typedef struct { } 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. @@ -89,23 +93,11 @@ typedef struct { 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]; + UINT8 PeimState[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)]; + EFI_PEI_FILE_HANDLE FvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)]; BOOLEAN ScanFv; } PEI_CORE_FV_HANDLE; -typedef struct { - UINT8 CurrentPeim; - UINT8 CurrentFv; - UINT32 DispatchedPeimBitMap; - UINT32 PreviousPeimBitMap; - EFI_FFS_FILE_HEADER *CurrentPeimAddress; - EFI_FIRMWARE_VOLUME_HEADER *CurrentFvAddress; - EFI_FIRMWARE_VOLUME_HEADER *BootFvAddress; - EFI_PEI_FIND_FV_PPI *FindFv; -} PEI_CORE_DISPATCH_DATA; - - // // Pei Core private data structure instance // @@ -116,16 +108,15 @@ typedef struct{ UINTN Signature; 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]; + PEI_CORE_FV_HANDLE Fv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)]; + EFI_PEI_FILE_HANDLE CurrentFvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)]; 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_FV_HANDLE AllFv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)]; EFI_PEI_HOB_POINTERS HobList; BOOLEAN SwitchStackSignal; BOOLEAN PeiMemoryInstalled; @@ -134,10 +125,11 @@ typedef struct{ VOID *BottomOfCarHeap; VOID *TopOfCarHeap; VOID *CpuIo; - EFI_PEI_SECURITY_PPI *PrivateSecurityPpi; + EFI_PEI_SECURITY2_PPI *PrivateSecurityPpi; EFI_PEI_SERVICES ServiceTableShadow; UINTN SizeOfCacheAsRam; VOID *MaxTopOfCarHeap; + EFI_PEI_PPI_DESCRIPTOR *XipLoadFile; } PEI_CORE_INSTANCE; // @@ -153,8 +145,9 @@ typedef struct{ typedef EFI_STATUS (EFIAPI *PEI_CORE_ENTRY_POINT)( - IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor, - IN PEI_CORE_INSTANCE *OldCoreData + IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, + IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList, + IN PEI_CORE_INSTANCE *OldCoreData ); // @@ -171,14 +164,22 @@ typedef union { } PEI_CORE_TEMP_POINTERS; + +typedef struct { + CONST EFI_SEC_PEI_HAND_OFF *SecCoreData; + EFI_PEI_PPI_DESCRIPTOR *PpiList; + VOID *Data; +} PEI_CORE_PARAMETERS; + // // PeiCore function // EFI_STATUS EFIAPI PeiCore ( - IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor, - IN VOID *Data + IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, + IN CONST EFI_PEI_PPI_DESCRIPTOR *PpList, + IN VOID *Data ) /*++ @@ -206,11 +207,10 @@ Returns: // Dispatcher support functions // -EFI_STATUS +BOOLEAN PeimDispatchReadiness ( IN EFI_PEI_SERVICES **PeiServices, - IN VOID *DependencyExpression, - IN OUT BOOLEAN *Runnable + IN VOID *DependencyExpression ) /*++ @@ -229,9 +229,6 @@ Arguments: DependencyExpression - Pointer to a dependency expression. The Grammar adheres to the BNF described above and is stored in postfix notation. - Runnable - is True if the driver can be scheduled and False if the driver - cannot be scheduled. This is the value that the schedulers - should use for deciding the state of the driver. Returns: @@ -246,11 +243,10 @@ Returns: ; -EFI_STATUS +VOID PeiDispatcher ( - IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor, - IN PEI_CORE_INSTANCE *PrivateData, - IN PEI_CORE_DISPATCH_DATA *DispatchData + IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, + IN PEI_CORE_INSTANCE *PrivateData ) /*++ @@ -276,9 +272,9 @@ Returns: VOID InitializeDispatcherData ( - IN EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_INSTANCE *OldCoreData, - IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor + IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData ) /*++ @@ -381,8 +377,9 @@ Returns: BOOLEAN DepexSatisfied ( - IN EFI_PEI_SERVICES **PeiServices, - IN VOID *CurrentPeimAddress + IN PEI_CORE_INSTANCE *Private, + IN EFI_PEI_FILE_HANDLE FileHandle, + IN UINTN PeimCount ) /*++ @@ -439,7 +436,7 @@ Returns: // VOID InitializePpiServices ( - IN EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_INSTANCE *OldCoreData ) /*++ @@ -462,7 +459,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 ) @@ -486,8 +483,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 ) /*++ @@ -513,9 +510,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 ) /*++ @@ -542,8 +539,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 @@ -573,8 +570,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 ) /*++ @@ -598,7 +595,7 @@ Returns: VOID ProcessNotifyList ( - IN EFI_PEI_SERVICES **PeiServices + IN PEI_CORE_INSTANCE *PrivateData ) /*++ @@ -617,7 +614,7 @@ Returns: VOID DispatchNotify ( - IN EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN UINTN NotifyType, IN INTN InstallStartIndex, IN INTN InstallStopIndex, @@ -650,7 +647,7 @@ Returns: None EFI_STATUS EFIAPI PeiGetBootMode ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN OUT EFI_BOOT_MODE *BootMode ) /*++ @@ -675,7 +672,7 @@ Returns: EFI_STATUS EFIAPI PeiSetBootMode ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_BOOT_MODE BootMode ) /*++ @@ -746,8 +743,9 @@ Returns: EFI_STATUS VerifyPeim ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_FFS_FILE_HEADER *CurrentPeimAddress + IN PEI_CORE_INSTANCE *PrivateData, + IN EFI_PEI_FV_HANDLE VolumeHandle, + IN EFI_PEI_FILE_HANDLE FileHandle ) /*++ @@ -772,7 +770,7 @@ Returns: EFI_STATUS EFIAPI PeiGetHobList ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN OUT VOID **HobList ) /*++ @@ -798,7 +796,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 @@ -858,10 +856,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 ) /*++ @@ -892,9 +890,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 ) /*++ @@ -920,9 +918,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 ) /*++ @@ -955,8 +953,8 @@ Returns: // VOID InitializeMemoryServices ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor, + IN PEI_CORE_INSTANCE *PrivateData, + IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN PEI_CORE_INSTANCE *OldCoreData ) /*++ @@ -982,7 +980,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 ) @@ -1009,7 +1007,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 @@ -1043,7 +1041,7 @@ Returns: EFI_STATUS EFIAPI PeiAllocatePool ( - IN EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN UINTN Size, OUT VOID **Buffer ) @@ -1073,8 +1071,9 @@ Returns: EFI_STATUS PeiLoadImage ( IN EFI_PEI_SERVICES **PeiServices, - IN EFI_FFS_FILE_HEADER *PeimFileHeader, - OUT VOID **EntryPoint + IN EFI_PEI_FILE_HANDLE FileHandle, + OUT EFI_PHYSICAL_ADDRESS *EntryPoint, + OUT UINT32 *AuthenticationState ) /*++ @@ -1101,12 +1100,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 ) /*++ @@ -1140,7 +1139,7 @@ Returns: EFI_STATUS EFIAPI PeiResetSystem ( - IN EFI_PEI_SERVICES **PeiServices + IN CONST EFI_PEI_SERVICES **PeiServices ) /*++ @@ -1162,6 +1161,148 @@ Returns: --*/ ; +VOID +PeiInitializeFv ( + IN PEI_CORE_INSTANCE *PrivateData, + IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData + ) +/*++ + +Routine Description: + + Initialize PeiCore Fv List. + +Arguments: + PrivateData - Pointer to PEI_CORE_INSTANCE. + SecCoreData - Pointer to EFI_SEC_PEI_HAND_OFF. + +Returns: + NONE + +--*/ +; + +EFI_STATUS +EFIAPI +FirmwareVolmeInfoPpiNotifyCallback ( + IN EFI_PEI_SERVICES **PeiServices, + IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor, + IN VOID *Ppi + ) +/*++ + +Routine Description: + + Process Firmware Volum Information once FvInfoPPI install. + +Arguments: + + PeiServices - General purpose services available to every PEIM. + +Returns: + + Status - EFI_SUCCESS if the interface could be successfully + installed + +--*/ +; + + +EFI_STATUS +EFIAPI +PeiFfsFindFileByName ( + IN CONST EFI_GUID *FileName, + IN EFI_PEI_FV_HANDLE VolumeHandle, + OUT EFI_PEI_FILE_HANDLE *FileHandle + ) +/*++ + +Routine Description: + + Given the input VolumeHandle, search for the next matching name file. + +Arguments: + + FileName - File name to search. + VolumeHandle - The current FV to search. + FileHandle - Pointer to the file matching name in VolumeHandle. + - NULL if file not found +Returns: + EFI_STATUS + +--*/ +; + + +EFI_STATUS +EFIAPI +PeiFfsGetFileInfo ( + IN EFI_PEI_FILE_HANDLE FileHandle, + OUT EFI_FV_FILE_INFO *FileInfo + ) +/*++ + +Routine Description: + + Collect information of given file. + +Arguments: + FileHandle - The handle to file. + FileInfo - Pointer to the file information. + +Returns: + EFI_STATUS + +--*/ +; + +EFI_STATUS +EFIAPI +PeiFfsGetVolumeInfo ( + IN EFI_PEI_FV_HANDLE VolumeHandle, + OUT EFI_FV_INFO *VolumeInfo + ) +/*++ + +Routine Description: + + Collect information of given Fv Volume. + +Arguments: + VolumeHandle - The handle to Fv Volume. + VolumeInfo - The pointer to volume information. + +Returns: + EFI_STATUS + +--*/ +; + + +EFI_STATUS +EFIAPI +PeiRegisterForShadow ( + IN EFI_PEI_FILE_HANDLE FileHandle + ) +/*++ + +Routine Description: + + This routine enable a PEIM to register itself to shadow when PEI Foundation + discovery permanent memory. + +Arguments: + FileHandle - File handle of a PEIM. + +Returns: + EFI_NOT_FOUND - The file handle doesn't point to PEIM itself. + EFI_ALREADY_STARTED - Indicate that the PEIM has been registered itself. + EFI_SUCCESS - Successfully to register itself. + +--*/ +; + + /** This routine enable a PEIM to register itself to shadow when PEI Foundation discovery permanent memory. @@ -1212,4 +1353,59 @@ PeiSwitchStacks ( IN VOID *NewBsp ); +EFI_STATUS +PeiFindFileEx ( + IN CONST EFI_PEI_FV_HANDLE FvHandle, + IN CONST EFI_GUID *FileName, OPTIONAL + IN EFI_FV_FILETYPE SearchType, + IN OUT EFI_PEI_FILE_HANDLE *FileHandle, + IN OUT EFI_PEI_FV_HANDLE *AprioriFile OPTIONAL + ) +/*++ + +Routine Description: + Given the input file pointer, search for the next matching file in the + FFS volume as defined by SearchType. The search starts from FileHeader inside + the Firmware Volume defined by FwVolHeader. + +Arguments: + PeiServices - Pointer to the PEI Core Services Table. + SearchType - Filter to find only files of this type. + Type EFI_FV_FILETYPE_ALL causes no filtering to be done. + FwVolHeader - Pointer to the FV header of the volume to search. + This parameter must point to a valid FFS volume. + FileHeader - Pointer to the current file from which to begin searching. + This pointer will be updated upon return to reflect the file found. + Flag - Indicator for if this is for PEI Dispath search + +Returns: + EFI_NOT_FOUND - No files matching the search criteria were found + EFI_SUCCESS + +--*/ +; + +VOID +InitializeImageServices ( + IN PEI_CORE_INSTANCE *PrivateData, + IN PEI_CORE_INSTANCE *OldCoreData + ) +/*++ + +Routine Description: + + Install Pei Load File PPI. + +Arguments: + + PrivateData - Pointer to PEI_CORE_INSTANCE. + OldCoreData - Pointer to PEI_CORE_INSTANCE. + +Returns: + + NONE. + +--*/ +; + #endif