TianoCore EDK2 master
Loading...
Searching...
No Matches
FdtUtility.c File Reference
#include <Library/BaseLib.h>
#include <FdtHwInfoParserInclude.h>
#include "FdtUtility.h"

Go to the source code of this file.

Functions

STATIC BOOLEAN EFIAPI FdtNodeHasName (IN CONST VOID *Fdt, IN INT32 Node, IN CONST VOID *SearchName)
 
BOOLEAN EFIAPI FdtNodeIsCompatible (IN CONST VOID *Fdt, IN INT32 Node, IN CONST VOID *CompatInfo)
 
BOOLEAN EFIAPI FdtNodeHasProperty (IN CONST VOID *Fdt, IN INT32 Node, IN CONST VOID *PropertyName)
 
STATIC EFI_STATUS EFIAPI FdtGetNextCondNode (IN CONST VOID *Fdt, IN OUT INT32 *Node, IN OUT INT32 *Depth, IN NODE_CHECKER_FUNC NodeChecker, IN CONST VOID *Context)
 
STATIC EFI_STATUS EFIAPI FdtGetNextCondNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN NODE_CHECKER_FUNC NodeChecker, IN CONST VOID *Context, IN OUT INT32 *Node)
 
EFI_STATUS EFIAPI FdtGetNextNamedNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN CONST CHAR8 *NodeName, IN OUT INT32 *Node)
 
EFI_STATUS EFIAPI FdtGetNextCompatNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN CONST COMPATIBILITY_INFO *CompatNamesInfo, IN OUT INT32 *Node)
 
EFI_STATUS EFIAPI FdtGetNextPropNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN CONST CHAR8 *PropName, IN OUT INT32 *Node)
 
STATIC EFI_STATUS EFIAPI FdtCountCondNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN NODE_CHECKER_FUNC NodeChecker, IN CONST VOID *Context, OUT UINT32 *NodeCount)
 
EFI_STATUS EFIAPI FdtCountNamedNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN CONST CHAR8 *NodeName, OUT UINT32 *NodeCount)
 
EFI_STATUS EFIAPI FdtCountCompatNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN CONST COMPATIBILITY_INFO *CompatNamesInfo, OUT UINT32 *NodeCount)
 
EFI_STATUS EFIAPI FdtCountPropNodeInBranch (IN CONST VOID *Fdt, IN INT32 FdtBranch, IN CONST CHAR8 *PropName, OUT UINT32 *NodeCount)
 
EFI_STATUS EFIAPI FdtGetIntcParentNode (IN CONST VOID *Fdt, IN INT32 Node, OUT INT32 *IntcNode)
 
EFI_STATUS EFIAPI FdtGetInterruptCellsInfo (IN CONST VOID *Fdt, IN INT32 IntcNode, OUT INT32 *IntCells)
 
EFI_STATUS EFIAPI FdtGetAddressInfo (IN CONST VOID *Fdt, IN INT32 Node, OUT INT32 *AddressCells, OPTIONAL OUT INT32 *SizeCells OPTIONAL)
 
EFI_STATUS EFIAPI FdtGetParentAddressInfo (IN CONST VOID *Fdt, IN INT32 Node, OUT INT32 *AddressCells, OPTIONAL OUT INT32 *SizeCells OPTIONAL)
 

Detailed Description

Flattened device tree utility.

Copyright (c) 2021, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent

Reference(s):
  • Device tree Specification - Release v0.3
  • linux/Documentation/devicetree/bindings/interrupt-controller/arm%2Cgic.yaml
  • linux//Documentation/devicetree/bindings/interrupt-controller/arm%2Cgic.yaml

Definition in file FdtUtility.c.

Function Documentation

◆ FdtCountCompatNodeInBranch()

EFI_STATUS EFIAPI FdtCountCompatNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN CONST COMPATIBILITY_INFO CompatNamesInfo,
OUT UINT32 *  NodeCount 
)

Count the number of nodes in a branch with at least one compatible property.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]CompatNamesInfoTable of compatible strings to compare with the compatible property of the node.
[out]NodeCountIf success, contains the count of nodes fulfilling the condition. Can be 0.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.

Definition at line 573 of file FdtUtility.c.

◆ FdtCountCondNodeInBranch()

STATIC EFI_STATUS EFIAPI FdtCountCondNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN NODE_CHECKER_FUNC  NodeChecker,
IN CONST VOID *  Context,
OUT UINT32 *  NodeCount 
)

Count the number of Device Tree nodes fulfilling a condition in a Device Tree branch.

The condition to fulfill is checked by the NodeChecker function. Context is passed to NodeChecker.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]NodeCheckerFunction called to check the condition is fulfilled.
[in]ContextContext for the NodeChecker.
[out]NodeCountIf success, contains the count of nodes fulfilling the condition. Can be 0.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.

Definition at line 477 of file FdtUtility.c.

◆ FdtCountNamedNodeInBranch()

EFI_STATUS EFIAPI FdtCountNamedNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN CONST CHAR8 *  NodeName,
OUT UINT32 *  NodeCount 
)

