From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (EUR05-VI1-obe.outbound.protection.outlook.com [40.107.21.54]) by mx.groups.io with SMTP id smtpd.web10.9240.1633099938929377353 for ; Fri, 01 Oct 2021 07:52:20 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=FL4qKf0g; spf=pass (domain: arm.com, ip: 40.107.21.54, 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=PqY2JQiTpIMpSpGHpw2vyXN8qmfLk1fRUII8nfSkl80=; b=FL4qKf0gBn2LaovyChvtHMeEwolQ1BVAkzgRx6V2xcUskHEsroc65GuPE4wrxUZ5Dwbvy39yY6W9EPNUEex5XXVDQwEEiorbX3d18dFomg3lgdrPCx+1yuxe7caBYhIysRH+/fcJ9fGLa3KLHMtvcIJL5dCmukx4NnONDGpjbsA= Received: from AM6PR04CA0004.eurprd04.prod.outlook.com (2603:10a6:20b:92::17) by DB7PR08MB3642.eurprd08.prod.outlook.com (2603:10a6:10:4a::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.15; Fri, 1 Oct 2021 14:52:16 +0000 Received: from AM5EUR03FT014.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:92:cafe::f4) by AM6PR04CA0004.outlook.office365.com (2603:10a6:20b:92::17) 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:52:16 +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 AM5EUR03FT014.mail.protection.outlook.com (10.152.16.130) 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:52:15 +0000 Received: ("Tessian outbound 010023020eef:v103"); Fri, 01 Oct 2021 14:52:15 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: cc8e2d4a507b5ef3 X-CR-MTA-TID: 64aa7808 Received: from 79f21281000f.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 08F52FB8-5A1B-4767-AE90-9366B2B4339B.1; Fri, 01 Oct 2021 14:52:04 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 79f21281000f.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 01 Oct 2021 14:52:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KpBUZbfP5k/WZbKAvpr4tsTWamOvIP880SfAqoBGdEPlJOkhtJwEQ5SMIeD5taXqI/S+R8GJixzoP540slpV181B6Cu+6+5hUR+2HXS4KYThcqiOeZ1IgSkYGWk3lqWEjcL0yRzOjEBs2lZq/HK/wB6IWKCbeYp2f+Rzb2HoHUFvieNec/RfDllwehd2F9wEFkBGaHrgfhGE+yrQVlvX1mInXAIo86XGE677BkgbG19d0rAENklJkwB2elSLcUbwPmpLRfM0c6gcZhYpKANxJnvHMwgY54MC93UYtHTqD05enTVBeaaTPnz1hZbu0XQVEdD4yulVigT04/SFkvrjCQ== 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=PqY2JQiTpIMpSpGHpw2vyXN8qmfLk1fRUII8nfSkl80=; b=GgQkqA/E+H4d95AigiU+R/9otzeUSdjDCw3jnMRrIIq4ZD3bdvbi3QiVWjM6q1hl25XaszZ9xO9bsEomIgoTB3IS+ezXPksSjizg70qlIsvA7rZgN7lsEEx/WBWVBeHyVj/Q6KsJt5ApESAFgRqwVYWsM31+qtruNG/Hg1EOHZx9vzrlCR09MVHtRJ+4XtglnTsGQ+jUl8jV4FvtlH9w/vf/OHpvzISGy+m6ZADPp2K5zazwXXCwrR4NUYXljx+ygPzHmg+6J29TOaYAQNRknUJWzh6QzcNieVU2x24kYEACGHhZZrD/JeqOGjqtk7G8TSmHHYu5U8AYuTHuZZcmRA== 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=PqY2JQiTpIMpSpGHpw2vyXN8qmfLk1fRUII8nfSkl80=; b=FL4qKf0gBn2LaovyChvtHMeEwolQ1BVAkzgRx6V2xcUskHEsroc65GuPE4wrxUZ5Dwbvy39yY6W9EPNUEex5XXVDQwEEiorbX3d18dFomg3lgdrPCx+1yuxe7caBYhIysRH+/fcJ9fGLa3KLHMtvcIJL5dCmukx4NnONDGpjbsA= 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 AM5PR0801MB1649.eurprd08.prod.outlook.com (2603:10a6:203:38::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14; Fri, 1 Oct 2021 14:52:01 +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:52:01 +0000 Subject: Re: [PATCH v1 07/13] DynamicTablesPkg: AML code generation for a Method 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-8-Pierre.Gondois@arm.com> From: "Sami Mujawar" Message-ID: <10607405-84aa-d322-b0cd-7f4ee3c6f51f@arm.com> Date: Fri, 1 Oct 2021 15:52:04 +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-8-Pierre.Gondois@arm.com> X-ClientProxiedBy: LO4P123CA0403.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:189::12) 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 LO4P123CA0403.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:189::12) 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:52:01 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d431552e-0180-4b47-723f-08d984eb0f28 X-MS-TrafficTypeDiagnostic: AM5PR0801MB1649:|DB7PR08MB3642: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:7691;OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: sXragsMhD5Whkgl+q3PUchWunwtVW7wefQF+LouJz6NXBo+MIeIlG1NOJ0TB/lqhwEVNdje5KXoaUdd9fAOZJ2Y9oXN9DRP7qN+MOBaLu5P7k9k+3zHrF+qEMQx/5zPahj1iaqz77b6sAx1DaBP9av38FoOdM+4M6R7URJ94QZ7dVcOF0ebCoGSsrqbxLtJ4QSsHrbFMPA9bRzTdwiGNe8bG2i8uAJhnS2yBeCs37CH4O+pzSQqZAxCUfUZTvhOmPoQ4Gby9d1ryCGOzD0v4imrpbz0orqogxAGgdiedmha/VdiulRBpgAU11wL6zK5BIXUVqD/bTmmGvG6MBfvsd1/Elt1+Hs5azTyGuS38dKV7WzVoCzhI8GOev7gKm3b3e57ljQQv0wq1oHkrM1+A47DN8IHL5XJx4zOOVRoMYkKQgaxOabg0cMH2N0/mMUvGXAdxhfskeW0VgYvOP08havocvQh6aR0ZIu6wgPA6+BjA5YK+ZxWTfMgfk+dfINsJbOtcozg+cWCVa+mFF6KKE47mpxfe8aN7OCWp6NHdILTQuUYDPCzNBTAfJjdXSLY4hQMlzk3m7Hvt2vp5+My1f0lgoA2N0ugxeDecYk3TOPUZG4SlAVFLZj624mSQOU2IFi5odxNKsQS2wiBIKhnpFRdBO/PB+e7GmbS0JOp2CGkvq6iOqb6TFcm+FbWDXLNaimm2Dhelx4VxVpi6ugRIa+Go2AQBN3ayqlfY8tStJOIboDxKzzvXexDmTfCO4BhafcHXq/zpR4e14QjdPnnQJg== 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)(956004)(2616005)(508600001)(54906003)(16576012)(31696002)(6636002)(86362001)(316002)(44832011)(37006003)(5660300002)(36756003)(2906002)(38100700002)(6486002)(38350700002)(186003)(66946007)(6862004)(8676002)(26005)(4326008)(8936002)(83380400001)(52116002)(66476007)(53546011)(66556008)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1649 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: AM5EUR03FT014.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: e0c43b45-784e-46f5-e9e8-08d984eb06b5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 17r+RXKwm0iTJI/UVaDfazrB9ct8bcwzZXSv7wjijK+Bamm0LhPwlW9nmZk0yYT1R8ghBr7Nw4/iqtCV1+opKnYcU3n2ktbZvSjYAKfncF7OGNOhze2R56ZD1DG+QkINXiYLiDuIvE1r0PsgUNt9i016eKN1YBpplfZvptZfspNXwHL9T71fMFFvgDs1F4gFqKez7WWEge9SRXd2WTXR6Gz5FB+9p0DRunvTE4PxoumXBkk60EEpCO2kXvbDg8g7QeGr9pvKGZRCzk2USDpDkg94Cxa7ylrdqWjaOa07YCSJshC3aKkhTfh5YMX5KYsHR+NXeqk2cO3iQKzevGvNqtrTNfYdZZGW1ZNWP+NReGXsU6BtiEEhblfIpTJeSc3cRIWZ12mekBc0Q7JiEzuy4pAV4+Q6T4VAg/JyYY59gx+7jmFee9OQiYD1QwFp3oVdMM8KdC1Mn7/mgZu9zXQKqRgIBpQr1fHI4uLgOBZkR1jqDF8hcWUOnUJ5p/OmUVnah32yLJ0uXWDN+OyJa1dF82sZkszyHvPkYTHS6AAHhIC4GVDK9dN8erJbHgNbuiaT/+ctfoL+yqkvM4uUqgWsIHBS+8gXToTEN9e3Dz3cw/iaXmU8c7qD/B8kUe9n4DxZGe5wnDbdDhq0s3Ex395g+x+IVOOvI4mZRjPx1eBdf3EnHU+o3v62O8wFGxJ5iNxWRMV4SXqu4epPlaB+Yz/FewUL4xZOMKHb/tAoMa37xxM= 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)(36840700001)(46966006)(37006003)(54906003)(31686004)(316002)(53546011)(16576012)(356005)(81166007)(2906002)(5660300002)(36756003)(8676002)(8936002)(36860700001)(31696002)(186003)(956004)(44832011)(83380400001)(508600001)(82310400003)(6862004)(47076005)(86362001)(70206006)(70586007)(26005)(6636002)(6486002)(2616005)(336012)(4326008)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2021 14:52:15.5306 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d431552e-0180-4b47-723f-08d984eb0f28 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: AM5EUR03FT014.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3642 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Hi Pierre, I have a minor suggestion marked inline as [SAMI]. Otherwise 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 > > Add AmlCodeGenMethod() to generate code for a control method. > > AmlCodeGenMethod ("MET0", 1, TRUE, 3, ParentNode, NewObjectNode) > is equivalent of the following ASL code: > Method(MET0, 1, Serialized, 3) {} > > Signed-off-by: Pierre Gondois > --- > .../Common/AmlLib/CodeGen/AmlCodeGen.c | 166 ++++++++++++++++++ > 1 file changed, 166 insertions(+) > > diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c > index faf7902c1f21..32665f7f8d8f 100644 > --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c > +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c > @@ -971,3 +971,169 @@ error_handler1: > > return Status; > } > + > +/** AML code generation for a Method object node. > + > + AmlCodeGenMethod ("MET0", 1, TRUE, 3, ParentNode, NewObjectNode) is > + equivalent of the following ASL code: > + Method(MET0, 1, Serialized, 3) {} > + > + The ASL parameters "ReturnType" and "ParameterTypes" are not asked > + in this function. They are optional parameters in ASL. > + > + @param [in] NameString The new Method's name. > + Must be a NULL-terminated ASL NameString > + e.g.: "MET0", "_SB.MET0", etc. > + The input string is copied. > + @param [in] NumArgs Number of arguments. > + Must be 0 <= NumArgs <= 6. > + @param [in] IsSerialized TRUE is equivalent to Serialized. > + FALSE is equivalent to NotSerialized. > + Default is NotSerialized in ASL spec. > + @param [in] SyncLevel Synchronization level for the method. > + Must be 0 <= SyncLevel <= 15. > + Default is 0 in ASL. > + @param [in] ParentNode If provided, set ParentNode as the parent > + of the node created. > + @param [out] NewObjectNode If success, contains the created node. > + > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER Invalid parameter. > + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. > +**/ > +STATIC > +EFI_STATUS > +EFIAPI > +AmlCodeGenMethod ( > + IN CONST CHAR8 * NameString, > + IN UINT8 NumArgs, > + IN BOOLEAN IsSerialized, > + IN UINT8 SyncLevel, > + IN AML_NODE_HEADER * ParentNode, OPTIONAL > + OUT AML_OBJECT_NODE ** NewObjectNode OPTIONAL > + ) > +{ > + EFI_STATUS Status; > + UINT32 PkgLen; > + UINT8 Flags; > + AML_OBJECT_NODE * ObjectNode; > + AML_DATA_NODE * DataNode; > + CHAR8 * AmlNameString; > + UINT32 AmlNameStringSize; > + > + if ((NameString == NULL) || > + (NumArgs > 6) || > + (SyncLevel > 15) || > + ((ParentNode == NULL) && (NewObjectNode == NULL))) { > + ASSERT (0); > + return EFI_INVALID_PARAMETER; > + } > + > + ObjectNode = NULL; > + DataNode = NULL; > + > + Status = ConvertAslNameToAmlName (NameString, &AmlNameString); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + return Status; > + } > + > + Status = AmlGetNameStringSize (AmlNameString, &AmlNameStringSize); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler1; > + } > + > + // Compute the size to write in the PkgLen. > + // Add 1 byte (ByteData) for MethodFlags. [SAMI] Is it possible to add description of the encoding for MethodOp, please? Also it will help if some comments are added describing each encoding step using a numberd list. > + Status = AmlComputePkgLength (AmlNameStringSize + 1, &PkgLen); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler1; > + } > + > + Status = AmlCreateObjectNode ( > + AmlGetByteEncodingByOpCode (AML_METHOD_OP, 0), > + PkgLen, > + &ObjectNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler1; > + } > + > + Status = AmlCreateDataNode ( > + EAmlNodeDataTypeNameString, > + (UINT8*)AmlNameString, > + AmlNameStringSize, > + &DataNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler2; > + } > + > + Status = AmlSetFixedArgument ( > + ObjectNode, > + EAmlParseIndexTerm0, > + (AML_NODE_HEADER*)DataNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler2; > + } > + > + DataNode = NULL; > + > + Flags = NumArgs | > + (IsSerialized ? BIT3 : 0) | > + (SyncLevel << 4); > + > + Status = AmlCreateDataNode (EAmlNodeDataTypeUInt, &Flags, 1, &DataNode); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler2; > + } > + > + Status = AmlSetFixedArgument ( > + ObjectNode, > + EAmlParseIndexTerm1, > + (AML_NODE_HEADER*)DataNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler2; > + } > + > + // Data node is attached so set the pointer to > + // NULL to ensure correct error handling. > + DataNode = NULL; > + > + Status = LinkNode ( > + ObjectNode, > + ParentNode, > + NewObjectNode > + ); > + if (EFI_ERROR (Status)) { > + ASSERT (0); > + goto error_handler2; > + } > + > + // Free AmlNameString before returning as it is copied > + // in the call to AmlCreateDataNode(). [SAMI] You could mention the encoding step here. > + goto error_handler1; > + > +error_handler2: > + if (ObjectNode != NULL) { > + AmlDeleteTree ((AML_NODE_HEADER*)ObjectNode); > + } > + if (DataNode != NULL) { > + AmlDeleteTree ((AML_NODE_HEADER*)DataNode); > + } > + > +error_handler1: > + if (AmlNameString != NULL) { > + FreePool (AmlNameString); > + } > + return Status; > +}