| /** @file | |
| Master header file for DxeIpl PEIM. All source files in this module should | |
| include this file for common definitions. | |
| Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __PEI_DXEIPL_H__ | |
| #define __PEI_DXEIPL_H__ | |
| #include <PiPei.h> | |
| #include <Ppi/DxeIpl.h> | |
| #include <Ppi/EndOfPeiPhase.h> | |
| #include <Ppi/MemoryDiscovered.h> | |
| #include <Ppi/ReadOnlyVariable2.h> | |
| #include <Ppi/Decompress.h> | |
| #include <Ppi/FirmwareVolumeInfo.h> | |
| #include <Ppi/GuidedSectionExtraction.h> | |
| #include <Ppi/LoadFile.h> | |
| #include <Ppi/S3Resume2.h> | |
| #include <Ppi/RecoveryModule.h> | |
| #include <Ppi/CapsuleOnDisk.h> | |
| #include <Ppi/VectorHandoffInfo.h> | |
| #include <Guid/MemoryTypeInformation.h> | |
| #include <Guid/MemoryAllocationHob.h> | |
| #include <Guid/FirmwareFileSystem2.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/PeimEntryPoint.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/HobLib.h> | |
| #include <Library/PeiServicesLib.h> | |
| #include <Library/ReportStatusCodeLib.h> | |
| #include <Library/UefiDecompressLib.h> | |
| #include <Library/ExtractGuidedSectionLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/PcdLib.h> | |
| #include <Library/DebugAgentLib.h> | |
| #include <Library/PeiServicesTablePointerLib.h> | |
| #include <Library/PerformanceLib.h> | |
| #define STACK_SIZE 0x20000 | |
| #define BSP_STORE_SIZE 0x4000 | |
| // | |
| // This PPI is installed to indicate the end of the PEI usage of memory | |
| // | |
| extern CONST EFI_PEI_PPI_DESCRIPTOR gEndOfPeiSignalPpi; | |
| /** | |
| This function installs the PPIs that require permanent memory. | |
| @param PeiServices Indirect reference to the PEI Services Table. | |
| @param NotifyDescriptor Address of the notification descriptor data structure. | |
| @param Ppi Address of the PPI that was installed. | |
| @return EFI_SUCCESS The PPIs were installed successfully. | |
| @return Others Some error occurs during the execution of this function. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| InstallIplPermanentMemoryPpis ( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor, | |
| IN VOID *Ppi | |
| ); | |
| /** | |
| Searches DxeCore in all firmware Volumes and loads the first | |
| instance that contains DxeCore. | |
| @return FileHandle of DxeCore to load DxeCore. | |
| **/ | |
| EFI_PEI_FILE_HANDLE | |
| DxeIplFindDxeCore ( | |
| VOID | |
| ); | |
| /** | |
| Main entry point to last PEIM | |
| @param This Entry point for DXE IPL PPI | |
| @param PeiServices General purpose services available to every PEIM. | |
| @param HobList Address to the Pei HOB list | |
| @return EFI_SUCCESS DXE core was successfully loaded. | |
| @return EFI_OUT_OF_RESOURCES There are not enough resources to load DXE core. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| DxeLoadCore ( | |
| IN CONST EFI_DXE_IPL_PPI *This, | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN EFI_PEI_HOB_POINTERS HobList | |
| ); | |
| /** | |
| Transfers control to DxeCore. | |
| This function performs a CPU architecture specific operations to execute | |
| the entry point of DxeCore with the parameters of HobList. | |
| It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase. | |
| @param DxeCoreEntryPoint The entry point of DxeCore. | |
| @param HobList The start of HobList passed to DxeCore. | |
| **/ | |
| VOID | |
| HandOffToDxeCore ( | |
| IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint, | |
| IN EFI_PEI_HOB_POINTERS HobList | |
| ); | |
| /** | |
| Updates the Stack HOB passed to DXE phase. | |
| This function traverses the whole HOB list and update the stack HOB to | |
| reflect the real stack that is used by DXE core. | |
| @param BaseAddress The lower address of stack used by DxeCore. | |
| @param Length The length of stack used by DxeCore. | |
| **/ | |
| VOID | |
| UpdateStackHob ( | |
| IN EFI_PHYSICAL_ADDRESS BaseAddress, | |
| IN UINT64 Length | |
| ); | |
| /** | |
| The ExtractSection() function processes the input section and | |
| returns a pointer to the section contents. If the section being | |
| extracted does not require processing (if the section | |
| GuidedSectionHeader.Attributes has the | |
| EFI_GUIDED_SECTION_PROCESSING_REQUIRED field cleared), then | |
| OutputBuffer is just updated to point to the start of the | |
| section's contents. Otherwise, *Buffer must be allocated | |
| from PEI permanent memory. | |
| @param This Indicates the | |
| EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI instance. | |
| Buffer containing the input GUIDed section to be | |
| processed. OutputBuffer OutputBuffer is | |
| allocated from PEI permanent memory and contains | |
| the new section stream. | |
| @param InputSection A pointer to the input buffer, which contains | |
| the input section to be processed. | |
| @param OutputBuffer A pointer to a caller-allocated buffer, whose | |
| size is specified by the contents of OutputSize. | |
| @param OutputSize A pointer to a caller-allocated | |
| UINTN in which the size of *OutputBuffer | |
| allocation is stored. If the function | |
| returns anything other than EFI_SUCCESS, | |
| the value of OutputSize is undefined. | |
| @param AuthenticationStatus A pointer to a caller-allocated | |
| UINT32 that indicates the | |
| authentication status of the | |
| output buffer. If the input | |
| section's GuidedSectionHeader. | |
| Attributes field has the | |
| EFI_GUIDED_SECTION_AUTH_STATUS_VALID | |
| bit as clear, | |
| AuthenticationStatus must return | |
| zero. These bits reflect the | |
| status of the extraction | |
| operation. If the function | |
| returns anything other than | |
| EFI_SUCCESS, the value of | |
| AuthenticationStatus is | |
| undefined. | |
| @retval EFI_SUCCESS The InputSection was | |
| successfully processed and the | |
| section contents were returned. | |
| @retval EFI_OUT_OF_RESOURCES The system has insufficient | |
| resources to process the request. | |
| @retval EFI_INVALID_PARAMETER The GUID in InputSection does | |
| not match this instance of the | |
| GUIDed Section Extraction PPI. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| CustomGuidedSectionExtract ( | |
| IN CONST EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI *This, | |
| IN CONST VOID *InputSection, | |
| OUT VOID **OutputBuffer, | |
| OUT UINTN *OutputSize, | |
| OUT UINT32 *AuthenticationStatus | |
| ); | |
| /** | |
| Decompresses a section to the output buffer. | |
| This function looks up the compression type field in the input section and | |
| applies the appropriate compression algorithm to compress the section to a | |
| callee allocated buffer. | |
| @param This Points to this instance of the | |
| EFI_PEI_DECOMPRESS_PEI PPI. | |
| @param CompressionSection Points to the compressed section. | |
| @param OutputBuffer Holds the returned pointer to the decompressed | |
| sections. | |
| @param OutputSize Holds the returned size of the decompress | |
| section streams. | |
| @retval EFI_SUCCESS The section was decompressed successfully. | |
| OutputBuffer contains the resulting data and | |
| OutputSize contains the resulting size. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| Decompress ( | |
| IN CONST EFI_PEI_DECOMPRESS_PPI *This, | |
| IN CONST EFI_COMPRESSION_SECTION *CompressionSection, | |
| OUT VOID **OutputBuffer, | |
| OUT UINTN *OutputSize | |
| ); | |
| #endif |