Hi Pierre,

Thank you for this patch.

Reviewed-by: Sami Mujawar <[email protected]>

Regards,

Sami Mujawar

On 07/10/2021 04:32 PM, [email protected] wrote:
From: Pierre Gondois <[email protected]>

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 <[email protected]>
---
  .../Common/AmlLib/CodeGen/AmlCodeGen.c        | 81 ++++++++++++++++++-
  1 file changed, 80 insertions(+), 1 deletion(-)

diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c 
b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index cbfd9cbb68b6..a4cd2502dc56 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
  **/
@@ -237,6 +237,85 @@ 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;
+  }
+
+  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.

IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#81681): https://edk2.groups.io/g/devel/message/81681
Mute This Topic: https://groups.io/mt/86148204/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to