Count the number of nodes in a branch with the input name.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]NodeNameNode name to search. This is a NULL terminated string.
[out]NodeCountIf success, contains the count of nodes fulfilling the condition. Can be 0.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.

Definition at line 538 of file FdtUtility.c.

◆ FdtCountPropNodeInBranch()

EFI_STATUS EFIAPI FdtCountPropNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN CONST CHAR8 *  PropName,
OUT UINT32 *  NodeCount 
)

Count the number of nodes in a branch having the PropName property.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]PropNameName of the property to search. This is a NULL terminated string.
[out]NodeCountIf success, contains the count of nodes fulfilling the condition. Can be 0.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.

Definition at line 606 of file FdtUtility.c.

◆ FdtGetAddressInfo()

EFI_STATUS EFIAPI FdtGetAddressInfo ( IN CONST VOID *  Fdt,
IN INT32  Node,
OUT INT32 *  AddressCells,
OPTIONAL OUT INT32 *SizeCells  OPTIONAL 
)

Get the "#address-cells" and/or "#size-cells" property of the node.

According to the Device Tree specification, s2.3.5 "#address-cells and #size-cells": "If missing, a client program should assume a default value of 2 for #address-cells, and a value of 1 for #size-cells."

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]NodeOffset of the node having to get the "#address-cells" and "#size-cells" properties from.
[out]AddressCellsIf success, number of address-cells. If the property is not available, default value is 2.
[out]SizeCellsIf success, number of size-cells. If the property is not available, default value is 1.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.

Definition at line 778 of file FdtUtility.c.

◆ FdtGetIntcParentNode()

EFI_STATUS EFIAPI FdtGetIntcParentNode ( IN CONST VOID *  Fdt,
IN INT32  Node,
OUT INT32 *  IntcNode 
)

Get the interrupt-controller node handling the interrupts of the input node.

To do this, recursively search a node with either the "interrupt-controller" or the "interrupt-parent" property in the parents of Node.

Devicetree Specification, Release v0.3, 2.4.1 "Properties for Interrupt Generating Devices": Because the hierarchy of the nodes in the interrupt tree might not match the devicetree, the interrupt-parent property is available to make the definition of an interrupt parent explicit. The value is the phandle to the interrupt parent. If this property is missing from a device, its interrupt parent is assumed to be its devicetree parent.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]NodeOffset of the node to start the search.
[out]IntcNodeIf success, contains the offset of the interrupt-controller node.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_NOT_FOUNDNo interrupt-controller node found.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.

Definition at line 650 of file FdtUtility.c.

◆ FdtGetInterruptCellsInfo()

EFI_STATUS EFIAPI FdtGetInterruptCellsInfo ( IN CONST VOID *  Fdt,
IN INT32  IntcNode,
OUT INT32 *  IntCells 
)

Get the "interrupt-cells" property value of the node.

The "interrupts" property requires to know the number of cells used to encode an interrupt. This information is stored in the interrupt-controller of the input Node.

Parameters
[in]FdtPointer to a Flattened Device Tree (Fdt).
[in]IntcNodeOffset of an interrupt-controller node.
[out]IntCellsIf success, contains the "interrupt-cells" property of the IntcNode.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_UNSUPPORTEDUnsupported.

Definition at line 726 of file FdtUtility.c.

◆ FdtGetNextCompatNodeInBranch()

EFI_STATUS EFIAPI FdtGetNextCompatNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN CONST COMPATIBILITY_INFO CompatNamesInfo,
IN OUT INT32 *  Node 
)

Get the next node in a branch with at least one compatible property.

The Device tree is traversed in a depth-first search, starting from Node. The input Node is skipped.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]CompatNamesInfoTable of compatible strings to compare with the compatible property of the node.
[in,out]NodeAt entry: Node offset to start the search. This first node is skipped. Write (-1) to search the whole tree. At exit: If success, contains the offset of the next node in the branch being compatible.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_NOT_FOUNDNo matching node found.

Definition at line 398 of file FdtUtility.c.

◆ FdtGetNextCondNode()

STATIC EFI_STATUS EFIAPI FdtGetNextCondNode ( IN CONST VOID *  Fdt,
IN OUT INT32 *  Node,
IN OUT INT32 *  Depth,
IN NODE_CHECKER_FUNC  NodeChecker,
IN CONST VOID *  Context 
)

Get the next node in the whole DT fulfilling a condition.

The condition to fulfill is checked by the NodeChecker function. Context is passed to NodeChecker.

The Device tree is traversed in a depth-first search, starting from Node. The input Node is skipped.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in,out]NodeAt entry: Node offset to start the search. This first node is skipped. Write (-1) to search the whole tree. At exit: If success, contains the offset of the next node fulfilling the condition.
[in,out]DepthDepth is incremented/decremented of the depth difference between the input Node and the output Node. E.g.: If the output Node is a child node of the input Node, contains (+1).
[in]NodeCheckerFunction called to check if the condition is fulfilled.
[in]ContextContext for the NodeChecker.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_NOT_FOUNDNo matching node found.

