From: "Benny Lin" <benny.lin@intel.com>
To: "Kinney, Michael D" <michael.d.kinney@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Gao, Liming" <gaoliming@byosoft.com.cn>,
"Liu, Zhiguang" <zhiguang.liu@intel.com>,
Pedro Falcato <pedro.falcato@gmail.com>
Subject: Re: [PATCH v3 2/3] MdePkg: Support FDT library.
Date: Wed, 19 Apr 2023 17:11:57 +0000 [thread overview]
Message-ID: <BYAPR11MB355711EBC658D89F7A28AA5EF4629@BYAPR11MB3557.namprd11.prod.outlook.com> (raw)
In-Reply-To: <CO1PR11MB49293A899564B1E38EEC01D4D2629@CO1PR11MB4929.namprd11.prod.outlook.com>
Please find my feedback below.
We can remove FDT_RESERVE_ENTRY but keep FDT_NODE_HEADER, what do you think?
QQQ
Benny
>-----Original Message-----
>From: Kinney, Michael D <michael.d.kinney@intel.com>
>Sent: Wednesday, April 19, 2023 11:54 PM
>To: Lin, Benny <benny.lin@intel.com>; devel@edk2.groups.io
>Cc: Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Pedro Falcato <pedro.falcato@gmail.com>; Kinney, Michael D <michael.d.kinney@intel.com>
>Subject: RE: [PATCH v3 2/3] MdePkg: Support FDT library.
>
>A few comments below.
>
>Mike
>
>> -----Original Message-----
>> From: Lin, Benny <benny.lin@intel.com>
>> Sent: Sunday, April 16, 2023 10:35 PM
>> To: devel@edk2.groups.io
>> Cc: Lin, Benny <benny.lin@intel.com>; Kinney, Michael D
>> <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>;
>> Liu, Zhiguang <zhiguang.liu@intel.com>; Pedro Falcato
>> <pedro.falcato@gmail.com>
>> Subject: [PATCH v3 2/3] MdePkg: Support FDT library.
>>
>> From: Benny Lin <benny.lin@intel.com>
>>
>> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4392
>> Add FDT support in EDK2 by submodule 3rd party libfdt
>> (https://github.com/devicetree-org/pylibfdt/tree/main/libfdt)
>> and refer to LibcLib implementation by Pedro.
>>
>> Cc: Michael D Kinney <michael.d.kinney@intel.com>
>> Cc: Liming Gao <gaoliming@byosoft.com.cn>
>> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
>> Acked-by: Pedro Falcato <pedro.falcato@gmail.com>
>> Signed-off-by: Benny Lin <benny.lin@intel.com>
>> ---
>> MdePkg/Include/Library/FdtLib.h | 314 ++++++++++++++++++++
>> MdePkg/Library/BaseFdtLib/BaseFdtLib.inf | 62 ++++
>> MdePkg/Library/BaseFdtLib/BaseFdtLib.uni | 14 +
>> MdePkg/Library/BaseFdtLib/FdtLib.c | 301 +++++++++++++++++++
>> MdePkg/Library/BaseFdtLib/LibFdtSupport.h | 99 ++++++
>> MdePkg/Library/BaseFdtLib/LibFdtWrapper.c | 173 +++++++++++
>> MdePkg/Library/BaseFdtLib/limits.h | 10 +
>> MdePkg/Library/BaseFdtLib/stdbool.h | 10 +
>> MdePkg/Library/BaseFdtLib/stddef.h | 10 +
>> MdePkg/Library/BaseFdtLib/stdint.h | 10 +
>> MdePkg/Library/BaseFdtLib/stdlib.h | 10 +
>> MdePkg/Library/BaseFdtLib/string.h | 10 +
>> MdePkg/MdePkg.ci.yaml | 17 +-
>> MdePkg/MdePkg.dec | 4 +
>> MdePkg/MdePkg.dsc | 1 +
>> 15 files changed, 1043 insertions(+), 2 deletions(-)
>>
>> diff --git a/MdePkg/Include/Library/FdtLib.h
>> b/MdePkg/Include/Library/FdtLib.h new file mode 100644 index
>> 0000000000..d59b749c25
>> --- /dev/null
>> +++ b/MdePkg/Include/Library/FdtLib.h
>> @@ -0,0 +1,314 @@
>> +/** @file
>>
>> + Flattened Device Tree Library.
>>
>> +
>>
>> + Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> + SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#ifndef FDT_LIB_H_
>>
>> +#define FDT_LIB_H_
>>
>> +
>>
>> +///
>>
>> +/// Flattened Device Tree definition
>>
>> +///
>>
>> +typedef struct {
>>
>> + UINT32 Magic; /* magic word FDT_MAGIC */
>>
>> + UINT32 TotalSize; /* total size of DT block */
>>
>> + UINT32 OffsetDtStruct; /* offset to structure */
>>
>> + UINT32 OffsetDtStrings; /* offset to strings */
>>
>> + UINT32 OffsetMemRsvmap; /* offset to memory reserve map */
>>
>> + UINT32 Version; /* format version */
>>
>> + UINT32 LastCompVersion; /* last compatible version */
>>
>> +
>>
>> + /* version 2 fields below */
>>
>> + UINT32 BootCpuidPhys; /* Which physical CPU id we're
>>
>> + booting on */
>>
>> + /* version 3 fields below */
>>
>> + UINT32 SizeDtStrings; /* size of the strings block */
>>
>> +
>>
>> + /* version 17 fields below */
>>
>> + UINT32 SizeDtStruct; /* size of the structure block */
>>
>> +} FDT_HEADER;
>
>I see the macros below use SwapBytes32() on all the fields from this structure. Does this mean this structure is big >endian? If that is the case, then the description of this structure and all individual fields must make that very clear >so any consumer of the structure knows it does not follow the default endianness of UEFI/PI and that consumers >must either use the macros or consumers must use SwapBytes32() on their own when using this structure directly.
Yes, it's big endian. I will complete more descriptions in patch v4.
>>
>> +
>>
>> +typedef struct {
>>
>> + UINT64 Address;
>>
>> + UINT64 Size;
>>
>> +} FDT_RESERVE_ENTRY;
>
>
>I do not see this type used anywhere in the lib class or the lib instance.
>Can it be removed?
I think we can remove it because it might be not used for further usage of FDT support.
>
>>
>> +
>>
>> +typedef struct {
>>
>> + UINT32 Tag;
>>
>> + CHAR8 Name[];
>>
>> +} FDT_NODE_HEADER;
>
>
>I do not see this type used anywhere in the lib class or the lib instance.
>Can it be removed?
When we need retrieve a node from a FDT blob, we will get a node offset then we could use the struct to map the node content. It's very useful.
>
>>
>> +
>>
>> +typedef struct {
>>
>> + UINT32 Tag;
>>
>> + UINT32 Length;
>>
>> + UINT32 NameOffset;
>>
>> + CHAR8 Data[];
>>
>> +} FDT_PROPERTY;
>>
>> +
>>
>> +#define FDT_GET_HEADER(Fdt, Field) SwapBytes32(((CONST FDT_HEADER
>> +*)(Fdt))->Field)
>>
>> +
>>
>> +#define FDT_MAGIC(Fdt) (FDT_GET_HEADER(Fdt, Magic))
>>
>> +#define FDT_TOTAL_SIZE(Fdt) (FDT_GET_HEADER(Fdt, TotalSize))
>>
>> +#define FDT_OFFSET_DT_STRUCT(Fdt) (FDT_GET_HEADER(Fdt, OffsetDtStruct))
>>
>> +#define FDT_OFFSET_DT_STRINGS(Fdt) (FDT_GET_HEADER(Fdt,
>> +OffsetDtStrings))
>>
>> +#define FDT_OFFSET_MEM_RSVMAP(Fdt) (FDT_GET_HEADER(Fdt,
>> +OffsetMemRsvmap))
>>
>> +#define FDT_VERSION(Fdt) (FDT_GET_HEADER(Fdt, Version))
>>
>> +#define FDT_LAST_COMP_VERSION(Fdt) (FDT_GET_HEADER(Fdt,
>> +LastCompVersion))
>>
>> +#define FDT_BOOT_CPUID_PHYS(Fdt) (FDT_GET_HEADER(Fdt, BootCpuidPhys))
>>
>> +#define FDT_SIZE_DT_STRINGS(Fdt) (FDT_GET_HEADER(Fdt, SizeDtStrings))
>>
>> +#define FDT_SIZE_DT_STRUCT(Fdt) (FDT_GET_HEADER(Fdt, SizeDtStruct))
>>
>> +
>>
>> +/**
>>
>> + Verify the header of the Flattened Device Tree
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> +
>>
>> + @return Zero for successfully, otherwise failed.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtCheckHeader (
>>
>> + IN CONST VOID *Fdt
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Create a empty Flattened Device Tree.
>>
>> +
>>
>> + @param[in] Buffer The pointer to allocate a pool for FDT blob.
>>
>> + @param[in] BufferSize The BufferSize to the pool size.
>>
>> +
>>
>> + @return Zero for successfully, otherwise failed.
>>
>> +
>>
>> +**/
>>
>> +RETURN_STATUS
>>
>> +EFIAPI
>>
>> +FdtCreateEmptyTree (
>>
>> + IN VOID *Buffer,
>>
>> + IN UINTN BufferSize
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of next node from the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous node.
>>
>> + @param[in] Depth The depth to the level of tree hierarchy.
>>
>> +
>>
>> + @return The offset to next node offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNextNode (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset,
>>
>> + IN INT32 *Depth
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first node under the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous node.
>>
>> +
>>
>> + @return The offset to next node offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtFirstSubnode (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of next node from the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous node.
>>
>> +
>>
>> + @return The offset to next node offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNextSubnode (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first node which includes the given name.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] ParentOffset The offset to the node which start find under.
>>
>> + @param[in] Name The name to search the node with the name.
>>
>> + @param[in] NameLength The length of the name to check only.
>>
>> +
>>
>> + @return The offset to node offset with given node name.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtSubnodeOffsetNameLen (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 ParentOffset,
>>
>> + IN CONST CHAR8 *Name,
>>
>> + IN INT32 NameLength
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first node which includes the given property name and value.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] StartOffset The offset to the starting node to find.
>>
>> + @param[in] PropertyName The property name to search the node including the named property.
>>
>> + @param[in] PropertyValue The property value to check the same property value.
>>
>> + @param[in] PropertyLength The length of the value in PropertValue.
>>
>> +
>>
>> + @return The offset to node offset with given property.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNodeOffsetByPropValue (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 StartOffset,
>>
>> + IN CONST CHAR8 *PropertyName,
>>
>> + IN CONST VOID *PropertyValue,
>>
>> + IN INT32 PropertyLength
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a property with the given name from the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] NodeOffset The offset to the given node.
>>
>> + @param[in] Name The name to the property which need be searched
>>
>> + @param[in] Length The length to the size of the property found.
>>
>> +
>>
>> + @return The property to the structure of the found property.
>>
>> +
>>
>> +**/
>>
>> +CONST FDT_PROPERTY *
>>
>> +EFIAPI
>>
>> +FdtGetProperty (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 NodeOffset,
>>
>> + IN CONST CHAR8 *Name,
>>
>> + IN INT32 *Length
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first property in the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to the node which need be searched.
>>
>> +
>>
>> + @return The offset to first property offset in the given node.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtFirstPropertyOffset (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 NodeOffset
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of next property from the given property.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous property.
>>
>> +
>>
>> + @return The offset to next property offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNextPropertyOffset (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a property from the given offset of the property.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to the given offset of the property.
>>
>> + @param[in] Length The length to the size of the property found.
>>
>> +
>>
>> + @return The property to the structure of the given property offset.
>>
>> +
>>
>> +**/
>>
>> +CONST FDT_PROPERTY *
>>
>> +EFIAPI
>>
>> +FdtGetPropertyByOffset (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset,
>>
>> + IN INT32 *Length
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Returns a string by the given string offset.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] StrOffset The offset to the location in the strings block of FDT.
>>
>> + @param[in] Length The length to the size of string which need be retrieved.
>>
>> +
>>
>> + @return The string to the given string offset.
>>
>> +
>>
>> +**/
>>
>> +CONST CHAR8 *
>>
>> +EFIAPI
>>
>> +FdtGetString (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 StrOffset,
>>
>> + IN INT32 *Length OPTIONAL
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Add a new node to the FDT.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] ParentOffset The offset to the node offset which want to add in.
>>
>> + @param[in] Name The name to name the node.
>>
>> +
>>
>> + @return The offset to the new node.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtAddSubnode (
>>
>> + IN VOID *Fdt,
>>
>> + IN INT32 ParentOffset,
>>
>> + IN CONST CHAR8 *Name
>>
>> + );
>>
>> +
>>
>> +/**
>>
>> + Add or modify a property in the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] NodeOffset The offset to the node offset which want to add in.
>>
>> + @param[in] Name The name to name the property.
>>
>> + @param[in] Value The value to the property value.
>>
>> + @param[in] Length The length to the size of the property.
>>
>> +
>>
>> + @return Zero for successfully, otherwise failed.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtSetProp (
>>
>> + IN VOID *Fdt,
>>
>> + IN INT32 NodeOffset,
>>
>> + IN CONST CHAR8 *Name,
>>
>> + IN CONST VOID *Value,
>>
>> + IN UINT32 Length
>>
>> + );
>>
>> +
>>
>> +#endif /* FDT_LIB_H_ */
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/BaseFdtLib.inf
>> b/MdePkg/Library/BaseFdtLib/BaseFdtLib.inf
>> new file mode 100644
>> index 0000000000..730e568ff6
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/BaseFdtLib.inf
>> @@ -0,0 +1,62 @@
>> +## @file
>>
>> +# Flattened Device Tree Library.
>>
>> +#
>>
>> +# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +#
>>
>> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +#
>>
>> +#
>>
>> +##
>>
>> +
>>
>> +[Defines]
>>
>> + INF_VERSION = 0x0001001B
>>
>> + BASE_NAME = BaseFdtLib
>>
>> + MODULE_UNI_FILE = BaseFdtLib.uni
>>
>> + FILE_GUID = C64DCB01-B037-4FF6-9CF3-E8CEC206DE04
>>
>> + MODULE_TYPE = BASE
>>
>> + VERSION_STRING = 1.0
>>
>> + LIBRARY_CLASS = FdtLib
>>
>> +
>>
>> + DEFINE FDT_LIB_PATH = libfdt/libfdt
>>
>> +
>>
>> +#
>>
>> +# VALID_ARCHITECTURES = IA32 X64
>>
>> +#
>>
>> +
>>
>> +[Sources]
>>
>> + FdtLib.c
>>
>> + LibFdtWrapper.c
>>
>> + # header Wrapper files
>>
>> + limits.h
>>
>> + stdbool.h
>>
>> + stddef.h
>>
>> + stdint.h
>>
>> + stdlib.h
>>
>> + string.h
>>
>> +
>>
>> + $(FDT_LIB_PATH)/fdt.c
>>
>> + $(FDT_LIB_PATH)/fdt.h
>>
>> + $(FDT_LIB_PATH)/fdt_addresses.c
>>
>> + $(FDT_LIB_PATH)/fdt_check.c
>>
>> + $(FDT_LIB_PATH)/fdt_empty_tree.c
>>
>> + $(FDT_LIB_PATH)/fdt_overlay.c
>>
>> + $(FDT_LIB_PATH)/fdt_ro.c
>>
>> + $(FDT_LIB_PATH)/fdt_rw.c
>>
>> + $(FDT_LIB_PATH)/fdt_strerror.c
>>
>> + $(FDT_LIB_PATH)/fdt_sw.c
>>
>> + $(FDT_LIB_PATH)/fdt_wip.c
>>
>> + $(FDT_LIB_PATH)/libfdt.h
>>
>> + $(FDT_LIB_PATH)/libfdt_env.h
>>
>> + $(FDT_LIB_PATH)/libfdt_internal.h
>>
>> +
>>
>> +[Packages]
>>
>> + MdePkg/MdePkg.dec
>>
>> +
>>
>> +[LibraryClasses]
>>
>> + BaseLib
>>
>> + BaseMemoryLib
>>
>> +
>>
>> +[BuildOptions]
>>
>> + MSFT:*_*_IA32_CC_FLAGS = /wd4146 /wd4245
>>
>> + MSFT:*_*_X64_CC_FLAGS = /wd4146 /wd4244 /wd4245 /wd4267
>>
>> +
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/BaseFdtLib.uni
>> b/MdePkg/Library/BaseFdtLib/BaseFdtLib.uni
>> new file mode 100644
>> index 0000000000..3f7e45ea6f
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/BaseFdtLib.uni
>> @@ -0,0 +1,14 @@
>> +// /** @file
>>
>> +// Flattened Device Tree Library.
>>
>> +//
>>
>> +// Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +//
>>
>> +// SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +//
>>
>> +// **/
>>
>> +
>>
>> +
>>
>> +#string STR_MODULE_ABSTRACT #language en-US "Instance of FDT Library"
>>
>> +
>>
>> +#string STR_MODULE_DESCRIPTION #language en-US "This module provides FDT Library implementation."
>>
>> +
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/FdtLib.c
>> b/MdePkg/Library/BaseFdtLib/FdtLib.c
>> new file mode 100644
>> index 0000000000..200a496c7e
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/FdtLib.c
>> @@ -0,0 +1,301 @@
>> +/** @file
>>
>> + Flattened Device Tree Library.
>>
>> +
>>
>> + Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> + SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <libfdt/libfdt/libfdt.h>
>>
>> +
>>
>> +/**
>>
>> + Verify the header of the Flattened Device Tree
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> +
>>
>> + @return Zero for successfully, otherwise failed.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtCheckHeader (
>>
>> + IN CONST VOID *Fdt
>>
>> + )
>>
>> +{
>>
>> + return fdt_check_header(Fdt);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Create a empty Flattened Device Tree.
>>
>> +
>>
>> + @param[in] Buffer The pointer to allocate a pool for FDT blob.
>>
>> + @param[in] BufferSize The BufferSize to the pool size.
>>
>> +
>>
>> + @return Zero for successfully, otherwise failed.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtCreateEmptyTree (
>>
>> + IN VOID *Buffer,
>>
>> + IN UINT32 BufferSize
>>
>> + )
>>
>> +{
>>
>> + return fdt_create_empty_tree (Buffer, (int)BufferSize);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of next node from the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous node.
>>
>> + @param[in] Depth The depth to the level of tree hierarchy.
>>
>> +
>>
>> + @return The offset to next node offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNextNode (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset,
>>
>> + IN INT32 *Depth
>>
>> + )
>>
>> +{
>>
>> + return fdt_next_node (Fdt, Offset, Depth);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first node under the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous node.
>>
>> +
>>
>> + @return The offset to next node offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtFirstSubnode (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset
>>
>> + )
>>
>> +{
>>
>> + return fdt_first_subnode (Fdt, Offset);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of next node from the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous node.
>>
>> +
>>
>> + @return The offset to next node offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNextSubnode (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset
>>
>> + )
>>
>> +{
>>
>> + return fdt_next_subnode (Fdt, Offset);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first node which includes the given name.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] ParentOffset The offset to the node which start find under.
>>
>> + @param[in] Name The name to search the node with the name.
>>
>> + @param[in] NameLength The length of the name to check only.
>>
>> +
>>
>> + @return The offset to node offset with given node name.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtSubnodeOffsetNameLen (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 ParentOffset,
>>
>> + IN CONST CHAR8 *Name,
>>
>> + IN INT32 NameLength
>>
>> + )
>>
>> +{
>>
>> + return fdt_subnode_offset_namelen (Fdt, ParentOffset, Name,
>> + NameLength);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first node which includes the given property name and value.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] StartOffset The offset to the starting node to find.
>>
>> + @param[in] PropertyName The property name to search the node including the named property.
>>
>> + @param[in] PropertyValue The property value to check the same property value.
>>
>> + @param[in] PropertyLength The length of the value in PropertValue.
>>
>> +
>>
>> + @return The offset to node offset with given property.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNodeOffsetByPropValue (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 StartOffset,
>>
>> + IN CONST CHAR8 *PropertyName,
>>
>> + IN CONST VOID *PropertyValue,
>>
>> + IN INT32 PropertyLength
>>
>> + )
>>
>> +{
>>
>> + return fdt_node_offset_by_prop_value (Fdt, StartOffset,
>> + PropertyName, PropertyValue, PropertyLength);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a property with the given name from the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] NodeOffset The offset to the given node.
>>
>> + @param[in] Name The name to the property which need be searched
>>
>> + @param[in] Length The length to the size of the property found.
>>
>> +
>>
>> + @return The property to the structure of the found property.
>>
>> +
>>
>> +**/
>>
>> +CONST struct fdt_property *
>>
>> +EFIAPI
>>
>> +FdtGetProperty (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 NodeOffset,
>>
>> + IN CONST CHAR8 *Name,
>>
>> + IN INT32 *Length
>>
>> + )
>>
>> +{
>>
>> + return fdt_get_property (Fdt, NodeOffset, Name, Length);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of first property in the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] NodeOffset The offset to the node which need be searched.
>>
>> +
>>
>> + @return The offset to first property offset in the given node.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtFirstPropertyOffset (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 NodeOffset
>>
>> + )
>>
>> +{
>>
>> + return fdt_first_property_offset (Fdt, NodeOffset);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a offset of next property from the given property.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to previous property.
>>
>> +
>>
>> + @return The offset to next property offset.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtNextPropertyOffset (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset
>>
>> + )
>>
>> +{
>>
>> + return fdt_next_property_offset (Fdt, Offset);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a property from the given offset of the property.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] Offset The offset to the given offset of the property.
>>
>> + @param[in] Length The length to the size of the property found.
>>
>> +
>>
>> + @return The property to the structure of the given property offset.
>>
>> +
>>
>> +**/
>>
>> +CONST struct fdt_property *
>>
>> +EFIAPI
>>
>> +FdtGetPropertyByOffset (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 Offset,
>>
>> + IN INT32 *Length
>>
>> + )
>>
>> +{
>>
>> + return fdt_get_property_by_offset (Fdt, Offset, Length);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Returns a string by the given string offset.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] StrOffset The offset to the location in the strings block of FDT.
>>
>> + @param[in] Length The length to the size of string which need be retrieved.
>>
>> +
>>
>> + @return The string to the given string offset.
>>
>> +
>>
>> +**/
>>
>> +CONST CHAR8 *
>>
>> +EFIAPI
>>
>> +FdtGetString (
>>
>> + IN CONST VOID *Fdt,
>>
>> + IN INT32 StrOffset,
>>
>> + IN INT32 *Length OPTIONAL
>>
>> + )
>>
>> +{
>>
>> + return fdt_get_string (Fdt, StrOffset, Length);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Add a new node to the FDT.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] ParentOffset The offset to the node offset which want to add in.
>>
>> + @param[in] Name The name to name the node.
>>
>> +
>>
>> + @return The offset to the new node.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtAddSubnode (
>>
>> + IN VOID *Fdt,
>>
>> + IN INT32 ParentOffset,
>>
>> + IN CONST CHAR8 *Name
>>
>> + )
>>
>> +{
>>
>> + return fdt_add_subnode (Fdt, ParentOffset, Name);
>>
>> +}
>>
>> +
>>
>> +/**
>>
>> + Add or modify a property in the given node.
>>
>> +
>>
>> + @param[in] Fdt The pointer to FDT blob.
>>
>> + @param[in] NodeOffset The offset to the node offset which want to add in.
>>
>> + @param[in] Name The name to name the property.
>>
>> + @param[in] Value The value to the property value.
>>
>> + @param[in] Length The length to the size of the property.
>>
>> +
>>
>> + @return Zero for successfully, otherwise failed.
>>
>> +
>>
>> +**/
>>
>> +INT32
>>
>> +EFIAPI
>>
>> +FdtSetProp (
>>
>> + IN VOID *Fdt,
>>
>> + IN INT32 NodeOffset,
>>
>> + IN CONST CHAR8 *Name,
>>
>> + IN CONST VOID *Value,
>>
>> + IN UINT32 Length
>>
>> + )
>>
>> +{
>>
>> + return fdt_setprop (Fdt, NodeOffset, Name, Value, (int)Length);
>>
>> +}
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/LibFdtSupport.h
>> b/MdePkg/Library/BaseFdtLib/LibFdtSupport.h
>> new file mode 100644
>> index 0000000000..e738f4ded4
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/LibFdtSupport.h
>> @@ -0,0 +1,99 @@
>> +/** @file
>>
>> + Root include file of C runtime library to support building the
>> + third-party
>>
>> + libfdt library.
>>
>> +
>>
>> + Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> + SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#ifndef FDT_LIB_SUPPORT_H_
>>
>> +#define FDT_LIB_SUPPORT_H_
>>
>> +
>>
>> +#include <Base.h>
>>
>> +#include <Library/BaseLib.h>
>>
>> +#include <Library/BaseMemoryLib.h>
>>
>> +
>>
>> +typedef UINT8 uint8_t;
>>
>> +typedef UINT16 uint16_t;
>>
>> +typedef INT32 int32_t;
>>
>> +typedef UINT32 uint32_t;
>>
>> +typedef UINT64 uint64_t;
>>
>> +typedef UINTN uintptr_t;
>>
>> +typedef UINTN size_t;
>>
>> +typedef BOOLEAN bool;
>>
>> +
>>
>> +#define true (1 == 1)
>>
>> +#define false (1 == 0)
>>
>> +
>>
>> +//
>>
>> +// Definitions for global constants used by libfdt library routines
>>
>> +//
>>
>> +#define INT_MAX 0x7FFFFFFF /* Maximum (signed) int value */
>>
>> +#define INT32_MAX 0x7FFFFFFF /* Maximum (signed) int32 value */
>>
>> +#define UINT32_MAX 0xFFFFFFFF /* Maximum unsigned int32 value */
>>
>> +
>>
>> +//
>>
>> +// Function prototypes of libfdt Library routines
>>
>> +//
>>
>> +void *
>>
>> +memset (
>>
>> + void *,
>>
>> + int,
>>
>> + size_t
>>
>> + );
>>
>> +
>>
>> +int
>>
>> +memcmp (
>>
>> + const void *,
>>
>> + const void *,
>>
>> + size_t
>>
>> + );
>>
>> +
>>
>> +int
>>
>> +strcmp (
>>
>> + const char *,
>>
>> + const char *
>>
>> + );
>>
>> +
>>
>> +char *
>>
>> +strchr (
>>
>> + const char *,
>>
>> + int
>>
>> + );
>>
>> +
>>
>> +char *
>>
>> +strrchr (
>>
>> + const char *,
>>
>> + int
>>
>> + );
>>
>> +
>>
>> +unsigned long
>>
>> +strtoul (
>>
>> + const char *,
>>
>> + char **,
>>
>> + int
>>
>> + );
>>
>> +
>>
>> +char *
>>
>> +strcpy (
>>
>> + char *strDest,
>>
>> + const char *strSource
>>
>> + );
>>
>> +
>>
>> +//
>>
>> +// Macros that directly map functions to BaseLib, BaseMemoryLib, and
>> +DebugLib functions
>>
>> +//
>>
>> +#define memcpy(dest, source, count) CopyMem(dest,source, (UINTN)(count))
>>
>> +#define memset(dest, ch, count) SetMem(dest, (UINTN)(count),(UINT8)(ch))
>>
>> +#define memchr(buf, ch, count) ScanMem8(buf, (UINTN)(count),(UINT8)ch)
>>
>> +#define memcmp(buf1, buf2, count) (int)(CompareMem(buf1, buf2, (UINTN)(count)))
>>
>> +#define memmove(dest, source, count) CopyMem(dest, source, (UINTN)(count))
>>
>> +#define strlen(str) (size_t)(AsciiStrLen(str))
>>
>> +#define strnlen(str, count) (size_t)(AsciiStrnLenS(str, count))
>>
>> +#define strncpy(strDest, strSource, count) AsciiStrnCpyS(strDest,
>> +MAX_STRING_SIZE, strSource, (UINTN)count)
>>
>> +#define strcat(strDest, strSource) AsciiStrCatS(strDest, MAX_STRING_SIZE, strSource)
>>
>> +#define strcmp(string1, string2, count) (int)(AsciiStrCmp(string1, string2))
>>
>> +#define strncmp(string1, string2, count) (int)(AsciiStrnCmp(string1, string2, (UINTN)(count)))
>>
>> +
>>
>> +#endif /* FDT_LIB_SUPPORT_H_ */
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/LibFdtWrapper.c
>> b/MdePkg/Library/BaseFdtLib/LibFdtWrapper.c
>> new file mode 100644
>> index 0000000000..772bba4839
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/LibFdtWrapper.c
>> @@ -0,0 +1,173 @@
>> +/** @file
>>
>> + ISO C implementations of strchr, strrchr and strtoul.
>>
>> +
>>
>> + Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> + Copyright (c) 2023 Pedro Falcato All rights reserved.
>>
>> + SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <Base.h>
>>
>> +
>>
>> +#define ULONG_MAX 0xFFFFFFFF /* Maximum unsigned long value */
>>
>> +
>>
>> +// Very quick notes:
>>
>> +// We only go through the string once for both functions
>>
>> +// They are minimal implementations (not speed optimized) of ISO C
>> +semantics
>>
>> +// strchr and strrchr also include the null terminator as part of the
>> +string
>>
>> +// so the code gets a bit clunky to handle that case specifically.
>>
>> +
>>
>> +char *
>>
>> +strchr (
>>
>> + const char *Str,
>>
>> + int Char
>>
>> + )
>>
>> +{
>>
>> + char *S;
>>
>> +
>>
>> + S = (char *)Str;
>>
>> +
>>
>> + for ( ; ; S++) {
>>
>> + if (*S == Char) {
>>
>> + return S;
>>
>> + }
>>
>> +
>>
>> + if (*S == '\0') {
>>
>> + return NULL;
>>
>> + }
>>
>> + }
>>
>> +}
>>
>> +
>>
>> +char *
>>
>> +strrchr (
>>
>> + const char *Str,
>>
>> + int Char
>>
>> + )
>>
>> +{
>>
>> + char *S, *last;
>>
>> +
>>
>> + S = (char *)Str;
>>
>> + last = NULL;
>>
>> +
>>
>> + for ( ; ; S++) {
>>
>> + if (*S == Char) {
>>
>> + last = S;
>>
>> + }
>>
>> +
>>
>> + if (*S == '\0') {
>>
>> + return last;
>>
>> + }
>>
>> + }
>>
>> +}
>>
>> +
>>
>> +STATIC
>>
>> +int
>>
>> +__isspace (
>>
>> + int ch
>>
>> + )
>>
>> +{
>>
>> + // basic ASCII ctype.h:isspace(). Not efficient
>>
>> + return ch == '\r' || ch == '\n' || ch == ' ' || ch == '\t' || ch ==
>> + '\v' || ch == '\f';
>>
>> +}
>>
>> +
>>
>> +unsigned long
>>
>> +strtoul (
>>
>> + const char *Nptr,
>>
>> + char **EndPtr,
>>
>> + int Base
>>
>> + )
>>
>> +{
>>
>> + BOOLEAN Negate;
>>
>> + BOOLEAN Overflow;
>>
>> + unsigned long Val;
>>
>> +
>>
>> + Negate = FALSE;
>>
>> + Overflow = FALSE;
>>
>> + Val = 0;
>>
>> +
>>
>> + // Reject bad numeric bases
>>
>> + if ((Base < 0) || (Base == 1) || (Base > 36)) {
>>
>> + return 0;
>>
>> + }
>>
>> +
>>
>> + // Skip whitespace
>>
>> + while (__isspace (*Nptr)) {
>>
>> + Nptr++;
>>
>> + }
>>
>> +
>>
>> + // Check for + or - prefixes
>>
>> + if (*Nptr == '-') {
>>
>> + Negate = TRUE;
>>
>> + Nptr++;
>>
>> + } else if (*Nptr == '+') {
>>
>> + Nptr++;
>>
>> + }
>>
>> +
>>
>> + // Consume the start, autodetecting base if needed
>>
>> + if ((Nptr[0] == '0') && ((Nptr[1] == 'x') || (Nptr[1] == 'X')) &&
>> + ((Base == 0) || (Base == 16))) {
>>
>> + // Hex
>>
>> + Nptr += 2;
>>
>> + Base = 16;
>>
>> + } else if ((Nptr[0] == '0') && ((Nptr[1] == 'b') || (Nptr[1] ==
>> + 'B')) && ((Base == 0) || (Base == 2))) {
>>
>> + // Binary (standard pending C23)
>>
>> + Nptr += 2;
>>
>> + Base = 2;
>>
>> + } else if ((Nptr[0] == '0') && ((Base == 0) || (Base == 8))) {
>>
>> + // Octal
>>
>> + Nptr++;
>>
>> + Base = 8;
>>
>> + } else {
>>
>> + if (Base == 0) {
>>
>> + // Assume decimal
>>
>> + Base = 10;
>>
>> + }
>>
>> + }
>>
>> +
>>
>> + while (TRUE) {
>>
>> + int Digit;
>>
>> + char C;
>>
>> + unsigned long NewVal;
>>
>> +
>>
>> + C = *Nptr;
>>
>> + Digit = -1;
>>
>> +
>>
>> + if ((C >= '0') && (C <= '9')) {
>>
>> + Digit = C - '0';
>>
>> + } else if ((C >= 'a') && (C <= 'z')) {
>>
>> + Digit = C - 'a' + 10;
>>
>> + } else if ((C >= 'A') && (C <= 'Z')) {
>>
>> + Digit = C - 'A' + 10;
>>
>> + }
>>
>> +
>>
>> + if ((Digit == -1) || (Digit >= Base)) {
>>
>> + // Note that this case also handles the \0
>>
>> + if (EndPtr) {
>>
>> + *EndPtr = (char *)Nptr;
>>
>> + }
>>
>> +
>>
>> + break;
>>
>> + }
>>
>> +
>>
>> + NewVal = Val * Base + Digit;
>>
>> +
>>
>> + if (NewVal < Val) {
>>
>> + // Overflow
>>
>> + Overflow = TRUE;
>>
>> + }
>>
>> +
>>
>> + Val = NewVal;
>>
>> +
>>
>> + Nptr++;
>>
>> + }
>>
>> +
>>
>> + if (Negate) {
>>
>> + Val = -Val;
>>
>> + }
>>
>> +
>>
>> + if (Overflow) {
>>
>> + Val = ULONG_MAX;
>>
>> + }
>>
>> +
>>
>> + // TODO: We're lacking errno here.
>>
>> + return Val;
>>
>> +}
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/limits.h
>> b/MdePkg/Library/BaseFdtLib/limits.h
>> new file mode 100644
>> index 0000000000..f6cf8d5702
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/limits.h
>> @@ -0,0 +1,10 @@
>> +/** @file
>>
>> + Include file to support building the third-party libfdt library.
>>
>> +
>>
>> +Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <LibFdtSupport.h>
>>
>> +
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/stdbool.h
>> b/MdePkg/Library/BaseFdtLib/stdbool.h
>> new file mode 100644
>> index 0000000000..f6cf8d5702
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/stdbool.h
>> @@ -0,0 +1,10 @@
>> +/** @file
>>
>> + Include file to support building the third-party libfdt library.
>>
>> +
>>
>> +Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <LibFdtSupport.h>
>>
>> +
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/stddef.h
>> b/MdePkg/Library/BaseFdtLib/stddef.h
>> new file mode 100644
>> index 0000000000..f6cf8d5702
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/stddef.h
>> @@ -0,0 +1,10 @@
>> +/** @file
>>
>> + Include file to support building the third-party libfdt library.
>>
>> +
>>
>> +Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <LibFdtSupport.h>
>>
>> +
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/stdint.h
>> b/MdePkg/Library/BaseFdtLib/stdint.h
>> new file mode 100644
>> index 0000000000..f6cf8d5702
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/stdint.h
>> @@ -0,0 +1,10 @@
>> +/** @file
>>
>> + Include file to support building the third-party libfdt library.
>>
>> +
>>
>> +Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <LibFdtSupport.h>
>>
>> +
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/stdlib.h
>> b/MdePkg/Library/BaseFdtLib/stdlib.h
>> new file mode 100644
>> index 0000000000..f6cf8d5702
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/stdlib.h
>> @@ -0,0 +1,10 @@
>> +/** @file
>>
>> + Include file to support building the third-party libfdt library.
>>
>> +
>>
>> +Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <LibFdtSupport.h>
>>
>> +
>>
>> diff --git a/MdePkg/Library/BaseFdtLib/string.h
>> b/MdePkg/Library/BaseFdtLib/string.h
>> new file mode 100644
>> index 0000000000..f6cf8d5702
>> --- /dev/null
>> +++ b/MdePkg/Library/BaseFdtLib/string.h
>> @@ -0,0 +1,10 @@
>> +/** @file
>>
>> + Include file to support building the third-party libfdt library.
>>
>> +
>>
>> +Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> +SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> +
>>
>> +**/
>>
>> +
>>
>> +#include <LibFdtSupport.h>
>>
>> +
>>
>> diff --git a/MdePkg/MdePkg.ci.yaml b/MdePkg/MdePkg.ci.yaml index
>> 6ba85ebe61..f039daccdb 100644
>> --- a/MdePkg/MdePkg.ci.yaml
>> +++ b/MdePkg/MdePkg.ci.yaml
>> @@ -2,7 +2,7 @@
>> # CI configuration for MdePkg
>>
>> #
>>
>> # Copyright (c) Microsoft Corporation
>>
>> -# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
>>
>> +# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
>>
>> # Copyright (c) 2021, Arm Limited. All rights reserved.<BR>
>>
>> # Copyright (c) 2023, Loongson Technology Corporation Limited. All
>> rights reserved.<BR>
>>
>> # SPDX-License-Identifier: BSD-2-Clause-Patent
>>
>> @@ -67,7 +67,8 @@
>> "Include/Library/PcdLib.h",
>>
>> "Include/Library/SafeIntLib.h",
>>
>> "Include/Protocol/DebugSupport.h",
>>
>> - "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c"
>>
>> +
>> + "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c",
>>
>> + "Library/BaseFdtLib"
>>
>> ]
>>
>> },
>>
>> ## options defined ci/Plugin/CompilerPlugin
>>
>> @@ -164,5 +165,17 @@
>> "ExtendWords": [], # words to extend to the dictionary for this package
>>
>> "IgnoreStandardPaths": [], # Standard Plugin defined paths that should be ignore
>>
>> "AdditionalIncludePaths": [] # Additional paths to spell
>> check (wildcards supported)
>>
>> + },
>>
>> + # options defined in .pytool/Plugin/UncrustifyCheck
>>
>> + "UncrustifyCheck": {
>>
>> + "IgnoreFiles": [
>>
>> + "Library/BaseFdtLib/libfdt",
>>
>> + "Library/BaseFdtLib/limits.h",
>>
>> + "Library/BaseFdtLib/stdbool.h",
>>
>> + "Library/BaseFdtLib/stddef.h",
>>
>> + "Library/BaseFdtLib/stdint.h",
>>
>> + "Library/BaseFdtLib/stdlib.h",
>>
>> + "Library/BaseFdtLib/string.h"
>>
>> + ]
>>
>> }
>>
>> }
>>
>> diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index
>> e70182bf7f..9804a7a6bd 100644
>> --- a/MdePkg/MdePkg.dec
>> +++ b/MdePkg/MdePkg.dec
>> @@ -289,6 +289,10 @@
>> #
>>
>> ArmTrngLib|Include/Library/ArmTrngLib.h
>>
>>
>>
>> + ## @libraryclass Provides APIs for third-party library libfdt.
>>
>> + #
>>
>> + FdtLib|Include/Library/FdtLib.h
>>
>> +
>>
>> [LibraryClasses.IA32, LibraryClasses.X64, LibraryClasses.AARCH64]
>>
>> ## @libraryclass Provides services to generate random number.
>>
>> #
>>
>> diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index
>> 152c02991a..b38c863812 100644
>> --- a/MdePkg/MdePkg.dsc
>> +++ b/MdePkg/MdePkg.dsc
>> @@ -137,6 +137,7 @@
>> MdePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
>>
>>
>>
>> MdePkg/Library/JedecJep106Lib/JedecJep106Lib.inf
>>
>> + MdePkg/Library/BaseFdtLib/BaseFdtLib.inf
>>
>>
>>
>> [Components.IA32, Components.X64, Components.ARM, Components.AARCH64]
>>
>> #
>>
>> --
>> 2.39.1.windows.1
next prev parent reply other threads:[~2023-04-19 17:12 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-17 5:35 [PATCH v3 0/3] Support FDT library Benny Lin
2023-04-17 5:35 ` [PATCH v3 1/3] Tianocore: " Benny Lin
2023-04-19 15:58 ` Michael D Kinney
2023-04-17 5:35 ` [PATCH v3 2/3] MdePkg: " Benny Lin
2023-04-19 15:54 ` Michael D Kinney
2023-04-19 17:11 ` Benny Lin [this message]
2023-04-19 21:04 ` Michael D Kinney
2023-04-20 4:25 ` Benny Lin
2023-04-20 16:44 ` Michael D Kinney
2023-04-21 2:33 ` [edk2-devel] " Chiu, Chasel
2023-04-24 17:28 ` Leif Lindholm
2023-04-24 17:41 ` Michael D Kinney
2023-04-26 5:21 ` Chiu, Chasel
[not found] ` <17596494A9010E70.30288@groups.io>
2023-05-01 16:31 ` Chiu, Chasel
2023-05-02 11:41 ` Leif Lindholm
2023-05-03 2:34 ` Chiu, Chasel
2023-05-03 5:39 ` Michael D Kinney
2023-05-03 18:31 ` Chiu, Chasel
2023-04-17 5:35 ` [PATCH v3 3/3] .pytool: " Benny Lin
2023-04-19 15:58 ` Michael D Kinney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BYAPR11MB355711EBC658D89F7A28AA5EF4629@BYAPR11MB3557.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox