UefiPayloadPkg: Addd header files for FDT structure and function.

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=4786

Add Library header, DeviceTree hob header and PCD definitions.

Signed-off-by: Linus Liu <linus.liu@intel.com>
This commit is contained in:
Linus Liu 2024-08-21 01:06:56 -07:00 committed by mergify[bot]
parent c3997e329a
commit 04d8d94a42
7 changed files with 251 additions and 0 deletions

View File

@ -16,4 +16,14 @@ typedef struct {
EFI_PHYSICAL_ADDRESS Entry;
} UNIVERSAL_PAYLOAD_BASE;
#define UNIVERSAL_PAYLOAD_BASE_REVISION 1
#define N_NON_RELOCATABLE BIT31
#define P_PREFETCHABLE BIT30
#define SS_CONFIGURATION_SPACE 0
#define SS_IO_SPACE BIT24
#define SS_32BIT_MEMORY_SPACE BIT25
#define SS_64BIT_MEMORY_SPACE BIT24+BIT25
#define DWORDS_TO_NEXT_ADDR_TYPE 7
#endif // UNIVERSAL_PAYLOAD_BASE_H_

View File

@ -0,0 +1,28 @@
/** @file
Universal Payload serial port parent device information definitions.
Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef UNIVERSAL_PAYLOAD_SERIAL_PORT_PARENT_DEVICE_INFO_
#define UNIVERSAL_PAYLOAD_SERIAL_PORT_PARENT_DEVICE_INFO_
extern GUID gUniversalPayloadSerialPortParentDeviceInfoGuid;
// IsIsaCompatible
// TRUE: the serial port device is under an ISA compatible bus, which means the parent device is ISA/LPC/eSPI bus controller.
// FALSE: the serial port device is native PCI device under PCI bridge.
#pragma pack(1)
typedef struct {
UINT32 Revision;
BOOLEAN IsIsaCompatible;
UINT8 Reserved[3];
UINT64 ParentDevicePcieBaseAddress;
} UNIVERSAL_PAYLOAD_SERIAL_PORT_PARENT_DEVICE_INFO;
#pragma pack()
#define UNIVERSAL_PAYLOAD_SERIAL_PORT_PARENT_DEVICE_INFO_REVISION 1
#endif // UNIVERSAL_PAYLOAD_SERIAL_PORT_PARENT_DEVICE_INFO_

View File

@ -0,0 +1,22 @@
/** @file
This library will Build the FDT (flat device tree) table information.
Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef BUILD_FDT_LIB_H_
#define BUILD_FDT__LIB_H_
/**
It will build FDT for UPL consumed.
@param[in] FdtBase Address of the Fdt data.
@retval EFI_SUCCESS If it completed successfully.
@retval Others If it failed to build required FDT.
**/
BuildFdtForUPL (
IN VOID *FdtBase
);
#endif

View File

@ -0,0 +1,64 @@
/** @file
This library will parse the FDT (flat device tree) table information.
Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef FDT_PARSER_LIB_H_
#define FDT_PARSER_LIB_H_
/**
It will parse FDT based on DTB.
@param[in] FdtBase Address of the Fdt data.
@retval EFI_SUCCESS If it completed successfully.
@retval Others If it failed to parse DTB.
**/
UINTN
EFIAPI
ParseDtb (
IN VOID *FdtBase
);
/**
It will Parse FDT -node based on information.
@param[in] FdtBase The starting memory address of FdtBase
@retval HobList The base address of Hoblist.
**/
UINT64
EFIAPI
FdtNodeParser (
IN VOID *FdtBase
);
/**
It will Parse FDT -custom node based on information.
@param[in] FdtBase The starting memory address of FdtBase
@param[in] HostList The starting memory address of New Hob list.
**/
UINTN
EFIAPI
CustomFdtNodeParser (
IN VOID *FdtBase,
IN VOID *HostList
);
/**
It will initialize HOBs for UPL.
@param[in] FdtBase Address of the Fdt data.
@retval EFI_SUCCESS If it completed successfully.
@retval Others If it failed to initialize HOBs.
**/
UINTN
EFIAPI
UplInitHob (
IN VOID *FdtBase
);
#endif

View File

@ -0,0 +1,70 @@
/** @file
This library will provide services for handling HOB data.
Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef HOB_PARSER_LIB_H_
#define HOB_PARSER_LIB_H_
/**
*
Add HOB into HOB list
@param[in] Hob The HOB to be added into the HOB list.
**/
VOID
AddNewHob (
IN EFI_PEI_HOB_POINTERS *Hob
);
/**
Found the Resource Descriptor HOB that contains a range (Base, Top)
@param[in] HobList Hob start address
@param[in] Base Memory start address
@param[in] Top Memory end address.
@retval The pointer to the Resource Descriptor HOB.
**/
EFI_HOB_RESOURCE_DESCRIPTOR *
FindResourceDescriptorByRange (
IN VOID *HobList,
IN EFI_PHYSICAL_ADDRESS Base,
IN EFI_PHYSICAL_ADDRESS Top
);
/**
Find the highest below 4G memory resource descriptor, except the input Resource Descriptor.
@param[in] HobList Hob start address
@param[in] MinimalNeededSize Minimal needed size.
@param[in] ExceptResourceHob Ignore this Resource Descriptor.
@retval The pointer to the Resource Descriptor HOB.
**/
EFI_HOB_RESOURCE_DESCRIPTOR *
FindAnotherHighestBelow4GResourceDescriptor (
IN VOID *HobList,
IN UINTN MinimalNeededSize,
IN EFI_HOB_RESOURCE_DESCRIPTOR *ExceptResourceHob
);
/**
Check the HOB and decide if it is need inside Payload
Payload maintainer may make decision which HOB is need or needn't
Then add the check logic in the function.
@param[in] Hob The HOB to check
@retval TRUE If HOB is need inside Payload
@retval FALSE If HOB is needn't inside Payload
**/
BOOLEAN
IsHobNeed (
EFI_PEI_HOB_POINTERS Hob
);
#endif

