TianoCore EDK2 master
Loading...
Searching...
No Matches
AmlResourceDataCodeGen.h File Reference

Go to the source code of this file.

Functions

EFI_STATUS EFIAPI AmlCodeGenRdInterrupt (IN BOOLEAN ResourceConsumer, IN BOOLEAN EdgeTriggered, IN BOOLEAN ActiveLow, IN BOOLEAN Shared, IN UINT32 *IrqList, IN UINT8 IrqCount, IN AML_OBJECT_NODE_HANDLE NameOpNode OPTIONAL, OUT AML_DATA_NODE_HANDLE *NewRdNode OPTIONAL)
 
EFI_STATUS EFIAPI AmlCodeGenRdRegister (IN UINT8 AddressSpace, IN UINT8 BitWidth, IN UINT8 BitOffset, IN UINT64 Address, IN UINT8 AccessSize, IN AML_OBJECT_NODE_HANDLE NameOpNode OPTIONAL, OUT AML_DATA_NODE_HANDLE *NewRdNode OPTIONAL)
 
EFI_STATUS EFIAPI AmlCodeGenEndTag (IN UINT8 CheckSum OPTIONAL, IN AML_OBJECT_NODE *ParentNode OPTIONAL, OUT AML_DATA_NODE **NewRdNode OPTIONAL)
 

Detailed Description

AML Resource Data Code Generation.

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

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

Definition in file AmlResourceDataCodeGen.h.

Function Documentation

◆ AmlCodeGenEndTag()

EFI_STATUS EFIAPI AmlCodeGenEndTag ( IN UINT8 CheckSum  OPTIONAL,
IN AML_OBJECT_NODE *ParentNode  OPTIONAL,
OUT AML_DATA_NODE **NewRdNode  OPTIONAL 
)

Code generation for the EndTag resource data.

The EndTag resource data is automatically generated by the ASL compiler at the end of a list of resource data elements. Thus, it doesn't have a corresponding ASL function.

This function allocates memory to create a data node. It is the caller's responsibility to either:

  • attach this node to an AML tree;
  • delete this node.

ACPI 6.4, s6.4.2.9 "End Tag": "This checksum is generated such that adding it to the sum of all the data bytes will produce a zero sum." "If the checksum field is zero, the resource data is treated as if the checksum operation succeeded. Configuration proceeds normally."

To avoid re-computing checksums, if a new resource data elements is added/removed/modified in a list of resource data elements, the AmlLib resets the checksum to 0.

Parameters
[in]CheckSumCheckSum to store in the EndTag. To ignore/avoid computing the checksum, give 0.
[in]ParentNodeIf not NULL, add the generated node to the end of the variable list of argument of the ParentNode. The ParentNode must not initially contain an EndTag resource data element.
[out]NewRdNodeIf success, contains the generated node.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_OUT_OF_RESOURCESCould not allocate memory.

Definition at line 1596 of file AmlResourceDataCodeGen.c.

◆ AmlCodeGenRdInterrupt()

EFI_STATUS EFIAPI AmlCodeGenRdInterrupt ( IN BOOLEAN  ResourceConsumer,
IN BOOLEAN  EdgeTriggered,
IN BOOLEAN  ActiveLow,
IN BOOLEAN  Shared,
IN UINT32 *  IrqList,
IN UINT8  IrqCount,
IN AML_OBJECT_NODE_HANDLE NameOpNode  OPTIONAL,
OUT AML_DATA_NODE_HANDLE *NewRdNode  OPTIONAL 
)

Code generation for the "Interrupt ()" ASL function.

The Resource Data effectively created is an Extended Interrupt Resource Data. Cf ACPI 6.4:

  • s6.4.3.6 "Extended Interrupt Descriptor"
  • s19.6.64 "Interrupt (Interrupt Resource Descriptor Macro)"

The created resource data node can be:

  • appended to the list of resource data elements of the NameOpNode. In such case NameOpNode must be defined by a the "Name ()" ASL statement and initially contain a "ResourceTemplate ()".
  • returned through the NewRdNode parameter.
Parameters
[in]ResourceConsumerThe device consumes the specified interrupt or produces it for use by a child device.
[in]EdgeTriggeredThe interrupt is edge triggered or level triggered.
[in]ActiveLowThe interrupt is active-high or active-low.
[in]SharedThe interrupt can be shared with other devices or not (Exclusive).
[in]IrqListInterrupt list. Must be non-NULL.
[in]IrqCountInterrupt count. Must be non-zero.
[in]NameOpNodeNameOp object node defining a named object. If provided, append the new resource data node to the list of resource data elements of this node.
[out]NewRdNodeIf provided and success, contain the created node.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_OUT_OF_RESOURCESCould not allocate memory.

Definition at line 1326 of file AmlResourceDataCodeGen.c.

◆ AmlCodeGenRdRegister()

EFI_STATUS EFIAPI AmlCodeGenRdRegister ( IN UINT8  AddressSpace,
IN UINT8  BitWidth,
IN UINT8  BitOffset,
IN UINT64  Address,
IN UINT8  AccessSize,
IN AML_OBJECT_NODE_HANDLE NameOpNode  OPTIONAL,
OUT AML_DATA_NODE_HANDLE *NewRdNode  OPTIONAL 
)

Code generation for the "Register ()" ASL function.

The Resource Data effectively created is a Generic Register Descriptor. Data. Cf ACPI 6.4:

  • s6.4.3.7 "Generic Register Descriptor".
  • s19.6.114 "Register".

The created resource data node can be:

  • appended to the list of resource data elements of the NameOpNode. In such case NameOpNode must be defined by a the "Name ()" ASL statement and initially contain a "ResourceTemplate ()".
  • returned through the NewRdNode parameter.
Parameters
[in]AddressSpaceAddress space where the register exists. Can be one of I/O space, System Memory, etc.
[in]BitWidthNumber of bits in the register.
[in]BitOffsetOffset in bits from the start of the register indicated by the Address.
[in]AddressRegister address.
[in]AccessSizeSize of data values used when accessing the address space. Can be one of: 0 - Undefined, legacy (EFI_ACPI_6_4_UNDEFINED) 1 - Byte access (EFI_ACPI_6_4_BYTE) 2 - Word access (EFI_ACPI_6_4_WORD) 3 - DWord access (EFI_ACPI_6_4_DWORD) 4 - QWord access (EFI_ACPI_6_4_QWORD)
[in]NameOpNodeNameOp object node defining a named object. If provided, append the new resource data node to the list of resource data elements of this node.
[out]NewRdNodeIf provided and success, contain the created node.
Return values
EFI_SUCCESSThe function completed successfully.
EFI_INVALID_PARAMETERInvalid parameter.
EFI_OUT_OF_RESOURCESCould not allocate memory.

Definition at line 1424 of file AmlResourceDataCodeGen.c.