REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the DynamicTablesPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			78 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   AML Field List.
 | |
| 
 | |
|   Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| **/
 | |
| 
 | |
| #ifndef AML_FIELD_LIST_PARSER_H_
 | |
| #define AML_FIELD_LIST_PARSER_H_
 | |
| 
 | |
| #include <AmlNodeDefines.h>
 | |
| #include <Stream/AmlStream.h>
 | |
| 
 | |
| /** Parse the FieldList contained in the stream.
 | |
| 
 | |
|   Create an object node for each field element parsed in the field list
 | |
|   available in the Stream, and add them to the variable list of arguments
 | |
|   of the FieldNode.
 | |
| 
 | |
|   Nodes that can have a field list are referred as field nodes. They have the
 | |
|   AML_HAS_FIELD_LIST attribute.
 | |
| 
 | |
|   According to the ACPI 6.3 specification, s20.2.5.2 "Named Objects Encoding",
 | |
|   field elements can be:
 | |
|    - NamedField           := NameSeg PkgLength;
 | |
|    - ReservedField        := 0x00 PkgLength;
 | |
|    - AccessField          := 0x01 AccessType AccessAttrib;
 | |
|    - ConnectField         := <0x02 NameString> | <0x02 BufferData>;
 | |
|    - ExtendedAccessField  := 0x03 AccessType ExtendedAccessAttrib AccessLength.
 | |
| 
 | |
|   A small set of opcodes describes the field elements. They are referred as
 | |
|   field opcodes. An AML_BYTE_ENCODING table has been created for field OpCodes.
 | |
|   Field elements:
 | |
|    - don't have a SubOpCode;
 | |
|    - have at most 3 fixed arguments (as opposed to 6 for standard AML objects);
 | |
|    - don't have a variable list of arguments;
 | |
|    - only the NamedField field element is part of the AML namespace.
 | |
| 
 | |
|   ConnectField's BufferData is a buffer node containing a single
 | |
|   resource data element.
 | |
|   NamedField field elements don't have an AML OpCode. NameSeg starts with a
 | |
|   Char type and can thus be differentiated from the Opcodes for other fields.
 | |
|   A pseudo OpCode has been created to simplify the parser.
 | |
| 
 | |
|   The branch created from parsing a field node is as:
 | |
|   (FieldNode)
 | |
|       \
 | |
|        |- [FixedArg[0]][FixedArg[1]]                      # Fixed Arguments
 | |
|        |- {(FieldElement[0])->(FieldElement[1])->...)}    # Variable Arguments
 | |
| 
 | |
|   With FieldElement[n] being one of NamedField, ReservedField, AccessField,
 | |
|   ConnectField, ExtendedAccessField.
 | |
| 
 | |
|   @param  [in]  FieldNode         Field node.
 | |
|                                   Must have the AML_HAS_FIELD_LIST
 | |
|                                   attribute.
 | |
|   @param  [in]  FStream           Forward stream pointing to a field list.
 | |
|                                   The stream must not be at its end.
 | |
|   @param  [in]  NameSpaceRefList  List of namespace reference nodes,
 | |
|                                   allowing to associate an absolute
 | |
|                                   path to a node in the tree.
 | |
| 
 | |
|   @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    Could not allocate memory.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| AmlParseFieldList (
 | |
|   IN  AML_OBJECT_NODE  *FieldNode,
 | |
|   IN  AML_STREAM       *FStream,
 | |
|   IN  LIST_ENTRY       *NameSpaceRefList
 | |
|   );
 | |
| 
 | |
| #endif // AML_FIELD_LIST_PARSER_H_
 |