From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 981E8D81163 for ; Thu, 7 Dec 2023 15:53:23 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=izTiOSFmKRLK+siqp3LdXHcuIXY+nnr3VpLQCXvJ3mk=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:Received-SPF:From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20140610; t=1701964402; v=1; b=fMuLTh65bCPYZeLmvy+xTisglgrureZasJQyr8e/La/UYM43qibo4rErnM8KmIyQYQCDfCYE CcA6YNhU9YtIzOos3O4B6ZJB6rxqMhgjOxS3H+EpgyXS37ymIqZmDCxHUWFKQf+7oILA0kS1uGr C2un9nKJXIKZEhyKlfeQ3g1A= X-Received: by 127.0.0.2 with SMTP id JxfcYY7687511xNlxcb8Sfxu; Thu, 07 Dec 2023 07:53:22 -0800 X-Received: from NAM02-DM3-obe.outbound.protection.outlook.com (NAM02-DM3-obe.outbound.protection.outlook.com [40.107.95.72]) by mx.groups.io with SMTP id smtpd.web11.87526.1701964401473968704 for ; Thu, 07 Dec 2023 07:53:21 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hpqtqBOMu2lxhf1JnJq2TrKzJ4elMwYG9Ywgz4xdPJbMuMfPffQqzgj/y/WX/XAQEDigckWowZmFhqfdGTwvPk8bdLQlrpZbYSblNboxkz4LZvhvk5CybOy2wijziNyounE3RQz+em1VinLN9DTexxQqxvfnSAF6WTs1XfJXo6DRM7OlaY3Z0mjMO7Lqo5839kUcX9RBqNzi/16oYIS9nK0XB/VwPHjRNylUuynfrkxsyAQEBgLJgarlel2zAhwRDtRzAz9yMmO6HFqu2rivBJEMyLDpa7CmsWrir0NJrUJtBqHJndJNIXiNTo3oTJqyc2/c/HdZXEFsxkbUxhOxlg== 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=ERiGNBAyR6VYO5w0hs9/2zCqCk9XhFXhDbRFxlQLTk0=; b=j18DFIL0ctPQj72HBu4KD2WyJD2/NFQgVgLY2fjivu2duG4LJ21hte4Yt0MtX9n7irfDZhwV6qae77l/iaNUpGRHDzdw0rsn9NMMjXyqkmruT7AzfdM5Le67gdzEdjZfiDB1SflXAUCEbweD4Hl7HYPg16cIDIxW6A/JZvh7KMHvFBPlQ5G6uXOT8K6d1RsxAgSuaHLp1jaB+CLjWtPvI75O2UBtzShh1I6MBoFzbkM1gpIeu7Ulr9X8HlfMFQha1baRDt/qnF9q/DtOOX5eGPIfHHAEtLo8Qo9w9cVzDbRiBmoadPRHgCWjox/JlT0MvYEWSW7MWzXrf9jS6DtWtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) X-Received: from DS7PR05CA0095.namprd05.prod.outlook.com (2603:10b6:8:56::29) by SN7PR12MB6959.namprd12.prod.outlook.com (2603:10b6:806:261::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.38; Thu, 7 Dec 2023 15:53:19 +0000 X-Received: from DS2PEPF0000343A.namprd02.prod.outlook.com (2603:10b6:8:56:cafe::90) by DS7PR05CA0095.outlook.office365.com (2603:10b6:8:56::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.25 via Frontend Transport; Thu, 7 Dec 2023 15:53:19 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C X-Received: from SATLEXMB04.amd.com (165.204.84.17) by DS2PEPF0000343A.mail.protection.outlook.com (10.167.18.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7068.20 via Frontend Transport; Thu, 7 Dec 2023 15:53:19 +0000 X-Received: from SATLEXMB05.amd.com (10.181.40.146) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Thu, 7 Dec 2023 09:53:18 -0600 X-Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB05.amd.com (10.181.40.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Thu, 7 Dec 2023 09:53:18 -0600 X-Received: from BLR-LAB-SFW01.amd.com (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.34 via Frontend Transport; Thu, 7 Dec 2023 09:53:17 -0600 From: "Abdul Lateef Attar via groups.io" To: CC: Abdul Lateef Attar , Pierre Gondois , Sami Mujawar Subject: [edk2-devel] [PATCH v2 4/4] DynamicTablesPkg: Adds API to generate a method with ArgN Date: Thu, 7 Dec 2023 21:23:06 +0530 Message-ID: <39aaff100f2f86f2c5585989c0746fe0c0beba03.1701963835.git.AbdulLateef.Attar@amd.com> In-Reply-To: References: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PEPF0000343A:EE_|SN7PR12MB6959:EE_ X-MS-Office365-Filtering-Correlation-Id: fdff07ac-8d24-481b-8e6d-08dbf73ca22f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: vNWssW9FoX9gOp6Zx1aXHadBID9SxtOBVnQGIbAztEfq7U4Mh4IkkXBMelW6c9US/hGqi5S7+sPGG/7XpN9xbBOaCLkIVrb8WhbRCDFrRK2eFJMA+dYlpUTK8hFhyRb4xZOJcwcMdVibufeoENlmmREjY525HZ1H33U/6JtjlKfVWkCywXCwOcqY55V13bUpflOxSMdLPLeBHr0NNqobHbYbUmgIK+RY8Mk6MdSFqyY+6jUgwBvMcRQqzQ0DHZob8zS7bSge/07z3YF2ehtK7MIpEY/deatVT88M4NNqR66yN/v01TxnxqXud1BfCJp1Io11V9CNKL9DnHWNxIMHv4WnWf3va7xNsxgahQuA0dscKMRt9FURWFGEPsE2zU/RT/KKr2uwijiR85BY71KWp/FAev2bWiLFuY4L5LLfHIqW1Q/YYJeTp1qa4qYRJ0pFXV3pA9tS58mz+tpsa1hBcCRsA1T88yzkmgDqjkV6nP3Rb+wwoeYFs2Pr3otl0kRx0pRNaxDYB563GpErGZZMOkPHBTSBigDW3now1VI9Re3Mu6adxeiIEu0RCPyS9SjlZNZYbtsX8fv7yAoVyAwYzHrHOWmSkdsQ+hoU8pSy5NmNse+RMoY7CoSlCiU3NcWrKarSqn12geXYl/GqI9XaVaMhLBp811Wi5GiGJ9J04PzAizeZ6ZYLC884ayaxr6n28piExalORhr1cGkBl1DMkyM98/3M7tOyZIvR6WL/OuT5MB3iBHfFEoONSn3xqDgd6JvZGsIVxIfS8li1OEqk6g== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2023 15:53:19.3399 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fdff07ac-8d24-481b-8e6d-08dbf73ca22f X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS2PEPF0000343A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB6959 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,AbdulLateef.Attar@amd.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 9LhizKj043hI7rPvtkW5Yszax7686176AA= Content-Transfer-Encoding: quoted-printable Content-Type: text/plain X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=fMuLTh65; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=none; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") From: Abdul Lateef Attar Adds an API to generate a method which invokes another method with arguments. This help to generate dynamic code to invoke another method(might be in static ASL file) with build-in argument parameters. e.g: Method (MET0, 6, Serialized) { \_SB.MET1 (Arg0, Arg1, Arg2, Arg3, Arg4, Arg5) } Cc: Pierre Gondois Cc: Sami Mujawar Signed-off-by: Abdul Lateef Attar --- .../Include/Library/AmlLib/AmlLib.h | 46 ++++++ .../Common/AmlLib/CodeGen/AmlCodeGen.c | 142 ++++++++++++++++++ 2 files changed, 188 insertions(+) diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTabl= esPkg/Include/Library/AmlLib/AmlLib.h index eb8740692f..991a33fcf6 100644 --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h @@ -1693,4 +1693,50 @@ AmlAddNameStringToNamedPackage ( IN AML_OBJECT_NODE_HANDLE NamedNode ); =20 +/** AML code generation for a method invoking another method + with grguments. + + AmlCodeGenMethodInvokeMethodArgN ( + "MET0", "MET1", 4, TRUE, 3, ParentNode, NewObjectNode + ); + is equivalent of the following ASL code: + Method(MET0, 4, Serialized, 3) { + MET1 (Arg0, Arg1, Arg2, Arg3) + } + + @param [in] MethodNameString The new Method's name. + Must be a NULL-terminated ASL NameSt= ring + e.g.: "MET0", "_SB.MET0", etc. + The input string is copied. + @param [in] InvokeMethodNameString The called/invoked method's name. + Must be a NULL-terminated ASL NameSt= ring + e.g.: "MET1", "_SB.MET1", etc. + The input string is copied. + @param [in] NumArgs Number of arguments. + Must be 0 <=3D NumArgs <=3D 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 <=3D SyncLevel <=3D 15. + Default is 0 in ASL. + @param [in] ParentNode If provided, set ParentNode as the p= arent + of the node created. + @param [out] NewObjectNode If success, contains the created nod= e. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. +**/ +EFI_STATUS +EFIAPI +AmlCodeGenMethodInvokeMethodArgN ( + IN CONST CHAR8 *MethodNameString, + IN CONST CHAR8 *InvokeMethodNameString, + IN UINT8 NumArgs, + IN BOOLEAN IsSerialized, + IN UINT8 SyncLevel, + IN AML_NODE_HANDLE ParentNode OPTIONAL, + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL + ); + #endif // AML_LIB_H_ diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/= DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c index a6db34fb97..89a4b48ec0 100644 --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c @@ -3849,3 +3849,145 @@ exit_handler: =20 return Status; } + +/** AML code generation for a method invoking another method + with grguments. + + AmlCodeGenMethodInvokeMethodArgN ( + "MET0", "MET1", 4, TRUE, 3, ParentNode, NewObjectNode + ); + is equivalent of the following ASL code: + Method(MET0, 4, Serialized, 3) { + MET1 (Arg0, Arg1, Arg2, Arg3) + } + + @param [in] MethodNameString The new Method's name. + Must be a NULL-terminated ASL NameSt= ring + e.g.: "MET0", "_SB.MET0", etc. + The input string is copied. + @param [in] InvokeMethodNameString The called/invoked method's name. + Must be a NULL-terminated ASL NameSt= ring + e.g.: "MET1", "_SB.MET1", etc. + The input string is copied. + @param [in] NumArgs Number of arguments. + Must be 0 <=3D NumArgs <=3D 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 <=3D SyncLevel <=3D 15. + Default is 0 in ASL. + @param [in] ParentNode If provided, set ParentNode as the p= arent + of the node created. + @param [out] NewObjectNode If success, contains the created nod= e. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. +**/ +EFI_STATUS +EFIAPI +AmlCodeGenMethodInvokeMethodArgN ( + IN CONST CHAR8 *MethodNameString, + IN CONST CHAR8 *InvokeMethodNameString, + IN UINT8 NumArgs, + IN BOOLEAN IsSerialized, + IN UINT8 SyncLevel, + IN AML_NODE_HANDLE ParentNode OPTIONAL, + OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL + ) +{ + EFI_STATUS Status; + AML_OBJECT_NODE_HANDLE MethodNode; + AML_DATA_NODE *DataNode; + AML_OBJECT_NODE *ObjectNode; + CHAR8 *AmlNameString; + UINT32 AmlNameStringSize; + UINT8 ArgnCount; + + if ((MethodNameString =3D=3D NULL) || (InvokeMethodNameString =3D=3D NUL= L)) { + return EFI_INVALID_PARAMETER; + } + + // Create a Method named MethodNameString + Status =3D AmlCodeGenMethod ( + MethodNameString, + NumArgs, + IsSerialized, + SyncLevel, + ParentNode, + &MethodNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + + DataNode =3D NULL; + Status =3D ConvertAslNameToAmlName (InvokeMethodNameString, &AmlNameSt= ring); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + + Status =3D AmlGetNameStringSize (AmlNameString, &AmlNameStringSize); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + FreePool (AmlNameString); + return Status; + } + + Status =3D AmlCreateDataNode ( + EAmlNodeDataTypeNameString, + (UINT8 *)AmlNameString, + AmlNameStringSize, + &DataNode + ); + FreePool (AmlNameString); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + + Status =3D AmlVarListAddTail ( + (AML_NODE_HEADER *)MethodNode, + (AML_NODE_HEADER *)DataNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto exit_handler; + } + + DataNode =3D NULL; + + for (ArgnCount =3D 0; ArgnCount < NumArgs; ArgnCount++) { + Status =3D AmlCreateObjectNode ( + AmlGetByteEncodingByOpCode (AML_ARG0 + ArgnCount, 0), + 0, + &ObjectNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto exit_handler; + } + + Status =3D AmlVarListAddTail ( + (AML_NODE_HEADER *)MethodNode, + (AML_NODE_HEADER *)ObjectNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto exit_handler; + } + + ObjectNode =3D NULL; + } + + return Status; + +exit_handler: + if (MethodNode !=3D NULL) { + AmlDeleteTree ((AML_NODE_HANDLE)MethodNode); + } + + return Status; +} --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112200): https://edk2.groups.io/g/devel/message/112200 Mute This Topic: https://groups.io/mt/103036577/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-