]> git.proxmox.com Git - mirror_edk2.git/commitdiff
DynamicTablesPkg: AML code generation for a Method returning a NS
authorPierre Gondois <Pierre.Gondois@arm.com>
Fri, 8 Oct 2021 14:46:28 +0000 (15:46 +0100)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 8 Oct 2021 15:39:42 +0000 (15:39 +0000)
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)
}

Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c

index 6824cf3a6c82a382c1141506abb2dea2af1997ac..7740aac24470d973ad47a20d09b2b72948e23dcf 100644 (file)
@@ -619,6 +619,59 @@ AmlCodeGenScope (
   OUT       AML_OBJECT_NODE_HANDLE  * NewObjectNode   OPTIONAL\r
   );\r
 \r
+/** AML code generation for a method returning a NameString.\r
+\r
+  AmlCodeGenMethodRetNameString (\r
+    "MET0", "_CRS", 1, TRUE, 3, ParentNode, NewObjectNode\r
+    );\r
+  is equivalent of the following ASL code:\r
+    Method(MET0, 1, Serialized, 3) {\r
+      Return (_CRS)\r
+    }\r
+\r
+  The ASL parameters "ReturnType" and "ParameterTypes" are not asked\r
+  in this function. They are optional parameters in ASL.\r
+\r
+  @ingroup CodeGenApis\r
+\r
+  @param [in]  MethodNameString     The new Method's name.\r
+                                    Must be a NULL-terminated ASL NameString\r
+                                    e.g.: "MET0", "_SB.MET0", etc.\r
+                                    The input string is copied.\r
+  @param [in]  ReturnedNameString   The name of the object returned by the\r
+                                    method. Optional parameter, can be:\r
+                                     - NULL (ignored).\r
+                                     - A NULL-terminated ASL NameString.\r
+                                       e.g.: "MET0", "_SB.MET0", etc.\r
+                                       The input string is copied.\r
+  @param [in]  NumArgs              Number of arguments.\r
+                                    Must be 0 <= NumArgs <= 6.\r
+  @param [in]  IsSerialized         TRUE is equivalent to Serialized.\r
+                                    FALSE is equivalent to NotSerialized.\r
+                                    Default is NotSerialized in ASL spec.\r
+  @param [in]  SyncLevel            Synchronization level for the method.\r
+                                    Must be 0 <= SyncLevel <= 15.\r
+                                    Default is 0 in ASL.\r
+  @param [in]  ParentNode           If provided, set ParentNode as the parent\r
+                                    of the node created.\r
+  @param [out] NewObjectNode        If success, contains the created node.\r
+\r
+  @retval EFI_SUCCESS             Success.\r
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.\r
+  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AmlCodeGenMethodRetNameString (\r
+  IN  CONST CHAR8                   * MethodNameString,\r
+  IN  CONST CHAR8                   * ReturnedNameString,  OPTIONAL\r
+  IN        UINT8                     NumArgs,\r
+  IN        BOOLEAN                   IsSerialized,\r
+  IN        UINT8                     SyncLevel,\r
+  IN        AML_NODE_HANDLE           ParentNode,          OPTIONAL\r
+  OUT       AML_OBJECT_NODE_HANDLE  * NewObjectNode        OPTIONAL\r
+  );\r
+\r
 // DEPRECATED APIS\r
 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
 \r
index 93d4ba79e93735678c467ce880e16a30e75f74cb..f59a9599930fec30514903f8d791192993a2ba94 100644 (file)
@@ -1335,3 +1335,109 @@ exit_handler:
   }\r
   return Status;\r
 }\r
+\r
+/** AML code generation for a method returning a NameString.\r
+\r
+  AmlCodeGenMethodRetNameString (\r
+    "MET0", "_CRS", 1, TRUE, 3, ParentNode, NewObjectNode\r
+    );\r
+  is equivalent of the following ASL code:\r
+    Method(MET0, 1, Serialized, 3) {\r
+      Return (_CRS)\r
+    }\r
+\r
+  The ASL parameters "ReturnType" and "ParameterTypes" are not asked\r
+  in this function. They are optional parameters in ASL.\r
+\r
+  @param [in]  MethodNameString     The new Method's name.\r
+                                    Must be a NULL-terminated ASL NameString\r
+                                    e.g.: "MET0", "_SB.MET0", etc.\r
+                                    The input string is copied.\r
+  @param [in]  ReturnedNameString   The name of the object returned by the\r
+                                    method. Optional parameter, can be:\r
+                                     - NULL (ignored).\r
+                                     - A NULL-terminated ASL NameString.\r
+                                       e.g.: "MET0", "_SB.MET0", etc.\r
+                                       The input string is copied.\r
+  @param [in]  NumArgs              Number of arguments.\r
+                                    Must be 0 <= NumArgs <= 6.\r
+  @param [in]  IsSerialized         TRUE is equivalent to Serialized.\r
+                                    FALSE is equivalent to NotSerialized.\r
+                                    Default is NotSerialized in ASL spec.\r
+  @param [in]  SyncLevel            Synchronization level for the method.\r
+                                    Must be 0 <= SyncLevel <= 15.\r
+                                    Default is 0 in ASL.\r
+  @param [in]  ParentNode           If provided, set ParentNode as the parent\r
+                                    of the node created.\r
+  @param [out] NewObjectNode        If success, contains the created node.\r
+\r
+  @retval EFI_SUCCESS             Success.\r
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.\r
+  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AmlCodeGenMethodRetNameString (\r
+  IN  CONST CHAR8                   * MethodNameString,\r
+  IN  CONST CHAR8                   * ReturnedNameString,  OPTIONAL\r
+  IN        UINT8                     NumArgs,\r
+  IN        BOOLEAN                   IsSerialized,\r
+  IN        UINT8                     SyncLevel,\r
+  IN        AML_NODE_HANDLE           ParentNode,          OPTIONAL\r
+  OUT       AML_OBJECT_NODE_HANDLE  * NewObjectNode        OPTIONAL\r
+  )\r
+{\r
+  EFI_STATUS                Status;\r
+  AML_OBJECT_NODE_HANDLE    MethodNode;\r
+\r
+  if ((MethodNameString == NULL)  ||\r
+      ((ParentNode == NULL) && (NewObjectNode == NULL))) {\r
+    ASSERT (0);\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  // Create a Method named MethodNameString.\r
+  Status = AmlCodeGenMethod (\r
+             MethodNameString,\r
+             NumArgs,\r
+             IsSerialized,\r
+             SyncLevel,\r
+             NULL,\r
+             &MethodNode\r
+             );\r
+  if (EFI_ERROR (Status)) {\r
+    ASSERT (0);\r
+    return Status;\r
+  }\r
+\r
+  // Return ReturnedNameString if provided.\r
+  if (ReturnedNameString != NULL) {\r
+    Status = AmlCodeGenReturnNameString (\r
+               ReturnedNameString,\r
+               (AML_NODE_HANDLE)MethodNode,\r
+               NULL\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      ASSERT (0);\r
+      goto error_handler;\r
+    }\r
+  }\r
+\r
+  Status = LinkNode (\r
+             MethodNode,\r
+             ParentNode,\r
+             NewObjectNode\r
+             );\r
+  if (EFI_ERROR (Status)) {\r
+    ASSERT (0);\r
+    goto error_handler;\r
+  }\r
+\r
+  return Status;\r
+\r
+error_handler:\r
+  if (MethodNode != NULL) {\r
+    AmlDeleteTree ((AML_NODE_HANDLE)MethodNode);\r
+  }\r
+  return Status;\r
+}\r