From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.107.92.86]) by mx.groups.io with SMTP id smtpd.web10.101.1688079737700544630 for ; Thu, 29 Jun 2023 16:02:17 -0700 Authentication-Results: mx.groups.io; dkim=fail, err=malformed MIME header line: Subject: [PATCH 2/4] DynamicTablesPkg: Add support for simple method invocation.; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.92.86, mailfrom: jbrasen@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MBNcStrmhyGKzprW+l1oqJbeeYuGERyh7+N8A43mhUAFT8n52hsXfsSvstrh8n+qfC4c/8yQa0ID4UZIEEq/1jykbNyoXnTuiOQqX93j1n+vTr/3KY/VYCVj/Pn14qXi0WX9Db54bU+iFb02+Zf/dhB2RGr6atF7Rnzo5Wfr5MxTemOsqv6UtgTzMhRRHbrNXpyMSIURSaHzHmbvz2tkf3i2gCD2JdDWp3tFl0TmRboXH9X03pTZb4eKVIs46F25Sfd58Q/k8L9vPUf7nFBgCArujhwfA6u1oRR9pMB4siO/YTwBXNKqCSJkREzDgKF+ixdu6Q0aqDKIBAa5KD3u+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KSiLGe2A7cy9Zm6p7KvdjuQ5nsMMKx1OoajxZ37+GMo=; b=HJumX8Fxo2Ji1v6WVTW4eX/v/Z0kExOHpyyvZ/20GDhgydXhgqlUuCr4fRpnvi01rHjzz6xUpJTf82KnVrZuuZrk4CaaWEkDXT0lVGlvv5t25kAC5Duz4Ed41O67Iq3vhdmBlf72UEA6yQuFsclJsRRnEnuNQWUaS6eG/dmxwoePwmm82dSgf57HXBcoRkWvPjNtvoX8DQJ8MQ4VQe1zgCRm3r1BI+4eSO8EcSWYSADIkty7Ci02rmcQ0ykHSg+dppM+S1YRkptab+AzW8fvu/VeMk/ACXZMdqacAd+M/VXFuNaeSQbAtY6eMqEVgbuTnE0HDrqd61kOM5ZohBP9Tg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KSiLGe2A7cy9Zm6p7KvdjuQ5nsMMKx1OoajxZ37+GMo=; b=t9T+L1zhsazQ1F+nn65wxuGznBPFz77Jk13hjMe1y0pF7IsxLh3q5D84WEqXUi+qXamctL3Tfu3oNkiX9x1P7lGrxYCt1g+o0rI7rDlC8FRT0lDE6p1S0tvxJo4dX/ScJbfCXxzUb59Y5gnJIBCfZf+l0eNfH+35V3h4O9CjXl9wBpsyhXe+aLeg8t4UMK1K/UXoA/6eTmtPPfYV8BWlaI1/ZHGTwu6BRQyppx+JLdnYs2A2Lwoaba0Ba0O3GXVt3PVy/HECi5Ohprb9mYPpYMtLhpQL5SAV1m7K3bBWBZi1m997Yl98wI4qZ+U1AyjU+fDs/WTwtBnEe1HJZsriZQ== Received: from BN8PR15CA0010.namprd15.prod.outlook.com (2603:10b6:408:c0::23) by IA1PR12MB6260.namprd12.prod.outlook.com (2603:10b6:208:3e4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.26; Thu, 29 Jun 2023 23:02:13 +0000 Received: from BN8NAM11FT065.eop-nam11.prod.protection.outlook.com (2603:10b6:408:c0:cafe::f7) by BN8PR15CA0010.outlook.office365.com (2603:10b6:408:c0::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6544.22 via Frontend Transport; Thu, 29 Jun 2023 23:02:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BN8NAM11FT065.mail.protection.outlook.com (10.13.177.63) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.49 via Frontend Transport; Thu, 29 Jun 2023 23:02:13 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Thu, 29 Jun 2023 16:01:58 -0700 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Thu, 29 Jun 2023 16:01:58 -0700 Received: from 6cd8174ac25c.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server id 15.2.986.37 via Frontend Transport; Thu, 29 Jun 2023 16:01:58 -0700 From: "Jeff Brasen" To: CC: , , , Jeff Brasen , "Swatisri Kantamsetti" , Ashish Singhal Subject: [PATCH 2/4] DynamicTablesPkg: Add support for simple method invocation. Date: Thu, 29 Jun 2023 23:01:47 +0000 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-NVConfidentiality: public Return-Path: jbrasen@nvidia.com X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT065:EE_|IA1PR12MB6260:EE_ X-MS-Office365-Filtering-Correlation-Id: b47988a8-00b8-41fb-b229-08db78f4e068 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IyzwaX0ftAA5hHf49BUaLwadrZtocSdnfaMMM0lGqL/WZ38Oaa6VoMC6Mz6UvUzIwycykuc4tJlQrKbPjwEPCwxn1vLeGgG/watINUQQ4ATMZc5qWbV6dADRUwd8mZ1S8qX9tTGjJViJqwiDjkB7Hb+M0QNddPN00hsJ3T5JDXoSC/FoqcU3po4NDcDgeefCLx4D0kLzdGDV3obd+72VU8IiNecsyH63vHopRqm2IXC5FB4B5iGWMejhdRYupx0nqJ58oZtSHOjVac8RpFzrOFYL8hxMEr6L7QC9UESjiCTvyYQqYhofGBLrbum3I75CIgKRSM0fHjtB7UshJ/7V89QDzR+tbWf97egZceK0H/sNXb0sPhXw16ZGjByVdITgSZiAHQDCnnxT8MD/197YMRKBuq4xDu3D0LEOTr50N8a746LR0cBwxDP+C+UJSLtqDeGaxTxoZL/5i19llVsVFS/pCv2eA1fdf3+WItVV7Blw/g32FDq9PSiD1l3Moc1lBxNp1hLmqynqbsV6P0lmQtLyTX4qFWpwbmRUsDK6F+qRcRqUSw+vN1n8F4YGlcZVNOoK+kCSAvTDO77VjpxR5hL+k8t/LNcdInwBaCflfT3mAjZbc9sPq3ymYt4yx1FxH1P2T+VLulw1DGbRsakWr/uR2in8L7qAXOY/gS53j7LpiUwFvhQTodX+m3EIyumY7+/d7aUD3+lQx/sqwYfP31trDHIsUYSSVphFZeT3VkeEnrhll2eBoyLL9iBEjDkM X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230028)(4636009)(136003)(396003)(346002)(39860400002)(376002)(451199021)(36840700001)(40470700004)(46966006)(36860700001)(82310400005)(40460700003)(70206006)(107886003)(6666004)(336012)(7696005)(54906003)(426003)(83380400001)(2906002)(26005)(2616005)(478600001)(186003)(5660300002)(356005)(36756003)(4326008)(70586007)(316002)(40480700001)(82740400003)(7636003)(8936002)(47076005)(86362001)(41300700001)(8676002)(6916009);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jun 2023 23:02:13.3180 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b47988a8-00b8-41fb-b229-08db78f4e068 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT065.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6260 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Add support to add Return objects via AML that pass a single integer=0D argument to the named method.=0D =0D Signed-off-by: Jeff Brasen =0D Reviewed-by: Swatisri Kantamsetti =0D Reviewed-by: Ashish Singhal =0D ---=0D .../Include/Library/AmlLib/AmlLib.h | 54 +++++=0D .../Common/AmlLib/CodeGen/AmlCodeGen.c | 224 ++++++++++++++++++=0D 2 files changed, 278 insertions(+)=0D =0D diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTabl= esPkg/Include/Library/AmlLib/AmlLib.h=0D index d201ae9499..b82c7a3ce8 100644=0D --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h=0D +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h=0D @@ -1194,6 +1194,60 @@ AmlCodeGenMethodRetInteger (=0D OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL=0D );=0D =0D +/** AML code generation for a method returning a NameString that takes an= =0D + integer argument.=0D +=0D + AmlCodeGenMethodRetNameStringIntegerArgument (=0D + "MET0", "MET1", 1, TRUE, 3, 5, ParentNode, NewObjectNode=0D + );=0D + is equivalent of the following ASL code:=0D + Method(MET0, 1, Serialized, 3) {=0D + Return (MET1 (5))=0D + }=0D +=0D + The ASL parameters "ReturnType" and "ParameterTypes" are not asked=0D + in this function. They are optional parameters in ASL.=0D +=0D + @param [in] MethodNameString The new Method's name.=0D + Must be a NULL-terminated ASL NameStri= ng=0D + e.g.: "MET0", "_SB.MET0", etc.=0D + The input string is copied.=0D + @param [in] ReturnedNameString The name of the object returned by the= =0D + method. Optional parameter, can be:=0D + - NULL (ignored).=0D + - A NULL-terminated ASL NameString.=0D + e.g.: "MET0", "_SB.MET0", etc.=0D + The input string is copied.=0D + @param [in] NumArgs Number of arguments.=0D + Must be 0 <=3D NumArgs <=3D 6.=0D + @param [in] IsSerialized TRUE is equivalent to Serialized.=0D + FALSE is equivalent to NotSerialized.= =0D + Default is NotSerialized in ASL spec.= =0D + @param [in] SyncLevel Synchronization level for the method.= =0D + Must be 0 <=3D SyncLevel <=3D 15.=0D + Default is 0 in ASL.=0D + @param [in] IntegerArgument Argument to pass to the NameString.=0D + @param [in] ParentNode If provided, set ParentNode as the par= ent=0D + of the node created.=0D + @param [out] NewObjectNode If success, contains the created node.= =0D +=0D + @retval EFI_SUCCESS Success.=0D + @retval EFI_INVALID_PARAMETER Invalid parameter.=0D + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +AmlCodeGenMethodRetNameStringIntegerArgument (=0D + IN CONST CHAR8 *MethodNameString,=0D + IN CONST CHAR8 *ReturnedNameString OPTIONAL,=0D + IN UINT8 NumArgs,=0D + IN BOOLEAN IsSerialized,=0D + IN UINT8 SyncLevel,=0D + IN UINT64 IntegerArgument,=0D + IN AML_NODE_HANDLE ParentNode OPTIONAL,=0D + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL=0D + );=0D +=0D /** Create a _LPI name.=0D =0D AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is=0D diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/= DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c=0D index 88537b7e2d..2b95839e4c 100644=0D --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c=0D +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c=0D @@ -1881,6 +1881,118 @@ AmlCodeGenReturnInteger (=0D return Status;=0D }=0D =0D +/** AML code generation for a Return object node,=0D + returning the object as an input NameString with a integer argument.=0D +=0D + AmlCodeGenReturn ("NAM1", 6, ParentNode, NewObjectNode) is=0D + equivalent of the following ASL code:=0D + Return(NAM1 (6))=0D +=0D + The ACPI 6.3 specification, s20.2.5.3 "Type 1 Opcodes Encoding" states:= =0D + DefReturn :=3D ReturnOp ArgObject=0D + ReturnOp :=3D 0xA4=0D + ArgObject :=3D TermArg =3D> DataRefObject=0D +=0D + Thus, the ReturnNode must be evaluated as a DataRefObject. It can=0D + be a NameString referencing an object. As this CodeGen Api doesn't=0D + do semantic checking, it is strongly advised to check the AML bytecode=0D + generated by this function against an ASL compiler.=0D +=0D + The ReturnNode must be generated inside a Method body scope.=0D +=0D + @param [in] NameString The object referenced by this NameString=0D + is returned by the Return ASL statement.=0D + Must be a NULL-terminated ASL NameString=0D + e.g.: "NAM1", "_SB.NAM1", etc.=0D + The input string is copied.=0D + @param [in] Integer Argument to pass to the NameString=0D + @param [in] ParentNode If provided, set ParentNode as the parent=0D + of the node created.=0D + Must be a MethodOp node.=0D + @param [out] NewObjectNode If success, contains the created node.=0D +=0D + @retval EFI_SUCCESS Success.=0D + @retval EFI_INVALID_PARAMETER Invalid parameter.=0D + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.=0D +**/=0D +STATIC=0D +EFI_STATUS=0D +EFIAPI=0D +AmlCodeGenReturnNameStringIntegerArgument (=0D + IN CONST CHAR8 *NameString,=0D + IN UINT64 Integer,=0D + IN AML_NODE_HEADER *ParentNode OPTIONAL,=0D + OUT AML_OBJECT_NODE **NewObjectNode OPTIONAL=0D + )=0D +{=0D + EFI_STATUS Status;=0D + AML_DATA_NODE *DataNode;=0D + AML_OBJECT_NODE *IntNode;=0D + CHAR8 *AmlNameString;=0D + UINT32 AmlNameStringSize;=0D + AML_OBJECT_NODE *ObjectNode;=0D +=0D + DataNode =3D NULL;=0D + IntNode =3D NULL;=0D +=0D + Status =3D ConvertAslNameToAmlName (NameString, &AmlNameString);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + return Status;=0D + }=0D +=0D + Status =3D AmlGetNameStringSize (AmlNameString, &AmlNameStringSize);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + goto exit_handler;=0D + }=0D +=0D + Status =3D AmlCreateDataNode (=0D + EAmlNodeDataTypeNameString,=0D + (UINT8 *)AmlNameString,=0D + AmlNameStringSize,=0D + &DataNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + goto exit_handler;=0D + }=0D +=0D + Status =3D AmlCodeGenInteger (Integer, &IntNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + return Status;=0D + }=0D +=0D + // AmlCodeGenReturn() deletes DataNode if error.=0D + Status =3D AmlCodeGenReturn (=0D + (AML_NODE_HEADER *)DataNode,=0D + ParentNode,=0D + &ObjectNode=0D + );=0D + ASSERT_EFI_ERROR (Status);=0D +=0D + Status =3D AmlVarListAddTail (=0D + (AML_NODE_HANDLE)ObjectNode,=0D + (AML_NODE_HANDLE)IntNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + return Status;=0D + }=0D +=0D + if (NewObjectNode !=3D 0) {=0D + *NewObjectNode =3D ObjectNode;=0D + }=0D +=0D +exit_handler:=0D + if (AmlNameString !=3D NULL) {=0D + FreePool (AmlNameString);=0D + }=0D +=0D + return Status;=0D +}=0D +=0D /** AML code generation for a method returning a NameString.=0D =0D AmlCodeGenMethodRetNameString (=0D @@ -1989,6 +2101,118 @@ error_handler:=0D return Status;=0D }=0D =0D +/** AML code generation for a method returning a NameString that takes an= =0D + integer argument.=0D +=0D + AmlCodeGenMethodRetNameStringIntegerArgument (=0D + "MET0", "MET1", 1, TRUE, 3, 5, ParentNode, NewObjectNode=0D + );=0D + is equivalent of the following ASL code:=0D + Method(MET0, 1, Serialized, 3) {=0D + Return (MET1 (5))=0D + }=0D +=0D + The ASL parameters "ReturnType" and "ParameterTypes" are not asked=0D + in this function. They are optional parameters in ASL.=0D +=0D + @param [in] MethodNameString The new Method's name.=0D + Must be a NULL-terminated ASL NameStri= ng=0D + e.g.: "MET0", "_SB.MET0", etc.=0D + The input string is copied.=0D + @param [in] ReturnedNameString The name of the object returned by the= =0D + method. Optional parameter, can be:=0D + - NULL (ignored).=0D + - A NULL-terminated ASL NameString.=0D + e.g.: "MET0", "_SB.MET0", etc.=0D + The input string is copied.=0D + @param [in] NumArgs Number of arguments.=0D + Must be 0 <=3D NumArgs <=3D 6.=0D + @param [in] IsSerialized TRUE is equivalent to Serialized.=0D + FALSE is equivalent to NotSerialized.= =0D + Default is NotSerialized in ASL spec.= =0D + @param [in] SyncLevel Synchronization level for the method.= =0D + Must be 0 <=3D SyncLevel <=3D 15.=0D + Default is 0 in ASL.=0D + @param [in] IntegerArgument Argument to pass to the NameString.=0D + @param [in] ParentNode If provided, set ParentNode as the par= ent=0D + of the node created.=0D + @param [out] NewObjectNode If success, contains the created node.= =0D +=0D + @retval EFI_SUCCESS Success.=0D + @retval EFI_INVALID_PARAMETER Invalid parameter.=0D + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +AmlCodeGenMethodRetNameStringIntegerArgument (=0D + IN CONST CHAR8 *MethodNameString,=0D + IN CONST CHAR8 *ReturnedNameString OPTIONAL,=0D + IN UINT8 NumArgs,=0D + IN BOOLEAN IsSerialized,=0D + IN UINT8 SyncLevel,=0D + IN UINT64 IntegerArgument,=0D + IN AML_NODE_HANDLE ParentNode OPTIONAL,=0D + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL=0D + )=0D +{=0D + EFI_STATUS Status;=0D + AML_OBJECT_NODE_HANDLE MethodNode;=0D +=0D + if ((MethodNameString =3D=3D NULL) ||=0D + ((ParentNode =3D=3D NULL) && (NewObjectNode =3D=3D NULL)))=0D + {=0D + ASSERT (0);=0D + return EFI_INVALID_PARAMETER;=0D + }=0D +=0D + // Create a Method named MethodNameString.=0D + Status =3D AmlCodeGenMethod (=0D + MethodNameString,=0D + NumArgs,=0D + IsSerialized,=0D + SyncLevel,=0D + NULL,=0D + &MethodNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + return Status;=0D + }=0D +=0D + // Return ReturnedNameString if provided.=0D + if (ReturnedNameString !=3D NULL) {=0D + Status =3D AmlCodeGenReturnNameStringIntegerArgument (=0D + ReturnedNameString,=0D + IntegerArgument,=0D + (AML_NODE_HANDLE)MethodNode,=0D + NULL=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + goto error_handler;=0D + }=0D + }=0D +=0D + Status =3D LinkNode (=0D + MethodNode,=0D + ParentNode,=0D + NewObjectNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + goto error_handler;=0D + }=0D +=0D + return Status;=0D +=0D +error_handler:=0D + if (MethodNode !=3D NULL) {=0D + AmlDeleteTree ((AML_NODE_HANDLE)MethodNode);=0D + }=0D +=0D + return Status;=0D +}=0D +=0D /** AML code generation for a method returning an Integer.=0D =0D AmlCodeGenMethodRetInteger (=0D -- =0D 2.25.1=0D =0D