From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (EUR04-HE1-obe.outbound.protection.outlook.com [40.107.7.48]) by mx.groups.io with SMTP id smtpd.web10.8825.1633098263101326897 for ; Fri, 01 Oct 2021 07:24:24 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=rrDJmB0A; spf=pass (domain: arm.com, ip: 40.107.7.48, 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=vFBcogo+Tm5AkqkdM5NNZFZcdP9qwNEolZ3dbxR/UKI=; b=rrDJmB0AvQc2YZztjloQzJWOdWD/aab/gmjjevTtHF6DDKlWhJs9Udvs2yBdyxP/G4sC2O4YStTYkSRGRrvTnurOYeBmNJivmhvNJguXjna+kkPRPBJFi3+MzhdGVkJYL+e/bmlLltUVCzsvoso/oC9J114Fa8fGM/WVndbFRSk= Received: from DB6PR0601CA0041.eurprd06.prod.outlook.com (2603:10a6:4:17::27) by VI1PR08MB3389.eurprd08.prod.outlook.com (2603:10a6:803:87::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.19; Fri, 1 Oct 2021 14:24:18 +0000 Received: from DB5EUR03FT052.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:17:cafe::83) by DB6PR0601CA0041.outlook.office365.com (2603:10a6:4:17::27) 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 14:24:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.33.187.114) 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.33.187.114 as permitted sender) receiver=protection.outlook.com; client-ip=63.33.187.114; helo=64aa7808-outbound-2.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-2.mta.getcheckrecipient.com (63.33.187.114) by DB5EUR03FT052.mail.protection.outlook.com (10.152.21.82) 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 14:24:18 +0000 Received: ("Tessian outbound b324a1dbd9be:v103"); Fri, 01 Oct 2021 14:24:18 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: b8c53a3d6a3bb83a X-CR-MTA-TID: 64aa7808 Received: from 61767f95ba25.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id FEBF28F4-FE4D-4EDB-8414-38E76281A968.1; Fri, 01 Oct 2021 14:24:05 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 61767f95ba25.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 01 Oct 2021 14:24:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FHDLcF6BpJkU+8aFSGGz3SXB0/HWCOtnwk/TVIe9ZIkkm62R+eEggP22MLs+vtTT+GEJhq36oHARvWms4dZL9ldx6WrXnicD4KxZOX94iF3o/L6iFKC9fQYp8GNBEG4aubK4z9RhDJedS9bFj3+m9s3DVKk/CS9eIVCnp+oeHezTuQGfAei/PM6jGUvYi3BIi1ehk1k+qYZHw3n4GFrsaZhOqwpLOq/VM1kxmI4VtduhAFLSrGnEXQcaCxpz2zBbHM6MgowH1P/GNOpmF3nU9X1j32GUAUbWwvmeyGm1+R7rG4wB4jtsEm19Zt+Q8dZuofO0o2ErlaI60XuSoEJJbg== 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=vFBcogo+Tm5AkqkdM5NNZFZcdP9qwNEolZ3dbxR/UKI=; b=CjC0gIwUVLCCvql8Fg4ki92EtqW91ey3FL7DMdL6z+m0WH20ZzXEAabeIqXBJZTCD0F7PhaAM/aPvs+TeuhCkrWSWaPQBCEdiy2PLkqD3gG1JxXyEsvXhwPFJQnITpLMyFQSyeBj5t0+xjmPcMd2c1r/31pC+oB3K2xFuiSYQL6//NsJIn5DMVyVE01/xIvD/1jGtduAz+RjODcO+xaLbi2m9kWY7WqlDAmIhXD1XVR+VwXZGuOX/UvU/mp1PBEel2r575gCT51IcSz7El1JAFTsKc1kSSWqw9TiDjFspQrRs4n3NIwE7VVS/yvEFUAw0w/+VXyb7H/rtfWjE8Koow== 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=vFBcogo+Tm5AkqkdM5NNZFZcdP9qwNEolZ3dbxR/UKI=; b=rrDJmB0AvQc2YZztjloQzJWOdWD/aab/gmjjevTtHF6DDKlWhJs9Udvs2yBdyxP/G4sC2O4YStTYkSRGRrvTnurOYeBmNJivmhvNJguXjna+kkPRPBJFi3+MzhdGVkJYL+e/bmlLltUVCzsvoso/oC9J114Fa8fGM/WVndbFRSk= 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 AS8PR08MB6805.eurprd08.prod.outlook.com (2603:10a6:20b:396::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13; Fri, 1 Oct 2021 14:24:03 +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 14:24:03 +0000 Subject: Re: [PATCH v1 05/13] DynamicTablesPkg: Helper function to compute package length 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-6-Pierre.Gondois@arm.com> From: "Sami Mujawar" Message-ID: <5dfb42ef-a5f3-6613-b9ba-bcfa96f8c876@arm.com> Date: Fri, 1 Oct 2021 15:24:05 +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-6-Pierre.Gondois@arm.com> X-ClientProxiedBy: LO4P123CA0340.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18c::21) 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 LO4P123CA0340.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18c::21) 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 14:24:02 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7235a006-f1db-4064-a264-08d984e72766 X-MS-TrafficTypeDiagnostic: AS8PR08MB6805:|VI1PR08MB3389: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:8882;OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: ejFUXJMgb84YgChycUouysVE/uuKNwqIzAXbVVy7Y+8A07AEQwOYw1m2m8TI7D4qG274+UrRa8I3gWkD7LZ9e2oaHKQh5z1RAUs0hO1P/ae2HO+mSX0lTC+3W3fk2GytNMQop4JP3/CIASJGLMjdlZd9a30LBZn4twl8W21c26SOD5nSCSVnaUoi4Tt1hxF5YH91rTB8aUCRE7ztg8FX9zoUD74tU+m8lO92ASMK3FY0sul2U7Y+rartybZzengmDSWVQKGOfpSmIDBeGrWg5B45J0N/xSBvWNwLNR+TGk+76PwY9IEiuf+4oikts2SawWwKy/7Je4La3s+3TTvTwXve0JJXTpk69DWLyCUETpyPfmEuDGkjFFRHlPmckwUNUXfoW2/q+Aoatrh/jol6sIC3KohvJ2DsKeFtnEXpgQbjl4FVgvjgVfl3ioASImj+Nte3mH4b25PACrAUGykLhpWd5YGADqRqZdYaxatC0GJJSMxb1v44P0332iAsryCWpHYMeqNrd+6lhc5rR8bZKBr4B+ZTnFK9sG9wkO/jrl7psrvGvdbE5KX6aHbN2cS2QPUPbmOmNUs9E6UxW5d28Ay2lG/FoPL7FkbrAHqLO+8H4Y8OzCtkY/S4L61EMvLHxlie+0Q6imH70VONpkAukWk/uRPfmNX9pwbOgm8wC3DNzMbCchEFszxJdZRv5uXvWGfR609lC5GYfMHt2J3Inaw68Vu8dBimAmk9pYNMpFdkVjujhzLG1zKuyVKwLFuOWGpOMnxdAiB7vg238ofmAQ== 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)(6486002)(31696002)(6862004)(38100700002)(86362001)(38350700002)(4326008)(66476007)(66556008)(2616005)(53546011)(83380400001)(956004)(66946007)(44832011)(8936002)(508600001)(316002)(16576012)(36756003)(186003)(5660300002)(31686004)(52116002)(26005)(6636002)(2906002)(37006003)(54906003)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6805 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: DB5EUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 314d42be-426b-4bb2-bd4a-08d984e71e48 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xK4XoZXySGpisZfCkx19LacH8oPxewv+mBL4ZuLXHLe109s4k9JBtE9cox51DuwpFXpkzz9tNVV+X1jpg3YnfjS+JVeRAY3bjpjhNrE266MbziwdElzYpQqS2ppBe3OQTUGYkZ2/5a/EtPR7sQDxwX16n0Drdn8H7sUFs3jTxzGV53asi98g823el43KaCsJy3W049ZWll8b+EWQRtnjmw6JxX83MdouvmcYezfLxf3CLf6pVT455b6pM8LkiadBl83G7FLzdrEMo60uRMDILg9I+qREc2llM5bKSluqjZqTadkrEcrcQXc773QYbBC5L0L9afClptq+4DF3ISiE+pQYQv8PBy/yaCHXzKV72HfdmL9yi9RwGutjz0bZD+IaA+8rZf8LRwnZn8Ov0RDBKkM2WE5I1SYMbTae1hzjJ7uFD6h0H/9r6tU/JXdeSX6qUThBCvxvNDpjTaksAXGpYCrteEk6C9vwIpz5OzYdadbpw8Ov0NKDPJQhaESvVWx1Tw3YU5LDIWUJk9N9ylD4NizbMPD9W7NDWJhruMisgXJWJ3oT6SD/Xt6JprZupYCzOaS+4b/wHSon4M58jenW6K6OFGKSoP2T5vdbkXq+Z3EtM51QhIwzZjuoHPEaZqlMHD1tiVXxL+INVGVRB9OJcIGDgF7YtpshpIZkOEjLS4BMmphouFryyMAm7hgWwWc/yfdZVAbsgcCAhxVtZSbZ1PWng+6gOhCpqAEiIgC/se0= X-Forefront-Antispam-Report: CIP:63.33.187.114;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-2.mta.getcheckrecipient.com;PTR:ec2-63-33-187-114.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(82310400003)(53546011)(54906003)(26005)(16576012)(31686004)(44832011)(4326008)(5660300002)(316002)(6636002)(2906002)(36756003)(37006003)(81166007)(956004)(70586007)(70206006)(31696002)(83380400001)(47076005)(36860700001)(8676002)(6862004)(186003)(86362001)(2616005)(8936002)(6486002)(356005)(508600001)(336012)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2021 14:24:18.2895 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7235a006-f1db-4064-a264-08d984e72766 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.33.187.114];Helo=[64aa7808-outbound-2.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5EUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3389 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Hi Pierre, This patch looks good to me. Reviewed-by: Sami Mujawar Regards, Sami Mujawar On 23/06/2021 12:40 PM, Pierre.Gondois@arm.com wrote: > From: Pierre Gondois > > Some AML object have a PkgLen which indicates the size of the > AML object. The package length can be encoded in 1 to 4 bytes. > The bytes used to encode the PkgLen is itself counted in the > PkgLen value. So, if an AML object's size increments/decrements, > the number of bytes used to encode the PkgLen value can itself > increment/decrement. > > Therefore, a helper function AmlComputePkgLength() is introduced > to simply computation of the PkgLen. > > Signed-off-by: Pierre Gondois > --- > .../Library/Common/AmlLib/AmlEncoding/Aml.c | 87 ++++++++++++++++++- > .../Library/Common/AmlLib/AmlEncoding/Aml.h | 47 +++++++++- > 2 files changed, 132 insertions(+), 2 deletions(-) > > diff --git a/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.c b/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.c > index eadafca97ea5..d829b1869846 100644 > --- a/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.c > +++ b/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.c > @@ -2,7 +2,7 @@ > AML grammar definitions. > > Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
> - Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.
> + Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > **/ > @@ -803,3 +803,88 @@ AmlComputePkgLengthWidth ( > // Length < 2^6 > return 1; > } > + > +/** Given a length, compute the value of a PkgLen. > + > + In AML, some object have a PkgLen, telling the size of the AML object. > + It can be encoded in 1 to 4 bytes. The bytes used to encode the PkgLen is > + itself counted in the PkgLen value. > + This means that if an AML object sees its size increment/decrement, > + the number of bytes used to encode the PkgLen value can itself > + increment/decrement. > + > + For instance, the AML encoding of a DeviceOp is: > + DefDevice := DeviceOp PkgLength NameString TermList > + If: > + - sizeof (NameString) = 4 (the name is "DEV0" for instance); > + - sizeof (TermList) = (2^6-6) > + then the PkgLen is encoded on 1 byte. Indeed, its value is: > + sizeof (PkgLen) + sizeof (NameString) + sizeof (TermList) = > + sizeof (PkgLen) + 4 + (2^6-6) > + So: > + PkgLen = sizeof (PkgLen) + (2^6-2) > + > + The input arguments Length and PkgLen represent, for the DefDevice: > + DefDevice := DeviceOp PkgLength NameString TermList > + |------Length-----| > + |--------*PgkLength---------| > + > + @param [in] Length The length to encode as a PkgLen. > + Length cannot exceed 2^28 - 4 (4 bytes for the > + PkgLen encoding). > + The size of the PkgLen encoding bytes should not be > + counted in this length value. > + @param [out] PkgLen If success, contains the value of the PkgLen, > + ready to encode in the PkgLen format. > + This value takes into account the size of PkgLen > + encoding. > + > + @retval EFI_SUCCESS The function completed successfully. > + @retval EFI_INVALID_PARAMETER Invalid parameter. > +**/ > +EFI_STATUS > +EFIAPI > +AmlComputePkgLength ( > + IN UINT32 Length, > + OUT UINT32 * PkgLen > + ) > +{ > + UINT32 PkgLenWidth; > + UINT32 ReComputedPkgLenWidth; > + > + if (PkgLen == NULL) { > + ASSERT (0); > + return EFI_INVALID_PARAMETER; > + } > + > + // Compute the PkgLenWidth. > + PkgLenWidth = AmlComputePkgLengthWidth (Length); > + if (PkgLenWidth == 0) { > + ASSERT (0); > + return EFI_INVALID_PARAMETER; > + } > + > + // Add it to the Length. > + Length += PkgLenWidth; > + > + // Check that adding the PkgLenWidth didn't trigger a domino effect, > + // increasing the encoding width of the PkgLen again. > + // The PkgLen is encoded in at most 4 bytes. It is possible to increase > + // the PkgLen width if its encoding is less than 3 bytes. > + ReComputedPkgLenWidth = AmlComputePkgLengthWidth (Length); > + if (ReComputedPkgLenWidth != PkgLenWidth) { > + if ((ReComputedPkgLenWidth != 0) && > + (ReComputedPkgLenWidth < 4)) { > + // No need to recompute the PkgLen since a new threshold cannot > + // be reached by incrementing the value by one. > + Length += 1; > + } else { > + ASSERT (0); > + return EFI_INVALID_PARAMETER; > + } > + } > + > + *PkgLen = Length; > + > + return EFI_SUCCESS; > +} > diff --git a/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.h b/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.h > index 35c0680b6159..0641500fcd5f 100644 > --- a/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.h > +++ b/DynamicTablesPkg/Library/Common/AmlLib/AmlEncoding/Aml.h > @@ -2,7 +2,7 @@ > AML grammar definitions. > > Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
> - Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.
> + Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > **/ > @@ -326,5 +326,50 @@ AmlComputePkgLengthWidth ( > IN UINT32 Length > ); > > +/** Given a length, compute the value of a PkgLen. > + > + In AML, some object have a PkgLen, telling the size of the AML object. > + It can be encoded in 1 to 4 bytes. The bytes used to encode the PkgLen is > + itself counted in the PkgLen value. > + This means that if an AML object sees its size increment/decrement, > + the number of bytes used to encode the PkgLen value can itself > + increment/decrement. > + > + For instance, the AML encoding of a DeviceOp is: > + DefDevice := DeviceOp PkgLength NameString TermList > + If: > + - sizeof (NameString) = 4 (the name is "DEV0" for instance); > + - sizeof (TermList) = (2^6-6) > + then the PkgLen is encoded on 1 byte. Indeed, its value is: > + sizeof (PkgLen) + sizeof (NameString) + sizeof (TermList) = > + sizeof (PkgLen) + 4 + (2^6-6) > + So: > + PkgLen = sizeof (PkgLen) + (2^6-2) > + > + The input arguments Length and PkgLen represent, for the DefDevice: > + DefDevice := DeviceOp PkgLength NameString TermList > + |------Length-----| > + |--------*PgkLength---------| > + > + @param [in] Length The length to encode as a PkgLen. > + Length cannot exceed 2^28 - 4 (4 bytes for the > + PkgLen encoding). > + The size of the PkgLen encoding bytes should not be > + counted in this length value. > + @param [out] PkgLen If success, contains the value of the PkgLen, > + ready to encode in the PkgLen format. > + This value takes into account the size of PkgLen > + encoding. > + > + @retval EFI_SUCCESS The function completed successfully. > + @retval EFI_INVALID_PARAMETER Invalid parameter. > +**/ > +EFI_STATUS > +EFIAPI > +AmlComputePkgLength ( > + IN UINT32 Length, > + OUT UINT32 * PkgLen > + ); > + > #endif // AML_H_ >