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]] -=-=-=-=-=-=-=-=-=-=-=-
