In an effort to clean the documentation of the above package, remove duplicated words. Cc: Sami Mujawar <Sami.Mujawar@arm.com> Cc: Alexei Fedorov <Alexei.Fedorov@arm.com> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			184 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   AML Node Definition.
 | |
| 
 | |
|   Copyright (c) 2020, Arm Limited. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| **/
 | |
| 
 | |
| #ifndef AML_NODE_DEFINES_H_
 | |
| #define AML_NODE_DEFINES_H_
 | |
| 
 | |
| #include <AmlEncoding/Aml.h>
 | |
| #include <IndustryStandard/Acpi.h>
 | |
| 
 | |
| /** AML header node.
 | |
| 
 | |
|   This abstract class represents either a root/object/data node.
 | |
|   All the enumerated nodes have this same common header.
 | |
| */
 | |
| typedef struct AmlNodeHeader {
 | |
|   /// This must be the first field in this structure.
 | |
|   LIST_ENTRY              Link;
 | |
| 
 | |
|   /// Parent of this node. NULL for the root node.
 | |
|   struct AmlNodeHeader    *Parent;
 | |
| 
 | |
|   /// Node type allowing to identify a root/object/data node.
 | |
|   EAML_NODE_TYPE          NodeType;
 | |
| } AML_NODE_HEADER;
 | |
| 
 | |
| /** Node handle.
 | |
| */
 | |
| typedef AML_NODE_HEADER *AML_NODE_HANDLE;
 | |
| 
 | |
| /** AML root node.
 | |
| 
 | |
|   The root node is unique and at the head of tree. It is a fake node used
 | |
|   to maintain the list of AML statements (stored as object nodes) which are
 | |
|   at the first scope level.
 | |
| */
 | |
| typedef struct AmlRootNode {
 | |
|   /// Header information. Must be the first field of the struct.
 | |
|   AML_NODE_HEADER                NodeHeader;
 | |
| 
 | |
|   /// List of object nodes being at the first scope level.
 | |
|   /// These are children and can only be object nodes.
 | |
|   LIST_ENTRY                     VariableArgs;
 | |
| 
 | |
|   /// ACPI DSDT/SSDT header.
 | |
|   EFI_ACPI_DESCRIPTION_HEADER    *SdtHeader;
 | |
| } AML_ROOT_NODE;
 | |
| 
 | |
| /** Root Node handle.
 | |
| */
 | |
| typedef AML_ROOT_NODE *AML_ROOT_NODE_HANDLE;
 | |
| 
 | |
| /** AML object node.
 | |
| 
 | |
|   Object nodes match AML statements. They are associated with an
 | |
|   OpCode/SubOpCode, and can have children.
 | |
| */
 | |
| typedef struct AmlObjectNode {
 | |
|   /// Header information. Must be the first field of the struct.
 | |
|   AML_NODE_HEADER            NodeHeader;
 | |
| 
 | |
|   /// Some object nodes have a variable list of arguments.
 | |
|   /// These are children and can only be object/data nodes.
 | |
|   /// Cf ACPI specification, s20.3.
 | |
|   LIST_ENTRY                 VariableArgs;
 | |
| 
 | |
|   /// Fixed arguments of this object node.
 | |
|   /// These are children and can be object/data nodes.
 | |
|   /// Cf ACPI specification, s20.3.
 | |
|   AML_NODE_HEADER            *FixedArgs[EAmlParseIndexMax];
 | |
| 
 | |
|   /// AML byte encoding. Stores the encoding information:
 | |
|   /// (OpCode/SubOpCode/number of fixed arguments/ attributes).
 | |
|   CONST AML_BYTE_ENCODING    *AmlByteEncoding;
 | |
| 
 | |
|   /// Some nodes have a PkgLen following their OpCode/SubOpCode in the
 | |
|   /// AML bytestream. This field stores the decoded value of the PkgLen.
 | |
|   UINT32                     PkgLen;
 | |
| } AML_OBJECT_NODE;
 | |
| 
 | |
| /** Object Node handle.
 | |
| */
 | |
| typedef AML_OBJECT_NODE *AML_OBJECT_NODE_HANDLE;
 | |
| 
 | |
| /** AML data node.
 | |
| 
 | |
|   Data nodes store the smallest pieces of information.
 | |
|   E.g.: UINT8, UINT64, NULL terminated string, etc.
 | |
|   Data node don't have children nodes.
 | |
| */
 | |
