/** @file | |
AML Tree. | |
Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef AML_TREE_H_ | |
#define AML_TREE_H_ | |
#include <AmlNodeDefines.h> | |
/** Get the root node from any node of the tree. | |
This is done by climbing up the tree until the root node is reached. | |
@param [in] Node Pointer to a node. | |
@return The root node of the tree. | |
NULL if error. | |
*/ | |
AML_ROOT_NODE * | |
EFIAPI | |
AmlGetRootNode ( | |
IN CONST AML_NODE_HEADER *Node | |
); | |
/** Check whether the input Node is in the fixed argument list of its parent | |
node. | |
If so, IndexPtr contains this Index. | |
@param [in] Node Pointer to a Node. | |
@param [out] IndexPtr Pointer holding the Index of the Node in | |
its parent's fixed argument list. | |
@retval TRUE The node is a fixed argument and the index | |
in IndexPtr is valid. | |
@retval FALSE The node is not a fixed argument. | |
**/ | |
BOOLEAN | |
EFIAPI | |
AmlIsNodeFixedArgument ( | |
IN CONST AML_NODE_HEADER *Node, | |
OUT EAML_PARSE_INDEX *IndexPtr | |
); | |
/** Set the fixed argument of the ObjectNode at the Index to the NewNode. | |
It is the caller's responsibility to save the old node, if desired, | |
otherwise the reference to the old node will be lost. | |
If NewNode is not NULL, set its parent to ObjectNode. | |
@param [in] ObjectNode Pointer to an object node. | |
@param [in] Index Index in the fixed argument list of | |
the ObjectNode to set. | |
@param [in] NewNode Pointer to the NewNode. | |
Can be NULL, a data node or an object node. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlSetFixedArgument ( | |
IN AML_OBJECT_NODE *ObjectNode, | |
IN EAML_PARSE_INDEX Index, | |
IN AML_NODE_HEADER *NewNode | |
); | |
/** If the given AML_NODE_HEADER has a variable list of arguments, | |
return a pointer to this list. | |
Return NULL otherwise. | |
@param [in] Node Pointer to the AML_NODE_HEADER to check. | |
@return The list of variable arguments if there is one. | |
NULL otherwise. | |
**/ | |
LIST_ENTRY * | |
EFIAPI | |
AmlNodeGetVariableArgList ( | |
IN CONST AML_NODE_HEADER *Node | |
); | |
/** Add the NewNode to the tail of the variable list of arguments | |
of the ParentNode. | |
NOTE: This is an internal function which does not propagate the size | |
when a new node is added. | |
@param [in] ParentNode Pointer to the parent node. | |
Must be a root or an object node. | |
@param [in] NewNode Pointer to the node to add. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlVarListAddTailInternal ( | |
IN AML_NODE_HEADER *ParentNode, | |
IN AML_NODE_HEADER *NewNode | |
); | |
/** Replace the OldNode by the NewNode. | |
Note: This function unlinks the OldNode from the tree. It is the callers | |
responsibility to delete the OldNode if needed. | |
@param [in] OldNode Pointer to the node to replace. | |
Must be a data node or an object node. | |
@param [in] NewNode The new node to insert. | |
Must be a data node or an object node. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlReplaceArgument ( | |
IN AML_NODE_HEADER *OldNode, | |
IN AML_NODE_HEADER *NewNode | |
); | |
#endif // AML_TREE_H_ |