From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (EUR02-AM5-obe.outbound.protection.outlook.com [40.107.0.53]) by mx.groups.io with SMTP id smtpd.web10.9774.1633102308791493495 for ; Fri, 01 Oct 2021 08:31:49 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=vGMxXe3T; spf=pass (domain: arm.com, ip: 40.107.0.53, mailfrom: sami.mujawar@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BPyFELY/6awkS0tnyBZqNRgQRVM8aW5Hcsd8V1XqA1s=; b=vGMxXe3T4jud+3uKUCU8U6LD4zRrSIRUglbpuaU4Pwu53OWRCK/bZT9Vp+O1FqqyULHeQAHw98rW9c4/ZuDPG0k6NM/NszKafIIe78XE1RU8CJXSMmpTFJFTC8nA6qyFRTkQcT1Z7EVLeUeuFtcHBc1xFI8O38pLqZzYOjQRjTQ= Received: from FR0P281CA0006.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::11) by PAXPR08MB6956.eurprd08.prod.outlook.com (2603:10a6:102:1db::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.17; Fri, 1 Oct 2021 15:31:45 +0000 Received: from VE1EUR03FT004.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:15:cafe::d1) by FR0P281CA0006.outlook.office365.com (2603:10a6:d10:15::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.7 via Frontend Transport; Fri, 1 Oct 2021 15:31:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT004.mail.protection.outlook.com (10.152.18.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14 via Frontend Transport; Fri, 1 Oct 2021 15:31:45 +0000 Received: ("Tessian outbound 45760a30af4a:v103"); Fri, 01 Oct 2021 15:31:44 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: addf4cd290934426 X-CR-MTA-TID: 64aa7808 Received: from a4172bcea42a.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 80EBADC0-2DCA-4629-97D9-6A112FFCA640.1; Fri, 01 Oct 2021 15:31:34 +0000 Received: from EUR03-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a4172bcea42a.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 01 Oct 2021 15:31:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CsQhFa14jAvNoLsy1SINmJjDtdSEULlnvmXl7oHCIno3V2wycFZ/M1iP9FFh8MXDxsyf1g29ze9WLml8P8r4B4leKf62eudeyR1gGge6wAOpEdwZ38ZY7WDxxQIF17tFnVaUjzmlW8fWT0j9hWVQNB20OLTQWBan21GTxe2HSl+vN3vQYir0yr+JOa18m+F4Z7e8BT+LRgbjvlpyd6yf8/+SqZPXmKmk4sbX5P60RBSFJ86NWM73rtApGZTEBVVxPX+H22x44i26bPsySE4Tnz72ji/E/Qpw6ukZl954zitOXanGk6ZMu1cYzWuk4EB1LOOB9ahFd3XZieis5KFHVg== 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=BPyFELY/6awkS0tnyBZqNRgQRVM8aW5Hcsd8V1XqA1s=; b=WpA8jjJUmR3ONjstAyGdrB76O1pUhSxCVX+EDXbe2k69BzA9UDXBdrz+6mVWGv4YzSW4qTgTYatOV5Xh0koaium2Tm7/ZSbZEXzYUsu8StJz5Bdkpw2hWf0AGBKbquDoyqtwPeKKOmbQQ3dGKMmiCW5PRwlGfUCCMeT5R6JGfWXuGWur2DZyhFRg6SCU3ZDHDnPXmRMjCaxjP/svLFi8enNgM8YdOLmpKGzO0TplpqHtQnhCQBXVC5wx7mNJcbitg6mLL7ZXnHL0yk9C1T8ATdkaDPuzZYMoyOXjVUr0O6JpuOscX5Q4jiqlcrIZcfBgp5e5Zcu7Z/pI79rb2MTV1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BPyFELY/6awkS0tnyBZqNRgQRVM8aW5Hcsd8V1XqA1s=; b=vGMxXe3T4jud+3uKUCU8U6LD4zRrSIRUglbpuaU4Pwu53OWRCK/bZT9Vp+O1FqqyULHeQAHw98rW9c4/ZuDPG0k6NM/NszKafIIe78XE1RU8CJXSMmpTFJFTC8nA6qyFRTkQcT1Z7EVLeUeuFtcHBc1xFI8O38pLqZzYOjQRjTQ= Authentication-Results-Original: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by AM5PR0801MB1715.eurprd08.prod.outlook.com (2603:10a6:203:3c::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.18; Fri, 1 Oct 2021 15:31:32 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::c8a5:672a:9ff2:e554]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::c8a5:672a:9ff2:e554%6]) with mapi id 15.20.4566.019; Fri, 1 Oct 2021 15:31:31 +0000 Subject: Re: [PATCH v1 10/13] DynamicTablesPkg: AML code generation for a _LPI object To: Pierre.Gondois@arm.com, devel@edk2.groups.io, Alexei Fedorov Cc: Akanksha Jain , Alexandru Elisei , nd References: <20210623114039.24491-1-Pierre.Gondois@arm.com> <20210623114039.24491-12-Pierre.Gondois@arm.com> From: "Sami Mujawar" Message-ID: <873134a1-b7b9-bba8-eb4f-263a28f4384e@arm.com> Date: Fri, 1 Oct 2021 16:31:34 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.0.1 In-Reply-To: <20210623114039.24491-12-Pierre.Gondois@arm.com> X-ClientProxiedBy: LO4P123CA0463.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1aa::18) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 Received: from [10.1.196.43] (217.140.106.52) by LO4P123CA0463.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1aa::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.16 via Frontend Transport; Fri, 1 Oct 2021 15:31:30 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e95d13e-0ae4-43e1-130e-08d984f093c4 X-MS-TrafficTypeDiagnostic: AM5PR0801MB1715:|PAXPR08MB6956: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:6430;OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: HBYCmT4lw4e+9MR/4kHWtnUy8P7JG4zRX+NEtIBYUnhNSxhSdHCs5m3RkE+45cFiL37GH5iDpqewddqKeKEW9nCxOIvUInSaTXY+dDmIqG+yjV+5drTRc1POfmnorQEWYYkW2rxsBRK9EMQTZchxCN2EKJI7E8a4fOjR1hlPavpe+Y8Hawmzs6G8YMfLvfeT4wFMOWax5nMGan7aCXs8fCO5v0aLw3Cj5P7St2VDDMad+myhNBsllI5a80Mmpeiepy5RuT7KvDHwL6tZJO16oaNinUzKAGkdlTWe500MFmFJGdTDRUy+yB4obvvdwjP9lmBblJnHDiw+rO+FItF85OSSf0k3/je2Rw8UP1NkmqDKoazZBdESEphIJFCflaLw50aCjecPqmBqtZzbGlqgkDg/RiIO3ca3NZv3uXV+iBHOqaNKyfzf3fN9euH9GgzxGb9SxyYLWPwu+9e9ARwORYj8xfs8DmfFOknE9vVfzHXXv5SBrtUABT1wci8Q1ZquFjyASJnoYSs+JdTgfAxWbcg7fndM3fhjtGs61EX3/D30fl3qYzYZhlO8+KYwH/crDRsu5GRqKFewtu14F2wZ5Z8q37Pkl6e4GOUONH+ZO7sqhI2OK2f8sIvucCNm3Gwmj3tsynwAbxWB8BLQlsPLTrbbJQxYhZfExdLoP5I0RTP2tQ0041mOef2V6vLnI+zOputju6kpiE9mI1FehJII2D73p0Hk+8QeWWIr9qq8zGe4eAN6dxmnQ35UdDbT7Lp+vhBauLXGSHvG7AXe3u5g2Q== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(5660300002)(956004)(31686004)(26005)(8676002)(2616005)(6486002)(186003)(6636002)(38350700002)(38100700002)(16576012)(31696002)(37006003)(508600001)(83380400001)(6862004)(53546011)(2906002)(66556008)(66476007)(44832011)(86362001)(52116002)(4326008)(36756003)(66946007)(8936002)(54906003)(316002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1715 Original-Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: ef6cb81e-9e0a-4e68-b49e-08d984f08b1c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UPsEXwZxiMrY/F8AiSkQozPgRsrIM0+K8f8aeOzB4drPRR+0Obg63kl3GjuVVnT4/d3Jw2h8gdLc9bIt1atcY3LQ/acVHt9M7niRpE+CW8vDfbbiusLSWIcXQJUXIRIesOAmMlRWv36o3yzjVSbhma1iTu8F6G7enPaltag38NnJYtQSK6DXoGZIS9KkebPWJNGHUm1ovLnZR1xyQQqRTGCnuDFLUv/mh1tqS1Bxhter4dUxUXjr5dpS+96CcLN12bSVXscrr3tc1n3saQqAOaAA4FRkwOojsGLy6mHL/PEQycky+QtSjHFTUsuFTatvNRedwSMBhclKKbi70a4/A+mIySqJw7rAKku1Aagava9QYHjUcP+dphZpo1avowpxg+tlwQH4Vwo5e47Lbw9/z95PuZemtQTQvRomH1e17BdelURaRvfH+Jn2wqjXdVmQQifX/DvVHLEH9RTrXzK5etHx7YFNYvI5p9Tumyjh6xVRRWHk++KmhbJtYeOMnB6nztMcQvSeYBn37SdP3cmnGj0ZTAk7TC/KvN52C+cPBuxkxzvY4mzUlQOKDtSSOwaVvusvrwEI87dcvLh+GZucBY50ZxDkyxQblHCt8ARTiZHVRFkOIt+GKbhvQEw+nBHvzV1no4PyQd4GVhe/Wm/VUBWbCx8/atLKheBA6PGFIbKgRglXRv13iRpYao9g0fxJR+atqHrM6+It4LLPSKsFqvmjC+xzg0xZNEn/WTIR6Gs= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(46966006)(36840700001)(5660300002)(8936002)(8676002)(6862004)(956004)(86362001)(31696002)(2616005)(356005)(47076005)(81166007)(36860700001)(31686004)(36756003)(54906003)(82310400003)(26005)(186003)(508600001)(37006003)(83380400001)(16576012)(6486002)(2906002)(316002)(70206006)(70586007)(336012)(44832011)(53546011)(6636002)(4326008)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2021 15:31:45.4374 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9e95d13e-0ae4-43e1-130e-08d984f093c4 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6956 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Hi Pierre, Please find my response inline marked [SAMI]. Regards, Sami Mujawar On 23/06/2021 12:40 PM, Pierre.Gondois@arm.com wrote: > From: Pierre Gondois > > _LPI object provides a method to describe Low Power Idle > states that define the local power states for each node > in a hierarchical processor topology. > > Therefore, add AmlCreateLpiNode() to generate code for a > _LPI object. > > AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is > equivalent of the following ASL code: > Name (_LPI, Package ( > 0, // Revision > 1, // LevelId > 0 // Count > )) > > Signed-off-by: Pierre Gondois > --- > .../Include/Library/AmlLib/AmlLib.h | 44 ++++++ > .../Common/AmlLib/CodeGen/AmlCodeGen.c | 133 ++++++++++++++++++ > 2 files changed, 177 insertions(+) > > diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h > index 7740aac24470..40c45073d303 100644 > --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h > +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h > @@ -672,6 +672,50 @@ AmlCodeGenMethodRetNameString ( > OUT AML_OBJECT_NODE_HANDLE * NewObjectNode OPTIONAL > ); > > +/** Create a _LPI name. > + > + AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is > + equivalent of the following ASL code: > + Name (_LPI, Package ( > + 0, // Revision > + 1, // LevelId > + 0 // Count > + )) > + > + This function doesn't define any LPI state. As shown above, the count > + of _LPI state is set to 0. > + The AmlAddLpiState () function must be used to add LPI states. > + > + Cf ACPI 6.3 specification, s8.4.4 "Lower Power Idle States". > + > + @ingroup CodeGenApis > + > + @param [in] LpiNameString The new LPI 's object name. > + Must be a NULL-terminated ASL NameString > + e.g.: "_LPI", "DEV0.PLPI", etc. > + The input string is copied. > + @param [in] Revision Revision number of the _LPI states. > + @param [in] LevelId A platform defined number that identifies the > + level of hierarchy of the processor node to > + which the LPI states apply. > + @param [in] ParentNode If provided, set ParentNode as the parent > + of the node created. > + @param [out] NewLpiNode If success, contains the created node. > + > + @retval EFI_SUCCESS The function completed successfully. > + @retval EFI_INVALID_PARAMETER Invalid parameter. > + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. > +**/ > +EFI_STATUS > +EFIAPI > +AmlCreateLpiNode ( > + IN CONST CHAR8 * LpiNameString, > + IN UINT16 Revision, > + IN UINT64 LevelId, > + IN AML_NODE_HANDLE ParentNode, OPTIONAL > + OUT AML_OBJECT_NODE_HANDLE * NewLpiNode 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 a9922871c311..89350f65f5df 100644 > --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c > +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c > @@ -1421,3 +1421,136 @@ error_handler: > } > return Status; > } > + > +/** Create a _LPI name. > + > + AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is > + equivalent of the following ASL code: > + Name (_LPI, Package ( > + 0, // Revision > + 1, // LevelId > + 0 // Count > + )) > + > + This function doesn't define any LPI state. As shown above, the count > + of _LPI state is set to 0. > + The AmlAddLpiState () function allows to add LPI states. > + > + Cf ACPI 6.3 specification, s8.4.4 "Lower Power Idle States". > + > + @param [in] LpiNameString The new LPI 's object name. > + Must be a NULL-terminated ASL NameString > + e.g.: "_LPI", "DEV0.PLPI", etc. > + The input string is copied. > + @param [in] Revision Revision number of the _LPI states. > + @param [in] LevelId A platform defined number that identifies the > + level of hierarchy of the processor node to > + which the LPI states apply. > + @param [in] ParentNode If provided, set ParentNode as the parent > + of the node created. > + @param [out] NewLpiNode If success, contains the created node. > + > + @retval EFI_SUCCESS The function completed successfully. > + @retval EFI_INVALID_PARAMETER Invalid parameter. > + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. > +**/ > +EFI_STATUS > +EFIAPI > +AmlCreateLpiNode ( > + IN CONST CHAR8 * LpiNameString, > + IN UINT16 Revision, > + IN UINT64 LevelId, > + IN AML_NODE_HANDLE ParentNode, OPTIONAL > + OUT AML_OBJECT_NODE_HANDLE * NewLpiNode OPTIONAL > + ) > +{ > + EFI_STATUS Status; > + AML_OBJECT_NODE_HANDLE PackageNode; > + AML_OBJECT_NODE_HANDLE IntegerNode; > + > + if ((LpiNameString == NULL) || > + ((ParentNode == NULL) && (NewLpiNode == NULL))) { > + ASSERT (0); > + return EFI_INVALID_PARAMETER; > + } > + > + IntegerNode = NULL; > + > + Status = AmlCodeGenPackage (&PackageNode); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + return Status; > + } > + > + // Create and attach Revision > + Status = AmlCodeGenInteger (Revision, &IntegerNode); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler; > + } > + > + Status = AmlVarListAddTail ( > + (AML_NODE_HANDLE)PackageNode, > + (AML_NODE_HANDLE)IntegerNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler; > + } > + > + IntegerNode = NULL; > + > + // Create and attach LevelId > + Status = AmlCodeGenInteger (LevelId, &IntegerNode); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler; > + } > + > + Status = AmlVarListAddTail ( > + (AML_NODE_HANDLE)PackageNode, > + (AML_NODE_HANDLE)IntegerNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler; > + } > + > + IntegerNode = NULL; > + > + // Create and attach Count. No LPI state is added, so 0. > + Status = AmlCodeGenInteger (0, &IntegerNode); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + IntegerNode = NULL; [SAMI] Can you check if setting the IntegerNode to NULL is needed here? > + goto error_handler; > + } > + > + Status = AmlVarListAddTail ( > + (AML_NODE_HANDLE)PackageNode, > + (AML_NODE_HANDLE)IntegerNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler; > + } > + > + IntegerNode = NULL; > + > + Status = AmlCodeGenName (LpiNameString, PackageNode, ParentNode, NewLpiNode); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler; > + } > + > + return Status; > + > +error_handler: > + if (PackageNode != NULL) { > + AmlDeleteTree ((AML_NODE_HANDLE)PackageNode); > + } > + if (IntegerNode != NULL) { > + AmlDeleteTree ((AML_NODE_HANDLE)IntegerNode); > + } > + return Status; > +}