TianoCore EDK2 master
Loading...
Searching...
No Matches
AmlFieldListParser.c File Reference

Go to the source code of this file.

Functions

STATIC EFI_STATUS EFIAPI AmlParseFieldElement (IN CONST AML_BYTE_ENCODING *FieldByteEncoding, IN OUT AML_OBJECT_NODE *FieldNode, IN OUT AML_STREAM *FStream, IN OUT LIST_ENTRY *NameSpaceRefList)
 
STATIC EFI_STATUS EFIAPI AmlParseNamedFieldElement (IN CONST AML_BYTE_ENCODING *NamedFieldByteEncoding, IN OUT AML_OBJECT_NODE *FieldNode, IN OUT AML_STREAM *FStream, IN OUT LIST_ENTRY *NameSpaceRefList)
 
EFI_STATUS EFIAPI AmlParseFieldList (IN AML_OBJECT_NODE *FieldNode, IN AML_STREAM *FStream, IN LIST_ENTRY *NameSpaceRefList)
 

Detailed Description

AML Field List Parser.

Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.

SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file AmlFieldListParser.c.

Function Documentation

◆ AmlParseFieldElement()

STATIC EFI_STATUS EFIAPI AmlParseFieldElement ( IN CONST AML_BYTE_ENCODING FieldByteEncoding,
IN OUT AML_OBJECT_NODE FieldNode,
IN OUT AML_STREAM FStream,
IN OUT LIST_ENTRY NameSpaceRefList 
)

Parse a field element.

The field elements this function can parse are one of:

  • ReservedField;
  • AccessField;
  • ConnectField;
  • ExtendedAccessField. Indeed, the NamedField field element doesn't have an OpCode. Thus it needs to be parsed differently.
Parameters
[in]FieldByteEncodingField byte encoding to parse.
[in,out]FieldNodeField node to attach the field element to. Must have the AML_HAS_FIELD_LIST attribute.
[in,out]FStreamForward stream pointing to a field element not being a named field. The stream must not be at its end.
[in,out]NameSpaceRefListList of namespace reference nodes, allowing to associate an absolute path to a node in the tree.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_BUFFER_TOO_SMALLNo space left in the buffer.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_OUT_OF_RESOURCESCould not allocate memory.

Definition at line 48 of file AmlFieldListParser.c.

◆ AmlParseFieldList()

EFI_STATUS EFIAPI AmlParseFieldList ( IN AML_OBJECT_NODE FieldNode,
IN AML_STREAM FStream,
IN LIST_ENTRY NameSpaceRefList 
)

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.

Parameters
[in]FieldNodeField node. Must have the AML_HAS_FIELD_LIST attribute.
[in]FStreamForward stream pointing to a field list. The stream must not be at its end.
[in]NameSpaceRefListList of namespace reference nodes, allowing to associate an absolute path to a node in the tree.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_BUFFER_TOO_SMALLNo space left in the buffer.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_OUT_OF_RESOURCESCould not allocate memory.

Definition at line 311 of file AmlFieldListParser.c.

◆ AmlParseNamedFieldElement()

STATIC EFI_STATUS EFIAPI AmlParseNamedFieldElement ( IN CONST AML_BYTE_ENCODING NamedFieldByteEncoding,
IN OUT AML_OBJECT_NODE FieldNode,
IN OUT AML_STREAM FStream,
IN OUT LIST_ENTRY NameSpaceRefList 
)

Parse a named field element.

Indeed, the NamedField field element doesn't have an OpCode. Thus it needs to be parsed differently. NamedField field element start with a char.

Parameters
[in]NamedFieldByteEncodingField byte encoding to parse.
[in,out]FieldNodeField node to attach the field element to. Must have the AML_HAS_FIELD_LIST attribute.
[in,out]FStreamForward stream pointing to a named field element. The stream must not be at its end.
[in,out]NameSpaceRefListList of namespace reference nodes, allowing to associate an absolute path to a node in the tree.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_BUFFER_TOO_SMALLNo space left in the buffer.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_OUT_OF_RESOURCESCould not allocate memory.

Definition at line 186 of file AmlFieldListParser.c.