From: "Sami Mujawar" <sami.mujawar@arm.com>
To: Rebecca Cran <quic_rcran@quicinc.com>,
devel@edk2.groups.io, PierreGondois <pierre.gondois@arm.com>,
Alexei Fedorov <Alexei.Fedorov@arm.com>,
Leif Lindholm <quic_llindhol@quicinc.com>, nd <nd@arm.com>
Subject: Re: [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function
Date: Wed, 2 Feb 2022 14:53:14 +0000 [thread overview]
Message-ID: <3a153d35-2509-ad08-3651-f96b411c053e@arm.com> (raw)
In-Reply-To: <20220113164052.20841-4-quic_rcran@quicinc.com>
Hi Rebecca,
Thank you for this patch.
Please find my response inline marked [SAMI].
Regards,
Sami Mujawar
On 13/01/2022 04:40 PM, Rebecca Cran wrote:
> Add AmlCodeGenMethodRetInteger function to generate AML code for
> a Method returning an Integer.
>
> Signed-off-by: Rebecca Cran <quic_rcran@quicinc.com>
> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
> ---
> DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 47 ++++++
> DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 156 ++++++++++++++++++++
> 2 files changed, 203 insertions(+)
>
> diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> index 80d05f74ee69..6f214c0dfad2 100644
> --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> @@ -1118,6 +1118,53 @@ AmlCodeGenMethodRetNameString (
> OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
> );
>
> +/** AML code generation for a method returning an Integer.
> +
> + AmlCodeGenMethodRetInteger (
> + "_CBA", 0, 1, TRUE, 3, ParentNode, NewObjectNode
> + );
> + is equivalent of the following ASL code:
> + Method(_CBA, 1, Serialized, 3) {
> + Return (0)
> + }
> +
> + The ASL parameters "ReturnType" and "ParameterTypes" are not asked
> + in this function. They are optional parameters in ASL.
> +
> + @param [in] MethodNameString The new Method's name.
> + Must be a NULL-terminated ASL NameString
> + e.g.: "MET0", "_SB.MET0", etc.
> + The input string is copied.
> + @param [in] ReturnedInteger The value of the integer returned by the
> + method.
> + @param [in] NumArgs Number of arguments.
> + Must be 0 <= NumArgs <= 6.
> + @param [in] IsSerialized TRUE is equivalent to Serialized.
> + FALSE is equivalent to NotSerialized.
> + Default is NotSerialized in ASL spec.
> + @param [in] SyncLevel Synchronization level for the method.
> + Must be 0 <= SyncLevel <= 15.
> + Default is 0 in ASL.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + @param [out] NewObjectNode If success, contains the created node.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
> +**/
> +EFI_STATUS
> +EFIAPI
> +AmlCodeGenMethodRetInteger (
> + IN CONST CHAR8 *MethodNameString,
> + IN UINT64 ReturnedInteger,
> + IN UINT8 NumArgs,
> + IN BOOLEAN IsSerialized,
> + IN UINT8 SyncLevel,
> + IN AML_NODE_HANDLE ParentNode OPTIONAL,
> + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
> + );
> +
> /** Create a _LPI name.
>
> AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
> diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> index 838a892c6b58..07822ead5b70 100644
> --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> @@ -1685,6 +1685,61 @@ exit_handler:
> return Status;
> }
>
> +/** AML code generation for a Return object node,
> + returning an Integer.
> +
> + AmlCodeGenReturn (0), ParentNode, NewObjectNode) is
> + equivalent of the following ASL code:
> + Return (0)
> +
> + The ACPI 6.3 specification, 20.2.8 "Statement Opcodes Encoding" states:
> + DefReturn := ReturnOp ArgObject
> + ReturnOp := 0xA4
> + ArgObject := TermArg => DataRefObject
> +
> + Thus, the ReturnNode must be evaluated as a DataRefObject.
> +
> + The ReturnNode must be generated inside a Method body scope.
> +
> + @param [in] Integer The integer is returned by the Return
> + ASL statement.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + Must be a MethodOp node.
> + @param [out] NewObjectNode If success, contains the created node.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
> +**/
> +STATIC
> +EFI_STATUS
> +EFIAPI
> +AmlCodeGenReturnInteger (
> + IN UINT64 Integer,
> + IN AML_NODE_HEADER *ParentNode OPTIONAL,
> + OUT AML_OBJECT_NODE **NewObjectNode OPTIONAL
> + )
> +{
> + EFI_STATUS Status;
> + AML_OBJECT_NODE *IntNode;
> +
> + IntNode = NULL;
> +
> + Status = AmlCodeGenInteger (Integer, &IntNode);
> + ASSERT_EFI_ERROR (Status);
[SAMI] In release builds, ASSERT_EFI_ERROR() would vanish and we could
end up accessing an invalid pointer.
If you agree, I will change this to check the status and return the
error code, before merging.
[/SAMI]
> +
> + // AmlCodeGenReturn() deletes DataNode if error.
> + Status = AmlCodeGenReturn (
> + (AML_NODE_HEADER *)IntNode,
> + ParentNode,
> + NewObjectNode
> + );
> + ASSERT_EFI_ERROR (Status);
> +
> + return Status;
> +}
> +
> /** AML code generation for a method returning a NameString.
>
> AmlCodeGenMethodRetNameString (
> @@ -1793,6 +1848,107 @@ error_handler:
> return Status;
> }
>
> +/** AML code generation for a method returning an Integer.
> +
> + AmlCodeGenMethodRetInteger (
> + "_CBA", 0, 1, TRUE, 3, ParentNode, NewObjectNode
> + );
> + is equivalent of the following ASL code:
> + Method(_CBA, 1, Serialized, 3) {
> + Return (0)
> + }
> +
> + The ASL parameters "ReturnType" and "ParameterTypes" are not asked
> + in this function. They are optional parameters in ASL.
> +
> + @param [in] MethodNameString The new Method's name.
> + Must be a NULL-terminated ASL NameString
> + e.g.: "MET0", "_SB.MET0", etc.
> + The input string is copied.
> + @param [in] ReturnedInteger The value of the integer returned by the
> + method.
> + @param [in] NumArgs Number of arguments.
> + Must be 0 <= NumArgs <= 6.
> + @param [in] IsSerialized TRUE is equivalent to Serialized.
> + FALSE is equivalent to NotSerialized.
> + Default is NotSerialized in ASL spec.
> + @param [in] SyncLevel Synchronization level for the method.
> + Must be 0 <= SyncLevel <= 15.
> + Default is 0 in ASL.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + @param [out] NewObjectNode If success, contains the created node.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
> +**/
> +EFI_STATUS
> +EFIAPI
> +AmlCodeGenMethodRetInteger (
> + IN CONST CHAR8 *MethodNameString,
> + IN UINT64 ReturnedInteger,
> + IN UINT8 NumArgs,
> + IN BOOLEAN IsSerialized,
> + IN UINT8 SyncLevel,
> + IN AML_NODE_HANDLE ParentNode OPTIONAL,
> + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
> + )
> +{
> + EFI_STATUS Status;
> + AML_OBJECT_NODE_HANDLE MethodNode;
> +
> + if ((MethodNameString == NULL) ||
> + ((ParentNode == NULL) && (NewObjectNode == NULL)))
> + {
> + ASSERT (0);
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + // Create a Method named MethodNameString.
> + Status = AmlCodeGenMethod (
> + MethodNameString,
> + NumArgs,
> + IsSerialized,
> + SyncLevel,
> + NULL,
> + &MethodNode
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + return Status;
> + }
> +
> + Status = AmlCodeGenReturnInteger (
> + ReturnedInteger,
> + (AML_NODE_HANDLE)MethodNode,
> + NULL
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + Status = LinkNode (
> + MethodNode,
> + ParentNode,
> + NewObjectNode
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + return Status;
> +
> +error_handler:
> + if (MethodNode != NULL) {
> + AmlDeleteTree ((AML_NODE_HANDLE)MethodNode);
> + }
> +
> + return Status;
> +}
> +
> /** Create a _LPI name.
>
> AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
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.
next prev parent reply other threads:[~2022-02-02 14:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-13 16:40 [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 1/3] DynamicTablesPkg: Add Memory32Fixed function Rebecca Cran
2022-02-02 14:52 ` Sami Mujawar
2022-02-02 15:03 ` [edk2-devel] " Rebecca Cran
2022-01-13 16:40 ` [PATCH v3 2/3] DynamicTablesPkg: Remove redundant cast in AmlCodeGenReturn Rebecca Cran
2022-02-02 14:53 ` Sami Mujawar
2022-01-13 16:40 ` [PATCH v3 3/3] DynamicTablesPkg: Add AmlCodeGenMethodRetInteger function Rebecca Cran
2022-02-02 14:53 ` Sami Mujawar [this message]
2022-02-02 15:03 ` [edk2-devel] " Rebecca Cran
2022-02-02 19:41 ` [PATCH v3 0/3] Add Memory32Fixed and AmlCodeGenMethodRetInteger functions Sami Mujawar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3a153d35-2509-ad08-3651-f96b411c053e@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox