/** @file | |
AML Core Interface. | |
Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef AML_CORE_INTERFACE_H_ | |
#define AML_CORE_INTERFACE_H_ | |
/* This header file does not include internal Node definition, | |
i.e. AML_ROOT_NODE, AML_OBJECT_NODE, etc. The node definitions | |
must be included by the caller file. The function prototypes must | |
only expose AML_NODE_HANDLE, AML_ROOT_NODE_HANDLE, etc. node | |
definitions. | |
This allows to keep the functions defined here both internal and | |
potentially external. If necessary, any function of this file can | |
be exposed externally. | |
The Api folder is internal to the AmlLib, but should only use these | |
functions. They provide a "safe" way to interact with the AmlLib. | |
*/ | |
#include <AmlDefines.h> | |
#include <Include/Library/AmlLib/AmlLib.h> | |
#include <ResourceData/AmlResourceData.h> | |
/** | |
@defgroup CoreApis Core APIs | |
@ingroup AMLLib | |
@{ | |
Core APIs are the main APIs of the library. They allow to: | |
- Create an AML tree; | |
- Delete an AML tree; | |
- Clone an AML tree/node; | |
- Serialize an AML tree (convert the tree to a DSDT/SSDT table). | |
@} | |
*/ | |
/** Serialize a tree to create a DSDT/SSDT table. | |
If: | |
- the content of BufferSize is >= to the size needed to serialize the | |
definition block; | |
- Buffer is not NULL; | |
first serialize the ACPI DSDT/SSDT header from the root node, | |
then serialize the AML blob from the rest of the tree. | |
The content of BufferSize is always updated to the size needed to | |
serialize the definition block. | |
@ingroup CoreApis | |
@param [in] RootNode Pointer to a root node. | |
@param [in] Buffer Buffer to write the DSDT/SSDT table to. | |
If Buffer is NULL, the size needed to | |
serialize the DSDT/SSDT table is returned | |
in BufferSize. | |
@param [in, out] BufferSize Pointer holding the size of the Buffer. | |
Its content is always updated to the size | |
needed to serialize the DSDT/SSDT table. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
@retval EFI_BUFFER_TOO_SMALL No space left in the buffer. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlSerializeTree ( | |
IN AML_ROOT_NODE_HANDLE RootNode, | |
IN UINT8 *Buffer OPTIONAL, | |
IN OUT UINT32 *BufferSize | |
); | |
/** Clone a node. | |
This function does not clone the children nodes. | |
The cloned node returned is not attached to any tree. | |
@ingroup CoreApis | |
@param [in] Node Pointer to a node. | |
@param [out] ClonedNode Pointer holding the cloned node. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
@retval EFI_OUT_OF_RESOURCES Could not allocate memory. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlCloneNode ( | |
IN AML_NODE_HANDLE Node, | |
OUT AML_NODE_HANDLE *ClonedNode | |
); | |
/** | |
@defgroup TreeModificationApis Tree modification APIs | |
@ingroup AMLLib | |
@{ | |
Tree modification APIs allow to add/remove/replace nodes that are in a | |
variable list of arguments. | |
No interface is provided to add/remove/replace nodes that are in a fixed | |
list of arguments. Indeed, these nodes are the spine of the tree and a | |
mismanipulation would make the tree inconsistent. | |
It is however possible to modify the content of fixed argument nodes via | |
@ref NodeInterfaceApis APIs. | |
@} | |
*/ | |
/** Remove the Node from its parent's variable list of arguments. | |
The function will fail if the Node is in its parent's fixed | |
argument list. | |
The Node is not deleted. The deletion is done separately | |
from the removal. | |
@ingroup TreeModificationApis | |
@param [in] Node Pointer to a Node. | |
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 | |
AmlRemoveNodeFromVarArgList ( | |
IN AML_NODE_HANDLE Node | |
); | |
/** Add the NewNode to the head of the variable list of arguments | |
of the ParentNode. | |
@ingroup TreeModificationApis | |
@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 | |
AmlVarListAddHead ( | |
IN AML_NODE_HANDLE ParentNode, | |
IN AML_NODE_HANDLE NewNode | |
); | |
/** Add the NewNode to the tail of the variable list of arguments | |
of the ParentNode. | |
@ingroup TreeModificationApis | |
@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 | |
AmlVarListAddTail ( | |
IN AML_NODE_HANDLE ParentNode, | |
IN AML_NODE_HANDLE NewNode | |
); | |
/** Add the NewNode before the Node in the list of variable | |
arguments of the Node's parent. | |
@ingroup TreeModificationApis | |
@param [in] Node Pointer to a 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 | |
AmlVarListAddBefore ( | |
IN AML_NODE_HANDLE Node, | |
IN AML_NODE_HANDLE NewNode | |
); | |
/** Add the NewNode after the Node in the variable list of arguments | |
of the Node's parent. | |
@ingroup TreeModificationApis | |
@param [in] Node Pointer to a 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 | |
AmlVarListAddAfter ( | |
IN AML_NODE_HANDLE Node, | |
IN AML_NODE_HANDLE NewNode | |
); | |
/** Append a Resource Data node to the BufferOpNode. | |
The Resource Data node is added at the end of the variable | |
list of arguments of the BufferOpNode, but before the End Tag. | |
If no End Tag is found, the function returns an error. | |
@param [in] BufferOpNode Buffer node containing resource data elements. | |
@param [in] NewRdNode The new Resource Data node to add. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlAppendRdNode ( | |
IN AML_OBJECT_NODE_HANDLE BufferOpNode, | |
IN AML_DATA_NODE_HANDLE NewRdNode | |
); | |
/** Replace the OldNode, which is in a variable list of arguments, | |
with the NewNode. | |
Note: This function unlinks the OldNode from the tree. It is the callers | |
responsibility to delete the OldNode if needed. | |
@ingroup TreeModificationApis | |
@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 | |
AmlReplaceVariableArgument ( | |
IN AML_NODE_HANDLE OldNode, | |
IN AML_NODE_HANDLE NewNode | |
); | |
/** | |
@defgroup NodeInterfaceApis Node Interface APIs | |
@ingroup AMLLib | |
@{ | |
Node Interface APIs allow to query information from a node. Some functions | |
expect a specific node type among the root/object/data node types. | |
For instance, AmlGetRootNodeInfo expects to receive a root node. | |
E.g.: Query the node type, the ACPI header stored in the root node, | |
the OpCode/SubOpCode/PkgLen of an object node, the type of data | |
stored in a data node, etc. | |
These APIs also allow to update some information. | |
E.g.: The ACPI header stored in the root node, the buffer of a data node. | |
The information of object nodes and the data type of data nodes cannot be | |
modified. This prevents the creation of an inconsistent tree. | |
It is however possible to remove a node from a variable list of arguments | |
and replace it. Use the @ref TreeModificationApis APIs for this. | |
@} | |
*/ | |
/** Returns the tree node type (Root/Object/Data). | |
@ingroup NodeInterfaceApis | |
@param [in] Node Pointer to a Node. | |
@return The node type. | |
EAmlNodeUnknown if invalid parameter. | |
**/ | |
EAML_NODE_TYPE | |
EFIAPI | |
AmlGetNodeType ( | |
IN AML_NODE_HANDLE Node | |
); | |
/** Get the RootNode information. | |
The Node must be a root node. | |
@ingroup NodeInterfaceApis | |
@param [in] RootNode Pointer to a root node. | |
@param [out] SdtHeaderBuffer Buffer to copy the ACPI DSDT/SSDT header to. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlGetRootNodeInfo ( | |
IN AML_ROOT_NODE_HANDLE RootNode, | |
OUT EFI_ACPI_DESCRIPTION_HEADER *SdtHeaderBuffer | |
); | |
/** Get the ObjectNode information. | |
The Node must be an object node. | |
@ingroup NodeInterfaceApis | |
@param [in] ObjectNode Pointer to an object node. | |
@param [out] OpCode Pointer holding the OpCode. | |
Optional, can be NULL. | |
@param [out] SubOpCode Pointer holding the SubOpCode. | |
Optional, can be NULL. | |
@param [out] PkgLen Pointer holding the PkgLen. | |
The PkgLen is 0 for nodes | |
not having the Pkglen attribute. | |
Optional, can be NULL. | |
@param [out] IsNameSpaceNode Pointer holding TRUE if the node is defining | |
or changing the NameSpace scope. | |
E.g.: The "Name ()" and "Scope ()" ASL | |
statements add/modify the NameSpace scope. | |
Their corresponding node are NameSpace nodes. | |
Optional, can be NULL. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlGetObjectNodeInfo ( | |
IN AML_OBJECT_NODE_HANDLE ObjectNode, | |
OUT UINT8 *OpCode OPTIONAL, | |
OUT UINT8 *SubOpCode OPTIONAL, | |
OUT UINT32 *PkgLen OPTIONAL, | |
OUT BOOLEAN *IsNameSpaceNode OPTIONAL | |
); | |
/** Returns the count of the fixed arguments for the input Node. | |
@ingroup NodeInterfaceApis | |
@param [in] Node Pointer to an object node. | |
@return Number of fixed arguments of the object node. | |
Return 0 if the node is not an object node. | |
**/ | |
UINT8 | |
AmlGetFixedArgumentCount ( | |
IN AML_OBJECT_NODE_HANDLE Node | |
); | |
/** Get the data type of the DataNode. | |
The Node must be a data node. | |
@ingroup NodeInterfaceApis | |
@param [in] DataNode Pointer to a data node. | |
@param [out] DataType Pointer holding the data type of the data buffer. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlGetNodeDataType ( | |
IN AML_DATA_NODE_HANDLE DataNode, | |
OUT EAML_NODE_DATA_TYPE *DataType | |
); | |
/** Get the descriptor Id of the resource data element | |
contained in the DataNode. | |
The Node must be a data node. | |
The Node must have the resource data type, i.e. have the | |
EAmlNodeDataTypeResourceData data type. | |
@ingroup NodeInterfaceApis | |
@param [in] DataNode Pointer to a data node containing a | |
resource data element. | |
@param [out] ResourceDataType Pointer holding the descriptor Id of | |
the resource data. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlGetResourceDataType ( | |
IN AML_DATA_NODE_HANDLE DataNode, | |
OUT AML_RD_HEADER *ResourceDataType | |
); | |
/** Get the data buffer and size of the DataNode. | |
The Node must be a data node. | |
BufferSize is always updated to the size of buffer of the DataNode. | |
If: | |
- the content of BufferSize is >= to the DataNode's buffer size; | |
- Buffer is not NULL; | |
then copy the content of the DataNode's buffer in Buffer. | |
@ingroup NodeInterfaceApis | |
@param [in] DataNode Pointer to a data node. | |
@param [out] Buffer Buffer to write the data to. | |
Optional, if NULL, only update BufferSize. | |
@param [in, out] BufferSize Pointer holding: | |
- At entry, the size of the Buffer; | |
- At exit, the size of the DataNode's | |
buffer size. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlGetDataNodeBuffer ( | |
IN AML_DATA_NODE_HANDLE DataNode, | |
OUT UINT8 *Buffer OPTIONAL, | |
IN OUT UINT32 *BufferSize | |
); | |
/** Update the ACPI DSDT/SSDT table header. | |
The input SdtHeader information is copied to the tree RootNode. | |
The table Length field is automatically updated. | |
The checksum field is only updated when serializing the tree. | |
@ingroup NodeInterfaceApis | |
@param [in] RootNode Pointer to a root node. | |
@param [in] SdtHeader Pointer to an ACPI DSDT/SSDT table header. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlUpdateRootNode ( | |
IN AML_ROOT_NODE_HANDLE RootNode, | |
IN CONST EFI_ACPI_DESCRIPTION_HEADER *SdtHeader | |
); | |
/** Update an object node representing an integer with a new value. | |
The object node must have one of the following OpCodes: | |
- AML_BYTE_PREFIX | |
- AML_WORD_PREFIX | |
- AML_DWORD_PREFIX | |
- AML_QWORD_PREFIX | |
- AML_ZERO_OP | |
- AML_ONE_OP | |
The following OpCode is not supported: | |
- AML_ONES_OP | |
@param [in] IntegerOpNode Pointer an object node containing an integer. | |
Must not be an object node with an AML_ONES_OP | |
OpCode. | |
@param [in] NewInteger New integer value to set. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlUpdateInteger ( | |
IN AML_OBJECT_NODE_HANDLE IntegerOpNode, | |
IN UINT64 NewInteger | |
); | |
/** Update the buffer of a data node. | |
Note: The data type of the buffer's content must match the data type of the | |
DataNode. This is a hard restriction to prevent undesired behaviour. | |
@ingroup NodeInterfaceApis | |
@param [in] DataNode Pointer to a data node. | |
@param [in] DataType Data type of the Buffer's content. | |
@param [in] Buffer Buffer containing the new data. The content of | |
the Buffer is copied. | |
@param [in] Size Size of the Buffer. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
@retval EFI_UNSUPPORTED Operation not supporter. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlUpdateDataNode ( | |
IN AML_DATA_NODE_HANDLE DataNode, | |
IN EAML_NODE_DATA_TYPE DataType, | |
IN UINT8 *Buffer, | |
IN UINT32 Size | |
); | |
/** | |
@defgroup NavigationApis Navigation APIs | |
@ingroup AMLLib | |
@{ | |
Navigation APIs allow to navigate in the AML tree. There are different | |
ways to navigate in the tree by: | |
- Direct relation (@ref CoreNavigationApis); | |
- Enumeration: enumerate all the nodes and call a callback function | |
(@ref EnumerationApis); | |
- Iteration: instantiate an iterator and use it to navigate | |
(@ref IteratorApis); | |
- NameSpace path: use the AML namespace to navigate the tree | |
(@ref NameSpaceApis). | |
@} | |
*/ | |
/** | |
@defgroup CoreNavigationApis Core Navigation APIs | |
@ingroup NavigationApis | |
@{ | |
Core Navigation APIs allow to get a node by specifying a relation. | |
E.g.: Get the parent, the n-th fixed argument, the next variable | |
argument, etc. | |
@} | |
*/ | |
/** Get the parent node of the input Node. | |
@ingroup CoreNavigationApis | |
@param [in] Node Pointer to a node. | |
@return The parent node of the input Node. | |
NULL otherwise. | |
**/ | |
AML_NODE_HANDLE | |
EFIAPI | |
AmlGetParent ( | |
IN AML_NODE_HANDLE Node | |
); | |
/** Get the node at the input Index in the fixed argument list of the input | |
ObjectNode. | |
@ingroup CoreNavigationApis | |
@param [in] ObjectNode Pointer to an object node. | |
@param [in] Index The Index of the fixed argument to get. | |
@return The node at the input Index in the fixed argument list | |
of the input ObjectNode. | |
NULL otherwise, e.g. if the node is not an object node, or no | |
node is available at this Index. | |
**/ | |
AML_NODE_HANDLE | |
EFIAPI | |
AmlGetFixedArgument ( | |
IN AML_OBJECT_NODE_HANDLE ObjectNode, | |
IN EAML_PARSE_INDEX Index | |
); | |
/** Get the sibling node among the nodes being in | |
the same variable argument list. | |
(ParentNode) /-i # Child of fixed argument b | |
\ / | |
|- [a][b][c][d] # Fixed Arguments | |
|- {(VarArgNode)->(f)->(g)} # Variable Arguments | |
\ | |
\-h # Child of variable argument e | |
Node must be in a variable list of arguments. | |
Traversal Order: VarArgNode, f, g, NULL | |
@ingroup CoreNavigationApis | |
@param [in] VarArgNode Pointer to a node. | |
Must be in a variable list of arguments. | |
@return The next node after VarArgNode in the variable list of arguments. | |
Return NULL if | |
- VarArgNode is the last node of the list, or | |
- VarArgNode is not part of a variable list of arguments. | |
**/ | |
AML_NODE_HANDLE | |
EFIAPI | |
AmlGetSiblingVariableArgument ( | |
IN AML_NODE_HANDLE VarArgNode | |
); | |
/** Get the next variable argument. | |
(Node) /-i # Child of fixed argument b | |
\ / | |
|- [a][b][c][d] # Fixed Arguments | |
|- {(e)->(f)->(g)} # Variable Arguments | |
\ | |
\-h # Child of variable argument e | |
Traversal Order: e, f, g, NULL | |
@ingroup CoreNavigationApis | |
@param [in] Node Pointer to a Root node or Object Node. | |
@param [in] CurrVarArg Pointer to the Current Variable Argument. | |
@return The node after the CurrVarArg in the variable list of arguments. | |
If CurrVarArg is NULL, return the first node of the | |
variable argument list. | |
Return NULL if | |
- CurrVarArg is the last node of the list, or | |
- Node does not have a variable list of arguments. | |
**/ | |
AML_NODE_HANDLE | |
EFIAPI | |
AmlGetNextVariableArgument ( | |
IN AML_NODE_HANDLE Node, | |
IN AML_NODE_HANDLE CurrVarArg | |
); | |
/** Get the previous variable argument. | |
(Node) /-i # Child of fixed argument b | |
\ / | |
|- [a][b][c][d] # Fixed Arguments | |
|- {(e)->(f)->(g)} # Variable Arguments | |
\ | |
\-h # Child of variable argument e | |
Traversal Order: g, f, e, NULL | |
@ingroup CoreNavigationApis | |
@param [in] Node Pointer to a root node or an object node. | |
@param [in] CurrVarArg Pointer to the Current Variable Argument. | |
@return The node before the CurrVarArg in the variable list of | |
arguments. | |
If CurrVarArg is NULL, return the last node of the | |
variable list of arguments. | |
Return NULL if: | |
- CurrVarArg is the first node of the list, or | |
- Node doesn't have a variable list of arguments. | |
**/ | |
AML_NODE_HANDLE | |
EFIAPI | |
AmlGetPreviousVariableArgument ( | |
IN AML_NODE_HANDLE Node, | |
IN AML_NODE_HANDLE CurrVarArg | |
); | |
/** | |
@defgroup EnumerationApis Enumeration APIs | |
@ingroup NavigationApis | |
@{ | |
Enumeration APIs are navigation APIs, allowing to call a callback function | |
on each node enumerated. Nodes are enumerated in the AML bytestream order, | |
i.e. in a depth first order. | |
@} | |
*/ | |
/** | |
Callback function prototype used when iterating through the tree. | |
@ingroup EnumerationApis | |
@param [in] Node The Node currently being processed. | |
@param [in, out] Context A context for the callback function. | |
Can be optional. | |
@param [in, out] Status End the enumeration if pointing to a value | |
evaluated to TRUE. | |
Can be optional. | |
@retval TRUE if the enumeration can continue or has finished without | |
interruption. | |
@retval FALSE if the enumeration needs to stopped or has stopped. | |
**/ | |
typedef | |
BOOLEAN | |
(EFIAPI *EDKII_AML_TREE_ENUM_CALLBACK)( | |
IN AML_NODE_HANDLE Node, | |
IN OUT VOID *Context OPTIONAL, | |
IN OUT EFI_STATUS *Status OPTIONAL | |
); | |
/** Enumerate all nodes of the subtree under the input Node in the AML | |
bytestream order (i.e. in a depth first order), and call the CallBack | |
function with the input Context. | |
The prototype of the Callback function is EDKII_AML_TREE_ENUM_CALLBACK. | |
@ingroup EnumerationApis | |
@param [in] Node Enumerate nodes of the subtree under this Node. | |
Must be a valid node. | |
@param [in] CallBack Callback function to call on each node. | |
@param [in, out] Context Void pointer used to pass some information | |
to the Callback function. | |
Optional, can be NULL. | |
@param [out] Status Optional parameter that can be used to get | |
the status of the Callback function. | |
If used, need to be init to EFI_SUCCESS. | |
@retval TRUE if the enumeration can continue or has finished without | |
interruption. | |
@retval FALSE if the enumeration needs to stopped or has stopped. | |
**/ | |
BOOLEAN | |
EFIAPI | |
AmlEnumTree ( | |
IN AML_NODE_HANDLE Node, | |
IN EDKII_AML_TREE_ENUM_CALLBACK CallBack, | |
IN OUT VOID *Context OPTIONAL, | |
OUT EFI_STATUS *Status OPTIONAL | |
); | |
/** | |
@defgroup NameSpaceApis NameSpace APIs | |
@ingroup NavigationApis | |
@{ | |
NameSpace APIs allow to find a node from an AML path, and reciprocally | |
get the AML path of a node. | |
These APIs only operate on "NameSpace nodes", i.e. nodes that are | |
part of the AML namespace. These are the root node and object nodes | |
acknowledged by AmlGetObjectNodeInfo in @ref NodeInterfaceApis. | |
@} | |
*/ | |
/** Build the absolute ASL pathname to Node. | |
BufferSize is always updated to the size of the pathname. | |
If: | |
- the content of BufferSize is >= to the size of the pathname AND; | |
- Buffer is not NULL; | |
then copy the pathname in the Buffer. A buffer of the size | |
MAX_ASL_NAMESTRING_SIZE is big enough to receive any ASL pathname. | |
@ingroup NameSpaceApis | |
@param [in] Node Node to build the absolute path to. | |
Must be a root node, or a namespace node. | |
@param [out] Buffer Buffer to write the path to. | |
If NULL, only update *BufferSize. | |
@param [in, out] BufferSize Pointer holding: | |
- At entry, the size of the Buffer; | |
- At exit, the size of the pathname. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_BUFFER_TOO_SMALL No space left in the buffer. | |
@retval EFI_INVALID_PARAMETER Invalid parameter. | |
@retval EFI_OUT_OF_RESOURCES Out of memory. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AmlGetAslPathName ( | |
IN AML_NODE_HANDLE Node, | |
OUT CHAR8 *Buffer, | |
IN OUT UINT32 *BufferSize | |
); | |
#endif // AML_CORE_INTERFACE_H_ |