[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