Skip to content

Commit

Permalink
DynamicTablesPkg: Adds integer to the AML package node
Browse files Browse the repository at this point in the history
Adds an AmlAddIntegerToNamedPackage() API to generate AML code,
which adds an integer value to the package node.

Cc: Pierre Gondois <[email protected]>
Cc: Sami Mujawar <[email protected]>
Signed-off-by: Abdul Lateef Attar <[email protected]>
Reviewed-by: Pierre Gondois <[email protected]>
Reviewed-by: Sami Mujawar <[email protected]>
  • Loading branch information
Abdul Lateef Attar authored and lgao4 committed May 10, 2024
1 parent 25996a3 commit 3c0b844
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 1 deletion.
41 changes: 40 additions & 1 deletion DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
AML Lib.
Copyright (c) 2019 - 2023, Arm Limited. All rights reserved.<BR>
Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
Copyright (C) 2023 - 2024, Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
Expand Down Expand Up @@ -1743,6 +1743,45 @@ AmlAddNameStringToNamedPackage (
IN AML_OBJECT_NODE_HANDLE NamedNode
);

/** Add an integer value to the named package node.
AmlCodeGenNamePackage ("_CID", NULL, &PackageNode);
AmlGetEisaIdFromString ("PNP0A03", &EisaId);
AmlAddIntegerToNamedPackage (EisaId, NameNode);
AmlGetEisaIdFromString ("PNP0A08", &EisaId);
AmlAddIntegerToNamedPackage (EisaId, NameNode);
equivalent of the following ASL code:
Name (_CID, Package (0x02) // _CID: Compatible ID
{
EisaId ("PNP0A03"),
EisaId ("PNP0A08")
})
The package is added at the tail of the list of the input package node
name:
Name ("NamePackageNode", Package () {
[Pre-existing package entries],
[Newly created integer entry]
})
@ingroup CodeGenApis
@param [in] Integer Integer value that need to be added to package node.
@param [in, out] NameNode Package named node to add the object to.
@retval EFI_SUCCESS Success.
@retval EFI_INVALID_PARAMETER Invalid parameter.
@retval Others Error occurred during the operation.
**/
EFI_STATUS
EFIAPI
AmlAddIntegerToNamedPackage (
IN UINT32 Integer,
IN OUT AML_OBJECT_NODE_HANDLE NameNode
);

/** AML code generation to invoke/call another method.
This method is a subset implementation of MethodInvocation
Expand Down
67 changes: 67 additions & 0 deletions DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
Original file line number Diff line number Diff line change
Expand Up @@ -3871,6 +3871,73 @@ AmlAddNameStringToNamedPackage (
return Status;
}

/** Add an integer value to the named package node.
AmlCodeGenNamePackage ("_CID", NULL, &PackageNode);
AmlGetEisaIdFromString ("PNP0A03", &EisaId);
AmlAddIntegerToNamedPackage (EisaId, NameNode);
AmlGetEisaIdFromString ("PNP0A08", &EisaId);
AmlAddIntegerToNamedPackage (EisaId, NameNode);
equivalent of the following ASL code:
Name (_CID, Package (0x02) // _CID: Compatible ID
{
EisaId ("PNP0A03"),
EisaId ("PNP0A08")
})
The package is added at the tail of the list of the input package node
name:
Name ("NamePackageNode", Package () {
[Pre-existing package entries],
[Newly created integer entry]
})
@ingroup CodeGenApis
@param [in] Integer Integer value that need to be added to package node.
@param [in, out] NameNode Package named node to add the object to.
@retval EFI_SUCCESS Success.
@retval EFI_INVALID_PARAMETER Invalid parameter.
@retval Others Error occurred during the operation.
**/
EFI_STATUS
EFIAPI
AmlAddIntegerToNamedPackage (
IN UINT32 Integer,
IN OUT AML_OBJECT_NODE_HANDLE NameNode
)
{
EFI_STATUS Status;
AML_OBJECT_NODE *PackageNode;

if (NameNode == NULL) {
ASSERT_EFI_ERROR (FALSE);
return EFI_INVALID_PARAMETER;
}

PackageNode = (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument (
NameNode,
EAmlParseIndexTerm1
);
if ((PackageNode == NULL) ||
(AmlGetNodeType ((AML_NODE_HANDLE)PackageNode) != EAmlNodeObject) ||
(!AmlNodeHasOpCode (PackageNode, AML_PACKAGE_OP, 0)))
{
ASSERT_EFI_ERROR (FALSE);
return EFI_INVALID_PARAMETER;
}

Status = AmlAddRegisterOrIntegerToPackage (NULL, Integer, PackageNode);
if (EFI_ERROR (Status)) {
ASSERT_EFI_ERROR (Status);
}

return Status;
}

/** AML code generation to invoke/call another method.
This method is a subset implementation of MethodInvocation
Expand Down

0 comments on commit 3c0b844

Please sign in to comment.