/** @file
AML NameSpace.
Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef AML_NAMESPACE_H_
#define AML_NAMESPACE_H_
#include
#include
/** Return the first AML namespace node up in the parent hierarchy.
Return the root node if no namespace node is found is the hierarchy.
@param [in] Node Node to look at the parents from.
If Node is the root node, OutNode is NULL.
@param [out] OutNode If a namespace node is found, pointer to the
first namespace node of Node's parents.
Stop at the root node otherwise.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_INVALID_PARAMETER Invalid parameter.
**/
EFI_STATUS
EFIAPI
AmlGetFirstAncestorNameSpaceNode (
IN CONST AML_NODE_HEADER *Node,
OUT AML_NODE_HEADER **OutNode
);
/** Build the raw absolute AML pathname to Node and write it to a stream.
A raw AML pathname is an AML pathname where the root char ('\'),
prefix chars ('^') and NameString prefix byte (e.g.: DualNamePrefix)
have been removed. A raw AML pathname is a list of concatenated
NameSegs.
E.g.:
ASL absolute path: "[RootChar]AAAA.BBBB.CCCC\0"
AML absolute path: "[RootChar][MultiNamePrefix][3(NameSegs)]AAAABBBBCCCC"
Raw absolute path: "AAAABBBBCCCC"
@param [in] Node Node to build the raw absolute path to
Must be a root node, or a namespace node.
@param [in] InputParent Skip InputParent AML namespace levels before
starting building the raw absolute pathname.
E.g.: - Node's name being "^AAAA.BBBB.CCCC";
- InputParent = 2;
"BBBB.CCCC" will be skipped (2
levels), and "^AAAA" will remain. The
first caret is not related to InputParent.
@param [out] RawAbsPathBStream Backward stream to write the raw
pathname to.
If Node is the root node, the Stream data
Buffer will stay empty.
The stream must not be at its end.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_BUFFER_TOO_SMALL No space left in the buffer.
@retval EFI_INVALID_PARAMETER Invalid parameter.
**/
EFI_STATUS
EFIAPI
AmlGetRawNameSpacePath (
IN CONST AML_NODE_HEADER *Node,
IN UINT32 InputParent,
OUT AML_STREAM *RawAbsPathBStream
);
#endif // AML_NAMESPACE_H_