| /** @file | |
| AML Resource Data Code Generation. | |
| Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef AML_RESOURCE_DATA_CODE_GEN_H_ | |
| #define AML_RESOURCE_DATA_CODE_GEN_H_ | |
| /** 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. | |
| @param [in] ResourceConsumer The device consumes the specified interrupt | |
| or produces it for use by a child device. | |
| @param [in] EdgeTriggered The interrupt is edge triggered or | |
| level triggered. | |
| @param [in] ActiveLow The interrupt is active-high or active-low. | |
| @param [in] Shared The interrupt can be shared with other | |
| devices or not (Exclusive). | |
| @param [in] IrqList Interrupt list. Must be non-NULL. | |
| @param [in] IrqCount Interrupt count. Must be non-zero. | |
| @param [in] NameOpNode NameOp object node defining a named object. | |
| If provided, append the new resource data node | |
| to the list of resource data elements of this | |
| node. | |
| @param [out] NewRdNode If provided and success, | |
| contain the created node. | |
| @retval EFI_SUCCESS The function completed successfully. | |
| @retval EFI_INVALID_PARAMETER Invalid parameter. | |
| @retval EFI_OUT_OF_RESOURCES Could not allocate memory. | |
| **/ | |
| 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 "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. | |
| @param [in] AddressSpace Address space where the register exists. | |
| Can be one of I/O space, System Memory, etc. | |
| @param [in] BitWidth Number of bits in the register. | |
| @param [in] BitOffset Offset in bits from the start of the register | |
| indicated by the Address. | |
| @param [in] Address Register address. | |
| @param [in] AccessSize Size 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) | |
| @param [in] NameOpNode NameOp object node defining a named object. | |
| If provided, append the new resource data node | |
| to the list of resource data elements of this | |
| node. | |
| @param [out] NewRdNode If provided and success, | |
| contain the created node. | |
| @retval EFI_SUCCESS The function completed successfully. | |
| @retval EFI_INVALID_PARAMETER Invalid parameter. | |
| @retval EFI_OUT_OF_RESOURCES Could not allocate memory. | |
| **/ | |
| 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 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. | |
| @param [in] CheckSum CheckSum to store in the EndTag. | |
| To ignore/avoid computing the checksum, | |
| give 0. | |
| @param [in] ParentNode If 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. | |
| @param [out] NewRdNode If success, contains the generated node. | |
| @retval EFI_SUCCESS The function completed successfully. | |
| @retval EFI_INVALID_PARAMETER Invalid parameter. | |
| @retval EFI_OUT_OF_RESOURCES Could not allocate memory. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| AmlCodeGenEndTag ( | |
| IN UINT8 CheckSum OPTIONAL, | |
| IN AML_OBJECT_NODE *ParentNode OPTIONAL, | |
| OUT AML_DATA_NODE **NewRdNode OPTIONAL | |
| ); | |
| #endif // AML_RESOURCE_DATA_CODE_GEN_H_ |