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
}\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