View File

@ -0,0 +1,30 @@
/** @file
This file defines the structure for the PCI Root Bridges.
Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Revision Reference:
- Universal Payload Specification 0.8 (https://universalpayload.github.io/spec/)
**/
#ifndef UNIVERSAL_PAYLOAD_DEVICE_TREE_H_
#define UNIVERSAL_PAYLOAD_DEVICE_TREE_H_
#include <Uefi.h>
#include <UniversalPayload/UniversalPayload.h>
#pragma pack (1)
typedef struct {
UNIVERSAL_PAYLOAD_GENERIC_HEADER Header;
EFI_PHYSICAL_ADDRESS DeviceTreeAddress;
} UNIVERSAL_PAYLOAD_DEVICE_TREE;
#pragma pack()
#define UNIVERSAL_PAYLOAD_DEVICE_TREE_REVISION 1
extern GUID gUniversalPayloadDeviceTreeGuid;
#endif // UNIVERSAL_PAYLOAD_SMBIOS_TABLE_H_

View File

@ -27,6 +27,11 @@
## Include/Guid/UniversalPayloadBase.h
gUniversalPayloadBaseGuid = { 0x03d4c61d, 0x2713, 0x4ec5, {0xa1, 0xcc, 0x88, 0x3b, 0xe9, 0xdc, 0x18, 0xe5 } }
## Include/Guid/UniversalPayloadSerialPortDeviceParentInfo.h
gUniversalPayloadSerialPortParentDeviceInfoGuid = { 0xc89c359c, 0xd316, 0x4ff8, {0xa9, 0x8f, 0x60, 0x7d, 0x2c, 0xed, 0x1f, 0xed } }
## Include/UniversalPayload/DeviceTree.h
gUniversalPayloadDeviceTreeGuid = { 0x6784b889, 0xb13c, 0x4c3b, {0xae, 0x4b, 0xf, 0xa, 0x2e, 0x32, 0xe, 0xa3 } }
gEdkiiDebugPrintErrorLevelGuid = { 0xad82f436, 0x75c5, 0x4aa9, { 0x92, 0x93, 0xc5, 0x55, 0x0a, 0x7f, 0xf9, 0x71 }}
gUefiAcpiBoardInfoGuid = {0xad3d31b, 0xb3d8, 0x4506, {0xae, 0x71, 0x2e, 0xf1, 0x10, 0x6, 0xd9, 0xf}}
gUefiSerialPortInfoGuid = { 0x6c6872fe, 0x56a9, 0x4403, { 0xbb, 0x98, 0x95, 0x8d, 0x62, 0xde, 0x87, 0xf1 } }
@ -42,6 +47,13 @@
[Ppis]
gEfiPayLoadHobBasePpiGuid = { 0xdbe23aa1, 0xa342, 0x4b97, {0x85, 0xb6, 0xb2, 0x26, 0xf1, 0x61, 0x73, 0x89} }
#
# This PPI is used to trigger Payload callback event in end of PEI.
#
gUplReadyToPayloadPpiGuid = { 0x67c8dfb1, 0x61f4, 0x439c, { 0x84, 0x4e, 0x2b, 0xdf, 0xf1, 0x07, 0xad, 0x51 }}
[Protocols]
################################################################################
#
# PCD Declarations section - list of all PCDs Declared by this Package
@ -75,3 +87,18 @@ gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|FALSE|BOOLEAN|0x00000020
## FFS filename to find the default variable initial data file.
# @Prompt FFS Name of variable initial data file
gUefiPayloadPkgTokenSpaceGuid.PcdNvsDataFile |{ 0x1a, 0xf1, 0xb1, 0xae, 0x42, 0xcc, 0xcf, 0x4e, 0xac, 0x60, 0xdb, 0xab, 0xf6, 0xca, 0x69, 0xe6 }|VOID*|0x00000025
## Indicates if Universal payload support FDT
#- PcdHandOffFdtEnable is TRUE, HandOffData is FDT
#- PcdHandOffFdtEnable is FALSE, HandOffData is HOB
gUefiPayloadPkgTokenSpaceGuid.PcdHandOffFdtEnable|FALSE|BOOLEAN|0x00000026
gUefiPayloadPkgTokenSpaceGuid.PcdPciReservedPMemBase |0xFFFFFFFF |UINT32|0x00000027
gUefiPayloadPkgTokenSpaceGuid.PcdPciReservedPMemLimit |0x00000000 |UINT32|0x00000028
gUefiPayloadPkgTokenSpaceGuid.PcdPciReservedPMemAbove4GBBase |0xFFFFFFFFFFFFFFFF |UINT64|0x00000029
gUefiPayloadPkgTokenSpaceGuid.PcdPciReservedPMemAbove4GBLimit|0x0000000000000000 |UINT64|0x0000002A
gUefiPayloadPkgTokenSpaceGuid.SizeOfIoSpace|0|UINT8|0x0000002B
gUefiPayloadPkgTokenSpaceGuid.PcdFDTPageSize|8|UINT8|0x0000002C