/** @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 |