/** @file Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __UEFI_PAYLOAD_ENTRY_H__ #define __UEFI_PAYLOAD_ENTRY_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LEGACY_8259_MASK_REGISTER_MASTER 0x21 #define LEGACY_8259_MASK_REGISTER_SLAVE 0xA1 #define GET_OCCUPIED_SIZE(ActualSize, Alignment) \ ((ActualSize) + (((Alignment) - ((ActualSize) & ((Alignment) - 1))) & ((Alignment) - 1))) #define E820_RAM 1 #define E820_RESERVED 2 #define E820_ACPI 3 #define E820_NVS 4 #define E820_UNUSABLE 5 #define E820_DISABLED 6 #define E820_PMEM 7 #define E820_UNDEFINED 8 /** Add a new HOB to the HOB List. @param HobType Type of the new HOB. @param HobLength Length of the new HOB to allocate. @return NULL if there is no space to create a hob. @return The address point to the new created hob. **/ VOID * EFIAPI CreateHob ( IN UINT16 HobType, IN UINT16 HobLength ); /** Update the Stack Hob if the stack has been moved @param BaseAddress The 64 bit physical address of the Stack. @param Length The length of the stack in bytes. **/ VOID EFIAPI UpdateStackHob ( IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length ); /** Build a Handoff Information Table HOB This function initialize a HOB region from EfiMemoryBegin to EfiMemoryTop. And EfiFreeMemoryBottom and EfiFreeMemoryTop should be inside the HOB region. @param[in] EfiMemoryBottom Total memory start address @param[in] EfiMemoryTop Total memory end address. @param[in] EfiFreeMemoryBottom Free memory start address @param[in] EfiFreeMemoryTop Free memory end address. @return The pointer to the handoff HOB table. **/ EFI_HOB_HANDOFF_INFO_TABLE * EFIAPI HobConstructor ( IN VOID *EfiMemoryBottom, IN VOID *EfiMemoryTop, IN VOID *EfiFreeMemoryBottom, IN VOID *EfiFreeMemoryTop ); /** Find DXE core from FV and build DXE core HOBs. @param[out] DxeCoreEntryPoint DXE core entry point @retval EFI_SUCCESS If it completed successfully. @retval EFI_NOT_FOUND If it failed to load DXE FV. **/ EFI_STATUS LoadDxeCore ( OUT PHYSICAL_ADDRESS *DxeCoreEntryPoint ); /** Find DXE core from FV and build DXE core HOBs. @param[in] DxeFv The FV where to find the DXE core. @param[out] DxeCoreEntryPoint DXE core entry point @retval EFI_SUCCESS If it completed successfully. @retval EFI_NOT_FOUND If it failed to load DXE FV. **/ EFI_STATUS UniversalLoadDxeCore ( IN EFI_FIRMWARE_VOLUME_HEADER *DxeFv, OUT PHYSICAL_ADDRESS *DxeCoreEntryPoint ); /** Transfers control to DxeCore. This function performs a CPU architecture specific operations to execute the entry point of DxeCore with the parameters of HobList. @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 ); EFI_STATUS FixUpPcdDatabase ( IN EFI_FIRMWARE_VOLUME_HEADER *DxeFv ); /** This function searchs a given section type within a valid FFS file. @param FileHeader A pointer to the file header that contains the set of sections to be searched. @param SearchType The value of the section type to search. @param SectionData A pointer to the discovered section, if successful. @retval EFI_SUCCESS The section was found. @retval EFI_NOT_FOUND The section was not found. **/ EFI_STATUS FileFindSection ( IN EFI_FFS_FILE_HEADER *FileHeader, IN EFI_SECTION_TYPE SectionType, OUT VOID **SectionData ); /** This function searchs a given file type with a given Guid within a valid FV. If input Guid is NULL, will locate the first section having the given file type @param FvHeader A pointer to firmware volume header that contains the set of files to be searched. @param FileType File type to be searched. @param Guid Will ignore if it is NULL. @param FileHeader A pointer to the discovered file, if successful. @retval EFI_SUCCESS Successfully found FileType @retval EFI_NOT_FOUND File type can't be found. **/ EFI_STATUS FvFindFileByTypeGuid ( IN EFI_FIRMWARE_VOLUME_HEADER *FvHeader, IN EFI_FV_FILETYPE FileType, IN EFI_GUID *Guid OPTIONAL, OUT EFI_FFS_FILE_HEADER **FileHeader ); /** Build ACPI board info HOB using infomation from ACPI table @param AcpiTableBase ACPI table start address in memory @retval A pointer to ACPI board HOB ACPI_BOARD_INFO. Null if build HOB failure. **/ ACPI_BOARD_INFO * BuildHobFromAcpi ( IN UINT64 AcpiTableBase ); #endif