X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FCore%2FPei%2FPeiMain.h;h=8c133d2b1ac6a1e56f402199c68aa066f1e2c591;hp=b4d246211670cf038912e9285d9b5da0eb2f761b;hb=177aabe660ae3ce78faa3789709619a98017f0a4;hpb=5aae0aa7d8347ce30d856aa5f39c53d181654e8b diff --git a/MdeModulePkg/Core/Pei/PeiMain.h b/MdeModulePkg/Core/Pei/PeiMain.h index b4d2462116..8c133d2b1a 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,6 +164,13 @@ 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 // @@ -207,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 ) /*++ @@ -247,11 +246,10 @@ Returns: ; -EFI_STATUS +VOID PeiDispatcher ( IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, - IN PEI_CORE_INSTANCE *PrivateData, - IN PEI_CORE_DISPATCH_DATA *DispatchData + IN PEI_CORE_INSTANCE *PrivateData ) /*++ @@ -277,7 +275,7 @@ Returns: VOID InitializeDispatcherData ( - IN EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_INSTANCE *OldCoreData, IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData ) @@ -382,8 +380,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 ) /*++ @@ -440,7 +439,7 @@ Returns: // VOID InitializePpiServices ( - IN EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_INSTANCE *OldCoreData ) /*++ @@ -599,7 +598,7 @@ Returns: VOID ProcessNotifyList ( - IN EFI_PEI_SERVICES **PeiServices + IN PEI_CORE_INSTANCE *PrivateData ) /*++ @@ -618,7 +617,7 @@ Returns: VOID DispatchNotify ( - IN CONST EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN UINTN NotifyType, IN INTN InstallStartIndex, IN INTN InstallStopIndex, @@ -747,8 +746,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 ) /*++ @@ -893,7 +893,7 @@ Returns: EFI_STATUS EFIAPI PeiFfsFindSectionData ( - IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_SECTION_TYPE SectionType, IN EFI_PEI_FILE_HANDLE FfsFileHeader, IN OUT VOID **SectionData @@ -956,7 +956,7 @@ Returns: // VOID InitializeMemoryServices ( - IN EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN PEI_CORE_INSTANCE *OldCoreData ) @@ -1074,8 +1074,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 ) /*++ @@ -1141,7 +1142,7 @@ Returns: EFI_STATUS EFIAPI PeiResetSystem ( - IN EFI_PEI_SERVICES **PeiServices + IN CONST EFI_PEI_SERVICES **PeiServices ) /*++ @@ -1163,6 +1164,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. @@ -1209,9 +1352,63 @@ PeiSwitchStacks ( IN SWITCH_STACK_ENTRY_POINT EntryPoint, IN VOID *Context1, OPTIONAL IN VOID *Context2, OPTIONAL - IN VOID *Context3, OPTIONAL IN VOID *NewStack, 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