[edk2-devel] [PATCH v1 04/13] DynamicTablesPkg: AML code generation for a Package
PierreGondois
pierre.gondois at arm.com
Wed Jun 23 11:40:29 UTC 2021
From: Pierre Gondois <Pierre.Gondois at arm.com>
Add AmlCodeGenPackage() to generate AML code for declaring
a Package() object. This function generates an empty package
node. New elements can then be added to the package's variable
argument list.
Signed-off-by: Pierre Gondois <Pierre.Gondois at arm.com>
---
.../Common/AmlLib/CodeGen/AmlCodeGen.c | 82 ++++++++++++++++++-
1 file changed, 81 insertions(+), 1 deletion(-)
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index 5d310f201319..ea9b73b464a4 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
@@ -1,7 +1,7 @@
/** @file
AML Code Generation.
- Copyright (c) 2020, Arm Limited. All rights reserved.<BR>
+ Copyright (c) 2020 - 2021, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -235,6 +235,86 @@ AmlCodeGenInteger (
return Status;
}
+/** AML code generation for a Package object node.
+
+ The package generated is empty. New elements can be added via its
+ list of variable arguments.
+
+ @param [out] NewObjectNode If success, contains the created
+ Package object node.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+AmlCodeGenPackage (
+ OUT AML_OBJECT_NODE ** NewObjectNode
+ )
+{
+ EFI_STATUS Status;
+ AML_DATA_NODE * DataNode;
+ UINT8 NodeCount;
+
+ if (NewObjectNode == NULL) {
+ ASSERT (0);
+ return EFI_INVALID_PARAMETER;
+ }
+
+ DataNode = NULL;
+ NodeCount = 0;
+
+ // Create an object node.
+ // PkgLen is 2:
+ // - one byte to store the PkgLength
+ // - one byte for the NumElements.
+ // Cf ACPI6.3, s20.2.5 "Term Objects Encoding"
+ // DefPackage := PackageOp PkgLength NumElements PackageElementList
+ // NumElements := ByteData
+ Status = AmlCreateObjectNode (
+ AmlGetByteEncodingByOpCode (AML_PACKAGE_OP, 0),
+ 2,
+ NewObjectNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ return Status;
+ }
+
+ // NumElements is a ByteData.
+ Status = AmlCreateDataNode (
+ EAmlNodeDataTypeUInt,
+ &NodeCount,
+ sizeof (NodeCount),
+ &DataNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ goto error_handler;
+ }
+
+ Status = AmlSetFixedArgument (
+ *NewObjectNode,
+ EAmlParseIndexTerm0,
+ (AML_NODE_HEADER*)DataNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (0);
+ goto error_handler;
+ }
+
+ return Status;
+
+error_handler:
+ AmlDeleteTree ((AML_NODE_HEADER*)*NewObjectNode);
+ if (DataNode != NULL) {
+ AmlDeleteTree ((AML_NODE_HEADER*)DataNode);
+ }
+ return Status;
+}
+
/** AML code generation for a Name object node.
@param [in] NameString The new variable name.
--
2.17.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76945): https://edk2.groups.io/g/devel/message/76945
Mute This Topic: https://groups.io/mt/83735653/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