Definition at line 200 of file FdtUtility.c.

◆ FdtGetNextCondNodeInBranch()

STATIC EFI_STATUS EFIAPI FdtGetNextCondNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN NODE_CHECKER_FUNC  NodeChecker,
IN CONST VOID *  Context,
IN OUT INT32 *  Node 
)

Get the next node in a branch fulfilling a condition.

The condition to fulfill is checked by the NodeChecker function. Context is passed to NodeChecker.

The Device tree is traversed in a depth-first search, starting from Node. The input Node is skipped.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]NodeCheckerFunction called to check if the condition is fulfilled.
[in]ContextContext for the NodeChecker.
[in,out]NodeAt entry: Node offset to start the search. This first node is skipped. Write (-1) to search the whole tree. At exit: If success, contains the offset of the next node in the branch fulfilling the condition.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_NOT_FOUNDNo matching node found.

Definition at line 269 of file FdtUtility.c.

◆ FdtGetNextNamedNodeInBranch()

EFI_STATUS EFIAPI FdtGetNextNamedNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN CONST CHAR8 *  NodeName,
IN OUT INT32 *  Node 
)

Get the next node in a branch having a matching name.

The Device tree is traversed in a depth-first search, starting from Node. The input Node is skipped.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]NodeNameThe node name to search. This is a NULL terminated string.
[in,out]NodeAt entry: Node offset to start the search. This first node is skipped. Write (-1) to search the whole tree. At exit: If success, contains the offset of the next node in the branch having a matching name.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_NOT_FOUNDNo matching node found.

Definition at line 358 of file FdtUtility.c.

◆ FdtGetNextPropNodeInBranch()

EFI_STATUS EFIAPI FdtGetNextPropNodeInBranch ( IN CONST VOID *  Fdt,
IN INT32  FdtBranch,
IN CONST CHAR8 *  PropName,
IN OUT INT32 *  Node 
)

Get the next node in a branch having the PropName property.

The Device tree is traversed in a depth-first search, starting from Node. The input Node is skipped.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]FdtBranchOnly search in the sub-nodes of this branch. Write (-1) to search the whole tree.
[in]PropNameName of the property to search. This is a NULL terminated string.
[in,out]NodeAt entry: Node offset to start the search. This first node is skipped. Write (-1) to search the whole tree. At exit: If success, contains the offset of the next node in the branch being compatible.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_NOT_FOUNDNo matching node found.

Definition at line 438 of file FdtUtility.c.

◆ FdtGetParentAddressInfo()

EFI_STATUS EFIAPI FdtGetParentAddressInfo ( IN CONST VOID *  Fdt,
IN INT32  Node,
OUT INT32 *  AddressCells,
OPTIONAL OUT INT32 *SizeCells  OPTIONAL 
)

Get the "#address-cells" and/or "#size-cells" property of the parent node.

According to the Device Tree specification, s2.3.5 "#address-cells and #size-cells": "If missing, a client program should assume a default value of 2 for #address-cells, and a value of 1 for #size-cells."

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]NodeOffset of the node having to get the "#address-cells" and "#size-cells" properties from its parent.
[out]AddressCellsIf success, number of address-cells. If the property is not available, default value is 2.
[out]SizeCellsIf success, number of size-cells. If the property is not available, default value is 1.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_ABORTEDAn error occurred.
EFI_INVALID_PARAMETERInvalid parameter.

Definition at line 833 of file FdtUtility.c.

◆ FdtNodeHasName()

STATIC BOOLEAN EFIAPI FdtNodeHasName ( IN CONST VOID *  Fdt,
IN INT32  Node,
IN CONST VOID *  SearchName 
)

Check whether a node has the input name.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]NodeOffset of the node to check the name.
[in]SearchNameNode name to search. This is a NULL terminated string.
Return values
TrueThe node has the input name.
FALSEOtherwise, or error.

Definition at line 30 of file FdtUtility.c.

◆ FdtNodeHasProperty()

BOOLEAN EFIAPI FdtNodeHasProperty ( IN CONST VOID *  Fdt,
IN INT32  Node,
IN CONST VOID *  PropertyName 
)

Check whether a node has a property.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]NodeOffset of the node to operate the check on.
[in]PropertyNameName of the property to search. This is a NULL terminated string.
Return values
TrueThe node has the property.
FALSEOtherwise, or error.

Definition at line 144 of file FdtUtility.c.

◆ FdtNodeIsCompatible()

BOOLEAN EFIAPI FdtNodeIsCompatible ( IN CONST VOID *  Fdt,
IN INT32  Node,
IN CONST VOID *  CompatInfo 
)

Iterate through the list of strings in the Context, and check whether at least one string is matching the "compatible" property of the node.

Parameters
[in]FdtPointer to a Flattened Device Tree.
[in]NodeOffset of the node to operate the check on.
[in]CompatInfoCOMPATIBILITY_INFO containing the list of compatible strings to compare with the "compatible" property of the node.
Return values
TRUEAt least one string matched, the node is compatible.
FALSEOtherwise, or error.

Definition at line 90 of file FdtUtility.c.