[edk2-devel] [PATCH v1 02/13] DynamicTablesPkg: AML Code generation for Register()
PierreGondois
pierre.gondois at arm.com
Wed Jun 23 11:40:27 UTC 2021
From: Pierre Gondois <Pierre.Gondois at arm.com>
Add AmlCodeGenRegister() to generate AML code for the
Generic Register Resource Descriptor. This function is
equivalent to the ASL macro Register().
Signed-off-by: Pierre Gondois <Pierre.Gondois at arm.com>
---
.../AmlLib/CodeGen/AmlResourceDataCodeGen.c | 87 +++++++++++++++++++
.../AmlLib/CodeGen/AmlResourceDataCodeGen.h | 49 +++++++++++
2 files changed, 136 insertions(+)
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
index 089597a6c906..07a96725a4ef 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
@@ -187,6 +187,93 @@ AmlCodeGenRdInterrupt (
return LinkRdNode (RdNode, NameOpNode, NewRdNode);
}
+/** 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_3_UNDEFINED)
+ 1 - Byte access (EFI_ACPI_6_3_BYTE)
+ 2 - Word access (EFI_ACPI_6_3_WORD)
+ 3 - DWord access (EFI_ACPI_6_3_DWORD)
+ 4 - QWord access (EFI_ACPI_6_3_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
+ )
+{
+ EFI_STATUS Status;
+ AML_DATA_NODE * RdNode;
+ EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR RdRegister;
+
+ if ((AccessSize > EFI_ACPI_6_3_QWORD) ||
+ ((NameOpNode == NULL) && (NewRdNode == NULL))) {
+ ASSERT (0);
+ return EFI_INVALID_PARAMETER;
+ }
+
+ // Header
+ RdRegister.Header.Header.Bits.Name =
+ ACPI_LARGE_GENERIC_REGISTER_DESCRIPTOR_NAME;
+ RdRegister.Header.Header.Bits.Type = ACPI_LARGE_ITEM_FLAG;
+ RdRegister.Header.Length = sizeof (EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR) -
+ sizeof (ACPI_LARGE_RESOURCE_HEADER);
+
+ // Body
+ RdRegister.AddressSpaceId = AddressSpace;
+ RdRegister.RegisterBitWidth = BitWidth;
+ RdRegister.RegisterBitOffset = BitOffset;
+ RdRegister.AddressSize = AccessSize;
+ RdRegister.RegisterAddress = Address;
+
+ Status = AmlCreateDataNode (
+ EAmlNodeDataTypeResourceData,
+ (UINT8*)&RdRegister,
+ sizeof (EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR),
+ &RdNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ return Status;
+ }
+
+ return LinkRdNode (RdNode, NameOpNode, NewRdNode);
+}
+
// DEPRECATED APIS
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.h b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.h
index 764051e3d7c9..3c9217d9ddab 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.h
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.h
@@ -55,4 +55,53 @@ AmlCodeGenRdInterrupt (
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_3_UNDEFINED)
+ 1 - Byte access (EFI_ACPI_6_3_BYTE)
+ 2 - Word access (EFI_ACPI_6_3_WORD)
+ 3 - DWord access (EFI_ACPI_6_3_DWORD)
+ 4 - QWord access (EFI_ACPI_6_3_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
+ );
+
#endif // AML_RESOURCE_DATA_CODE_GEN_H_
--
2.17.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76943): https://edk2.groups.io/g/devel/message/76943
Mute This Topic: https://groups.io/mt/83735650/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list