X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FCore%2FPei%2FPeiMain.h;h=ef2d592a5e51bcd6b92f1e41d23028672146cbb3;hp=b4d246211670cf038912e9285d9b5da0eb2f761b;hb=50cb16d9ee13536d842beb8467d65b75776205b6;hpb=5aae0aa7d8347ce30d856aa5f39c53d181654e8b diff --git a/MdeModulePkg/Core/Pei/PeiMain.h b/MdeModulePkg/Core/Pei/PeiMain.h index b4d2462116..ef2d592a5e 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.h +++ b/MdeModulePkg/Core/Pei/PeiMain.h @@ -25,15 +25,16 @@ Revision History #define _PEI_MAIN_H_ #include -#include -#include #include #include -#include #include -#include #include -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -41,13 +42,18 @@ Revision History #include #include #include +#include #include #include +#include #include +#include #include #include - -extern EFI_GUID gEfiPeiCorePrivateGuid; +#include +#include +#include +#include #define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE 0xff @@ -62,7 +68,7 @@ typedef union { #define PEI_STACK_SIZE 0x20000 -#define MAX_PPI_DESCRIPTORS 64 +#define MAX_PPI_DESCRIPTORS 128 typedef struct { INTN PpiListEnd; @@ -74,9 +80,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,22 +92,19 @@ 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; +#define CACHE_SETION_MAX_NUMBER 0x10 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; - + EFI_COMMON_SECTION_HEADER* Section[CACHE_SETION_MAX_NUMBER]; + VOID* SectionData[CACHE_SETION_MAX_NUMBER]; + UINTN SectionSize[CACHE_SETION_MAX_NUMBER]; + UINTN AllSectionCount; + UINTN SectionIndex; +} CACHE_SECTION_DATA; // // Pei Core private data structure instance @@ -116,16 +116,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 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 +133,12 @@ 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; + CACHE_SECTION_DATA CacheSection; } PEI_CORE_INSTANCE; // @@ -153,8 +154,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 +173,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 +216,10 @@ Returns: // Dispatcher support functions // -EFI_STATUS +BOOLEAN PeimDispatchReadiness ( IN EFI_PEI_SERVICES **PeiServices, - IN VOID *DependencyExpression, - IN OUT BOOLEAN *Runnable + IN VOID *DependencyExpression ) /*++ @@ -230,9 +238,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: @@ -247,11 +252,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 +281,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 ) @@ -303,35 +307,6 @@ Returns: ; -EFI_STATUS -FindNextPeim ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader, - IN OUT EFI_FFS_FILE_HEADER **PeimFileHeader - ) -/*++ - -Routine Description: - Given the input file pointer, search for the next matching file in the - FFS volume. The search starts from FileHeader inside - the Firmware Volume defined by FwVolHeader. - -Arguments: - PeiServices - Pointer to the PEI Core Services Table. - - FwVolHeader - Pointer to the FV header of the volume to search. - This parameter must point to a valid FFS volume. - - PeimFileHeader - Pointer to the current file from which to begin searching. - This pointer will be updated upon return to reflect the file found. - -Returns: - EFI_NOT_FOUND - No files matching the search criteria were found - EFI_SUCCESS - ---*/ -; - BOOLEAN Dispatched ( IN UINT8 CurrentPeim, @@ -382,8 +357,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 +416,7 @@ Returns: // VOID InitializePpiServices ( - IN EFI_PEI_SERVICES **PeiServices, + IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_INSTANCE *OldCoreData ) /*++ @@ -599,7 +575,7 @@ Returns: VOID ProcessNotifyList ( - IN EFI_PEI_SERVICES **PeiServices + IN PEI_CORE_INSTANCE *PrivateData ) /*++ @@ -618,7 +594,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 +723,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 +870,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 +933,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 +1051,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 +1119,7 @@ Returns: EFI_STATUS EFIAPI PeiResetSystem ( - IN EFI_PEI_SERVICES **PeiServices + IN CONST EFI_PEI_SERVICES **PeiServices ) /*++ @@ -1163,17 +1141,159 @@ 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. @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 ( @@ -1209,9 +1329,82 @@ 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. + +--*/ +; + +/** + Get Fv image from the FV type file, then install FV INFO ppi, Build FV hob. + + @param PeiServices Pointer to the PEI Core Services Table. + @param FileHandle File handle of a Fv type file. + @param AuthenticationState Pointer to attestation authentication state of image. + + + @retval EFI_NOT_FOUND FV image can't be found. + @retval EFI_SUCCESS Successfully to process it. + +**/ +EFI_STATUS +ProcessFvFile ( + IN EFI_PEI_SERVICES **PeiServices, + IN EFI_PEI_FILE_HANDLE FvFileHandle, + OUT UINT32 *AuthenticationState + ); + #endif