| typedef struct AmlDataNode {
 | |
|   /// Header information. Must be the first field of the struct.
 | |
|   AML_NODE_HEADER        NodeHeader;
 | |
| 
 | |
|   /// Tag identifying what data is stored in this node.
 | |
|   /// E.g. UINT, NULL terminated string, resource data element, etc.
 | |
|   EAML_NODE_DATA_TYPE    DataType;
 | |
| 
 | |
|   /// Buffer containing the data stored by this node.
 | |
|   UINT8                  *Buffer;
 | |
| 
 | |
|   /// Size of the Buffer.
 | |
|   UINT32                 Size;
 | |
| } AML_DATA_NODE;
 | |
| 
 | |
| /** Data Node handle.
 | |
| */
 | |
| typedef AML_DATA_NODE *AML_DATA_NODE_HANDLE;
 | |
| 
 | |
| /** Check whether a Node has a valid NodeType.
 | |
| 
 | |
|   @param  [in]  Node  The node to check.
 | |
| 
 | |
|   @retval TRUE  The Node has a valid NodeType.
 | |
|   @retval FALSE Otherwise.
 | |
| */
 | |
| #define IS_AML_NODE_VALID(Node)                                               \
 | |
|           ((Node != NULL)                                                  && \
 | |
|             ((((CONST AML_NODE_HEADER*)Node)->NodeType > EAmlNodeUnknown)  || \
 | |
|             (((CONST AML_NODE_HEADER*)Node)->NodeType < EAmlNodeMax)))
 | |
| 
 | |
| /** Check whether a Node is a root node.
 | |
| 
 | |
|   @param  [in]  Node  The node to check.
 | |
| 
 | |
|   @retval TRUE  The Node is a root node.
 | |
|   @retval FALSE Otherwise.
 | |
| */
 | |
| #define IS_AML_ROOT_NODE(Node)                                                \
 | |
|           ((Node != NULL)                                                  && \
 | |
|            (((CONST AML_NODE_HEADER*)Node)->NodeType == EAmlNodeRoot))
 | |
| 
 | |
| /** Check whether a Node is an object node.
 | |
| 
 | |
|   @param  [in]  Node  The node to check.
 | |
| 
 | |
|   @retval TRUE  The Node is an object node.
 | |
|   @retval FALSE Otherwise.
 | |
| */
 | |
| #define IS_AML_OBJECT_NODE(Node)                                              \
 | |
|           ((Node != NULL)                                                  && \
 | |
|            (((CONST AML_NODE_HEADER*)Node)->NodeType == EAmlNodeObject))
 | |
| 
 | |
| /** Check whether a Node is a data node.
 | |
| 
 | |
|   @param  [in]  Node  The node to check.
 | |
| 
 | |
|   @retval TRUE  The Node is a data node.
 | |
|   @retval FALSE Otherwise.
 | |
| */
 | |
| #define IS_AML_DATA_NODE(Node)                                                \
 | |
|           ((Node != NULL)                                                  && \
 | |
|            (((CONST AML_NODE_HEADER*)Node)->NodeType == EAmlNodeData))
 | |
| 
 | |
| /** Check whether a Node has a parent.
 | |
| 
 | |
|   @param  [in]  Node  The node to check.
 | |
| 
 | |
|   @retval TRUE  The Node is a data node.
 | |
|   @retval FALSE Otherwise.
 | |
| */
 | |
| #define AML_NODE_HAS_PARENT(Node)                                             \
 | |
|           (IS_AML_NODE_VALID (Node)                                        && \
 | |
|            (((CONST AML_NODE_HEADER*)Node)->Parent != NULL))
 | |
| 
 | |
| /** Check that the Node is not attached somewhere.
 | |
|     This doesn't mean the node cannot have children.
 | |
| 
 | |
|   @param  [in]  Node  The node to check.
 | |
| 
 | |
|   @retval TRUE  The Node has been detached.
 | |
|   @retval FALSE Otherwise.
 | |
| */
 | |
| #define AML_NODE_IS_DETACHED(Node)                                            \
 | |
|           (IS_AML_NODE_VALID (Node)                                        && \
 | |
|            IsListEmpty ((CONST LIST_ENTRY*)Node)                           && \
 | |
|            (((CONST AML_NODE_HEADER*)Node)->Parent == NULL))
 | |
| 
 | |
| #endif // AML_NODE_DEFINES_H_
 |