V2: Update BuildHobFromAcpi() to return a HOB pointer. For universal UEFI payload, build a HOB from the ACPI table, so that other modules could use this info from HOB at very early DXE phase. This code are shared by universal payload and non universal payload. Cc: Ray Ni <ray.ni@intel.com> Cc: Maurice Ma <maurice.ma@intel.com> Cc: Benjamin You <benjamin.you@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Signed-off-by: Guo Dong <guo.dong@intel.com>
221 lines
6.2 KiB
C
221 lines
6.2 KiB
C
/** @file
|
|
*
|
|
* Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
*
|
|
**/
|
|
|
|
#ifndef __UEFI_PAYLOAD_ENTRY_H__
|
|
#define __UEFI_PAYLOAD_ENTRY_H__
|
|
|
|
#include <PiPei.h>
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/PeCoffLib.h>
|
|
#include <Library/HobLib.h>
|
|
#include <Library/PcdLib.h>
|
|
#include <Guid/MemoryAllocationHob.h>
|
|
#include <Library/IoLib.h>
|
|
#include <Library/PeCoffLib.h>
|
|
#include <Library/BlParseLib.h>
|
|
#include <Library/PlatformSupportLib.h>
|
|
#include <Library/UefiCpuLib.h>
|
|
#include <IndustryStandard/Acpi.h>
|
|
#include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
|
|
#include <Guid/SerialPortInfoGuid.h>
|
|
#include <Guid/SystemTableInfoGuid.h>
|
|
#include <Guid/MemoryMapInfoGuid.h>
|
|
#include <Guid/AcpiBoardInfoGuid.h>
|
|
#include <Guid/GraphicsInfoHob.h>
|
|
#include <UniversalPayload/SmbiosTable.h>
|
|
#include <UniversalPayload/AcpiTable.h>
|
|
#include <UniversalPayload/UniversalPayload.h>
|
|
#include <UniversalPayload/ExtraData.h>
|
|
#include <Guid/PcdDataBaseSignatureGuid.h>
|
|
|
|
#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
|
|
|
|
/**
|
|
Auto-generated function that calls the library constructors for all of the module's
|
|
dependent libraries.
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
ProcessLibraryConstructorList (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
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
|