[edk2-devel] [PATCH v1 09/13] DynamicTablesPkg: AML code generation for a Method returning a NS

Sami Mujawar sami.mujawar at arm.com
Fri Oct 1 15:23:54 UTC 2021


Hi Pierre,

Please find my response inline marked [SAMI].

Regards,

Sami Mujawar


On 23/06/2021 12:40 PM, Pierre.Gondois at arm.com wrote:
> From: Pierre Gondois <Pierre.Gondois at arm.com>
>
> Add AmlCodeGenMethodRetNameString() to generate AML code to create
> a Method returning a NameString (NS).
>
> AmlCodeGenMethodRetNameString (
>    "MET0", "_CRS", 1, TRUE, 3, ParentNode, NewObjectNode
>    );
> is equivalent of the following ASL code:
> Method(MET0, 1, Serialized, 3) {
>    Return (_CRS)
> }
>
> Signed-off-by: Pierre Gondois <Pierre.Gondois at arm.com>
> ---
>   .../Include/Library/AmlLib/AmlLib.h           |  53 +++++++++
>   .../Common/AmlLib/CodeGen/AmlCodeGen.c        | 106 ++++++++++++++++++
>   2 files changed, 159 insertions(+)
>
> diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> index 6824cf3a6c82..7740aac24470 100644
> --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> @@ -619,6 +619,59 @@ AmlCodeGenScope (
>     OUT       AML_OBJECT_NODE_HANDLE  * NewObjectNode   OPTIONAL
>     );
>   
> +/** AML code generation for a method returning a NameString.
> +
> +  AmlCodeGenMethodRetNameString (
> +    "MET0", "_CRS", 1, TRUE, 3, ParentNode, NewObjectNode
> +    );
> +  is equivalent of the following ASL code:
> +    Method(MET0, 1, Serialized, 3) {
> +      Return (_CRS)
> +    }
> +
> +  The ASL parameters "ReturnType" and "ParameterTypes" are not asked
> +  in this function. They are optional parameters in ASL.
> +
> +  @ingroup CodeGenApis
> +
> +  @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]  ReturnedNameString   The name of the object returned by the
> +                                    method. Optional parameter, can be:
> +                                     - NULL (ignored).
> +                                     - A NULL-terminated ASL NameString.
> +                                       e.g.: "MET0", "_SB.MET0", etc.
> +                                       The input string is copied.
[SAMI] I think this should be a mandatory parameter and corresponding 
change is needed to the function code.
> +  @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
> +AmlCodeGenMethodRetNameString (
> +  IN  CONST CHAR8                   * MethodNameString,
> +  IN  CONST CHAR8                   * ReturnedNameString,  OPTIONAL
> +  IN        UINT8                     NumArgs,
> +  IN        BOOLEAN                   IsSerialized,
> +  IN        UINT8                     SyncLevel,
> +  IN        AML_NODE_HANDLE           ParentNode,          OPTIONAL
> +  OUT       AML_OBJECT_NODE_HANDLE  * NewObjectNode        OPTIONAL
> +  );
> +
>   // DEPRECATED APIS
>   #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
>   
> diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> index 75dadbaf4ac3..a9922871c311 100644
> --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> @@ -1315,3 +1315,109 @@ exit_handler:
>     }
>     return Status;
>   }
> +
> +/** AML code generation for a method returning a NameString.
> +
> +  AmlCodeGenMethodRetNameString (
> +    "MET0", "_CRS", 1, TRUE, 3, ParentNode, NewObjectNode
> +    );
> +  is equivalent of the following ASL code:
> +    Method(MET0, 1, Serialized, 3) {
> +      Return (_CRS)
> +    }
> +
> +  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]  ReturnedNameString   The name of the object returned by the
> +                                    method. Optional parameter, can be:
> +                                     - NULL (ignored).
> +                                     - A NULL-terminated ASL NameString.
> +                                       e.g.: "MET0", "_SB.MET0", etc.
> +                                       The input string is copied.
> +  @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
> +AmlCodeGenMethodRetNameString (
> +  IN  CONST CHAR8                   * MethodNameString,
> +  IN  CONST CHAR8                   * ReturnedNameString,  OPTIONAL
> +  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;
> +  }
> +
> +  // Return ReturnedNameString if provided.
> +  if (ReturnedNameString != NULL) {
> +    Status = AmlCodeGenReturnNameString (
> +               ReturnedNameString,
> +               (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;
> +}



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#81368): https://edk2.groups.io/g/devel/message/81368
Mute This Topic: https://groups.io/mt/83735660/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