From nobody Mon Feb 9 12:11:27 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112286+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1702291069033954.2955599991132; Mon, 11 Dec 2023 02:37:49 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=mFgVCJ98QJPJZP+RTTUyX9Rr34V+UfWuj3FU5Gxb4dQ=; 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=1702291068; v=1; b=JFtYIIzhxrgOf0x0XgGF64b61K5hKW4kgjPK7yvGMZDHnmsYbcTHMUZa4t/8e99jIyXKOFPP mlv7PhTDlgR9pcNjNl9afSJYkOEaTJouSH/2uh8XJpux/0S24sjlwku9DhS7Yy+sCgICAcIPYns uuT8uf7VItGkFBgMef16citM= X-Received: by 127.0.0.2 with SMTP id TMqTYY1788612xz1f7rJTxLO; Mon, 11 Dec 2023 02:37:48 -0800 X-Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.71]) by mx.groups.io with SMTP id smtpd.web11.5565.1702291067897939080 for ; Mon, 11 Dec 2023 02:37:48 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mc8vDhRLBWLMXcNlzRSeZ3rkugQ+JFYONCrDrSBkps6f1NxG/NBHBlG9hfTvNSNAXy40LmxBD3sn3fwl/2vp0xVDJn/t+AU5YbWx0vmTIikJAhT6kTsgMmG7fZZ5wp0VrbzV3w2kiJ93kVn0NHgbcUiI3aAsqU752gU6reSXBzqXnjIDQ8rnnLjHIqWT35z32B/LHlfDZvZw4id6FKUbYfB25l1ZnK2yJ01Hzu2Yjz/H9SNL5Uje9WgHeELY9rotVN3iiB4iZpkJR2hPPubs6uHrsCZBcqJENEB7bHOzOxf1qaVAl+NEjLg/xn7uvHBltEgC7ttigQ/UFgaNZE4Tig== 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=4/S/aGnXxaJcojXQNWQP0SCxpl4v+oQOdLsMKZU44po=; b=l+Gl40wFShoTbTftOJpKx1grcY+pagPcJtWEI/I8e6rVMbufBMiJiIlQ8T++1h8ax7Dt8Y+AbG1dSP6ubJAu7uuHGG+5TG6+51w0icxkqMHU4AdF+ofDUWWWFOqciSNClvX7j7yyfTxTXEMCmlUVYuob8YgrXjbR3AhPddAgb8RQsp/Q27DONpNTU0qW0PXBrvjWYQjd6J5DHcu+08hmIm31vlj8VYm47AhFpcOUoP3NSV47btJVRPPL6iKHBwQkukKWY+fCxIZ63AaB0tpwR/2pvM2eMNWvyTQE1W0LfCIEYsg0fCTQIgoX2DSafZQSsWGhnspxSXBlDF9NFIA+pg== 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 BL1PR13CA0188.namprd13.prod.outlook.com (2603:10b6:208:2be::13) by CH2PR12MB4874.namprd12.prod.outlook.com (2603:10b6:610:64::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.32; Mon, 11 Dec 2023 10:37:44 +0000 X-Received: from BL6PEPF0001AB54.namprd02.prod.outlook.com (2603:10b6:208:2be:cafe::ed) by BL1PR13CA0188.outlook.office365.com (2603:10b6:208:2be::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.21 via Frontend Transport; Mon, 11 Dec 2023 10:37:44 +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 (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+112286+1787277+3901457@groups.io; helo=mail02.groups.io; 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 BL6PEPF0001AB54.mail.protection.outlook.com (10.167.241.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7091.18 via Frontend Transport; Mon, 11 Dec 2023 10:37:44 +0000 X-Received: from SATLEXMB03.amd.com (10.181.40.144) 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; Mon, 11 Dec 2023 04:37:44 -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; Mon, 11 Dec 2023 04:37:43 -0600 From: "Abdul Lateef Attar via groups.io" To: CC: Abdul Lateef Attar , Pierre Gondois , Sami Mujawar Subject: [edk2-devel] [PATCH v3 4/5] DynamicTablesPkg: Adds API to generate a method with ArgN Date: Mon, 11 Dec 2023 16:07:32 +0530 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB54:EE_|CH2PR12MB4874:EE_ X-MS-Office365-Filtering-Correlation-Id: c5050529-5feb-4c7e-40bc-08dbfa3535d0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: h3kSdFxYha8x4Nwy/7UQ9yjrryJp5NEbcY5JUFdQfHc7qxsnAHmwS/OslTo8QKaAAAm7t+1Ww5vS4iXNAWg+fktqkGvaLXzk1DO5CGhbEs1lI5ic2O7oMu7XRUhcVT+TOjNR6mCwr+SR38fR0Mhj5g1RyPnyKBAvjILUyT88Fvid3/EWZoTqr/dbZ+gryPMYTVm4UQ9LvNlr8zWF7LzFCSzbrKGl6Va1i7FT70VKN42n+d1qsQRj/QITWDizkdZV8Yev3Z0dufbYgWVDg3URtFe1Yz1Na7FcR8dLfBBbH4WtgHh4W0Ku3VhdEnS9RPeiKh2Es7fU8FCDIRbKLQ74f/FW5anKWhkfL7HeJk3XG6OC6O+03A5mpoN4Cp4JssZk/oA1YQ2+kCcZC6aerpHzO6T8ugVCmx8pNL/Uoa4dX2l4ifasgH9DEd4l3/QFAmWVBwFYh+3hq8fZHvf7eQj25/MOjnR9u2NSmKVh+HyJ48LP1uP7kA4DjCXYSza7RwJg7hIhwlK7MR+FjjWwrnyMUJq4Z+a9P65PDyqzqfZh0B0IFLUJvJbUR92oKloZ3Bmb+g9uo9RHHFgLeXBIC8k9zQ2vi3Wo9AwxOAAB4UTvdejLbNu2l7q98d/sG2pkP3av4ASPdNJbGq2QiQOlQi4Y/Yji9569IQgArhjqAfrEjVFqb+AhRdJVfUvsRjXe3ON+hLnkH4nEyfX3MYv6SzpsvVrDSIfkOXx+eaAP+E8PirdIUEm8xN6aiFgsQQS6OZt87CmkYpdiUF+w46I5LBylNQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Dec 2023 10:37:44.5795 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c5050529-5feb-4c7e-40bc-08dbfa3535d0 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: BL6PEPF0001AB54.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4874 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: wUSwBKoWv7iWLoyW3ptbGj3hx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1702291071306100004 Content-Type: text/plain; charset="utf-8" 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 | 152 ++++++++++++++++++ 2 files changed, 198 insertions(+) diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTabl= esPkg/Include/Library/AmlLib/AmlLib.h index eb8740692f..5ab205b5f0 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 ArgN arguments. + + 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..b05fa6d109 100644 --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c @@ -3849,3 +3849,155 @@ exit_handler: =20 return Status; } + +/** AML code generation for a method invoking another method + with ArgN arguments. + + 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, + NULL, + &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); + goto exit_handler; + } + + Status =3D AmlGetNameStringSize (AmlNameString, &AmlNameStringSize); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + FreePool (AmlNameString); + goto exit_handler; + } + + Status =3D AmlCreateDataNode ( + EAmlNodeDataTypeNameString, + (UINT8 *)AmlNameString, + AmlNameStringSize, + &DataNode + ); + FreePool (AmlNameString); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto exit_handler; + } + + 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; + } + + Status =3D LinkNode ( + MethodNode, + ParentNode, + NewObjectNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto exit_handler; + } + + 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 (#112286): https://edk2.groups.io/g/devel/message/112286 Mute This Topic: https://groups.io/mt/103106350/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-