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 E5530AC1A9A for ; Tue, 25 Jul 2023 23:29:48 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=qDG+XxMGxpf6mQbUjqAKjlHrEGaT7FvRbC24d2nzSf0=; c=relaxed/simple; d=groups.io; h=X-Received:X-Received:ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:X-Received:X-Received:Message-ID:Date:User-Agent:Subject:To:CC:References:From:In-Reply-To:X-ClientProxiedBy:MIME-Version:X-MS-PublicTrafficType:X-MS-TrafficTypeDiagnostic:X-MS-Office365-Filtering-Correlation-Id:X-MS-Exchange-SenderADCheck:X-MS-Exchange-AntiSpam-Relay:X-Microsoft-Antispam-Message-Info:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-OriginatorOrg:X-MS-Exchange-CrossTenant-Network-Message-Id:X-MS-Exchange-CrossTenant-AuthSource:X-MS-Exchange-CrossTenant-AuthAs:X-MS-Exchange-CrossTenant-OriginalArrivalTime:X-MS-Exchange-CrossTenant-FromEntityHeader:X-MS-Exchange-CrossTenant-Id:X-MS-Exchange-CrossTenant-MailboxType:X-MS-Exchange-CrossTenant-UserPrincipalName:X-MS-Exchange-Transport-CrossTenantHeadersStamped:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:X-Gm-Message-State:Cont ent-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1690327787; v=1; b=nrUOM09rUtrNZPO+/ZnZancrcLsiZAzSyvD+4bno4piiNhd3ph7+pn+2zUJeEZwxqK8iTZHm Xc6DDJn4MMhlyd9YSWISyVOl/VSE0v12CCQbw5Adujot8uUpYeWVRLcm1DRx9EsZgTbYSk+tftB HdxGiKiKkXxo6G5OdjW9oi/k= X-Received: by 127.0.0.2 with SMTP id qp05YY7687511xKtBlIpDys6; Tue, 25 Jul 2023 16:29:47 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.75]) by mx.groups.io with SMTP id smtpd.web11.4090.1690327786882348193 for ; Tue, 25 Jul 2023 16:29:47 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g5zr52AGTroqbyhRsz9AYJC+H7dtiWGJR1WLUgzBUBiRnV5TZXu2n3qapXjYhLY5dwAlbKTfn5lLLzJd7Kk5i6a8qVTsb/Mi56kDkfG3fmB79jumt93gmf4S8sjedj0G4zBKDiALGP2JWxkA5v19edSWyIqhwwVNrI92A83Ei+MscROTGtNgjnWyA9zcqWu8DPiR19VvWPjRSR40tre1CKJ1KiRFKK0fMtcIfvW/wtComVqEB7sm6tbVJGq10KcsO0oihAhFdvUp8V1SLKKSxvH06PO9aLMFL2ae7kZlH/LndYneMSQhNoHSGizHaik0TI0ZlNwsxAyD1yvFKmCMwQ== 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=NzDY5TJk25MGSJh/3lejH10W1qLrsCfd6qOBBP75wZU=; b=nhZP1TbFDwxdSQmZnf3IfO1ItwSZCSHVR+gAvhnjqy0K1jKZr7G3ijrzZ0R9zPDVpM5WqutXNVqeKjsBm98K3PIvUFJaEZMMf2TiP0n0UcESohpAVbGOKwr2qquILFkDrGfkYsRPuufUCMGh+mjA9kQRvHfK5CBRp3TzseZQeDeaOkEFoz4LdukDZklt/KNZBXdfyzCXE2f/AruOYp1uHTq9GoH4q1WiO/STL1u0HKtRboNhcZ2uBLoCzZKoVvOrcPJ8xRQBSI/hmsKYoYoJrAIX/aq9ysfgh8rKQSvLbstR8151HS+HHbwlQ4cf0Zg8X52/yDX8iuIVXs7JIYeShw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none X-Received: from CY5PR12MB6297.namprd12.prod.outlook.com (2603:10b6:930:22::19) by DS7PR12MB5839.namprd12.prod.outlook.com (2603:10b6:8:7a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.32; Tue, 25 Jul 2023 23:29:42 +0000 X-Received: from CY5PR12MB6297.namprd12.prod.outlook.com ([fe80::3552:9160:272e:9636]) by CY5PR12MB6297.namprd12.prod.outlook.com ([fe80::3552:9160:272e:9636%7]) with mapi id 15.20.6609.032; Tue, 25 Jul 2023 23:29:42 +0000 Message-ID: <5630d70b-53c5-6fae-fd59-a82f78e07267@nvidia.com> Date: Tue, 25 Jul 2023 17:29:37 -0600 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [edk2-devel] [PATCH v2 2/4] DynamicTablesPkg: Add SMBIOS table dispatcher To: Sami Mujawar , "devel@edk2.groups.io" CC: Alexei Fedorov , Pierre Gondois , "abner.chang@amd.com" , "Jeff Brasen (jbrasen@nvidia.com)" , "ashishsingha@nvidia.com" , "nramirez@nvidia.com" , "wwatson@nvidia.com" , Matteo Carlini , Akanksha Jain , Sibel.Allinson@arm.com, Samer El-Haj-Mahmoud , Jose Marinho , nd References: <20230308081626.33124-1-sami.mujawar@arm.com> <20230308081626.33124-3-sami.mujawar@arm.com> <1bf32de1-2aa2-c680-4760-bffa0da59adc@nvidia.com> <8FC92511-1E75-4C4B-91C7-9D252728C69E@arm.com> <59d00c3a-0ed8-f73a-68e0-70eb304a7d25@nvidia.com> <9bfe354b-914d-4534-1b8e-5d32411b5354@arm.com> <143a7bee-82dd-53b3-c0d5-58da8129605e@nvidia.com> <834a869f-35e2-08cf-3e93-820e2ef62edb@arm.com> From: "Girish Mahadevan via groups.io" In-Reply-To: <834a869f-35e2-08cf-3e93-820e2ef62edb@arm.com> X-ClientProxiedBy: BL0PR02CA0037.namprd02.prod.outlook.com (2603:10b6:207:3d::14) To CY5PR12MB6297.namprd12.prod.outlook.com (2603:10b6:930:22::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR12MB6297:EE_|DS7PR12MB5839:EE_ X-MS-Office365-Filtering-Correlation-Id: 53abd562-505e-455e-4bc3-08db8d6705d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: Yyh/XFdBTynMterVyuKTKo56CwVFDQMdkSuVhdWStCN/mWRij2h6BNHz5zgtO9qhAJYL7zGofAgKsR8us3yKf/o3/Es3zQi4vaEmi909LOl56lCTJtrWZ9Y/NuDYlF/P473yjyjYnXF922JuPaAdmzjhMVgY8MIxgjJ+6Q+Ty+j9lIB5vJbRBr4jlUs3WSOKUA6C3D4JS0uWu60v5Q5fiC0lThbstaSARpS2c3yoHopj56dNztiu2eb29yGhGWYPEGRe/NN1XMShf2Xw6VOGR0Zx6v+pj7hAHsm0MYF3Xi8lVqDqCYNFATqAi/8YH7O7bWXfYd1Lpoatd0qk6pVtqn50Jx/dFYABmnqcTxbWrAlcply0YABzsgXd/EFgi09EIIN/Cc7XArbTfW4yWC5CU2k0BfwH4WCe2dAP3qVe2Mc2bPr6Xq1I772nqqntzFj0Ns8V20VIhzYlg5PwvYyWek2WhxEtES8TS1/wEwUVCxT40oQW3bMUtuiSiZ9WAkIp7hagawo+eQuIODkPfarOvbrnIf2dkCCCUhzKPzJRJh7SHB30ew/hB/LWd2YIjwCLCD0ccaCYMQjvQbn/MoVAwkVkRK7FFjWhjiDBmIzkze5r5lqS/v+2R67N3/5eJmi1Gx8Y/hCbbIoTVEVmMgsTzQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?12hTA0yjyHksuBmNcLbV2UScu004R9BtgHjzCmT81AtR82U88QO4jgNaClAo?= =?us-ascii?Q?ASVdcaGd/03I/hVKohn5w7tOhWz55WKY9+uvnn5uiXydtQ4sKGLMcUcdU4nb?= =?us-ascii?Q?pnC0Wm/3ZekHBh8rUL4R5yP7kgnqzvVU2q5NYT765fQLw59DGfXZMfpICxbt?= =?us-ascii?Q?bdNEvVCGmYJmIFtQEmFQPsfIRitisuwAH+zsnKelxFAonOXOjGDXpDANnAbo?= =?us-ascii?Q?alvWaSRLhqgpuonki0AKzwkOeK7dO1LfHq3dBZNnQsdBotZU5Hn8Sbpk9nFo?= =?us-ascii?Q?4LTWAfXoHD1mHqfE+lY2neipDbt9+YSBdMQ7CzwJu3u398iHDJr2G70eN/ts?= =?us-ascii?Q?xoAoVNhk/p5NUJslMEHF01Jh1hikrcjiV/CdC0EvzQ2JQ3IoQQRD8Q4zTy0H?= =?us-ascii?Q?ImZh7b5G+Mq52m2FsVZQ7zRKK76lzKKFmbS6wZipHj+id6N1IOuEz4oQ4hk9?= =?us-ascii?Q?w0ZWbOhe+tnXZWbx+HGWoB1SO9yimdfOYWytlgys0u4yOg4GRfMXWdxlWBJA?= =?us-ascii?Q?ZK3mQbsAbDqRL4WaBEX5N40a+MpVUsqozxSuQx8wPF20XP2BKqbv0jdmLxwV?= =?us-ascii?Q?X9OV7mws05FaRpsInp3ver6668spfcCdblaxDP8oqybVg1Q1IgfSrN3VpDzY?= =?us-ascii?Q?Xa8W7Y8pNvoyqS5t7E8QjbEdhaQS4EwQQZ1aC2Wycc4ouXWEnmzLfBxm0dLi?= =?us-ascii?Q?nmMWkaAiTbahJ+/FLGMak4KMcaqpdMuNiLjc7Ia3tCfv3v3JMYqMoKeoq0XD?= =?us-ascii?Q?wyaHjt+vSwfLkdJ/xJm3zj1m1ApPUTfcCV5d1k6kjPJ2AQJjk1LZN2MX45Hg?= =?us-ascii?Q?Dd/IHYEP66s8hA372LCUwVsGylOjGasdOaRw9jjlo3BF5oDCIWgddopSntVB?= =?us-ascii?Q?ARN4DObXkzQbBQ521mGbem3wVdJgohRDp90yDLu+tIBqmJ865OxgBdcfI4nm?= =?us-ascii?Q?2GRzI1d8CZxsbsp3PHy/uimjBduhxbDOZg83mex11+7A8ttmJVwdxnqneqRG?= =?us-ascii?Q?9b/3KvRkVCPtvuiLJhFeDVV2a/uqe6tRDg63nDrW4rXXmqPM/luT5ZXSJPo8?= =?us-ascii?Q?O4tAENMQJETJF2cCRKAxKdq4KeaPUs6Qrq+oSeY3F9pg6PbBD5O3D02LhPLr?= =?us-ascii?Q?tjioyLXqz2mjqqc650Ml7o1SaPRMulGql1FmmBFQPGARPpfIqYwP0DKYqY5U?= =?us-ascii?Q?FGMGpjCZEvRwILExaa1JKUu8LTxuMZsD83FQUKEv+j+5sr1VGNNaP2ZGj2zf?= =?us-ascii?Q?xTDrFMOpqXvpoHnFybI465NAm32459r9qGn80kVFJWfTB2N5oxCc6zkhBNli?= =?us-ascii?Q?Laky/OtRsYC31DPWyawUpw4EEd5UoNC1tw9Z3L0zAGwUnE4YZD+O4OaazxCx?= =?us-ascii?Q?wviVqXeby31AcoJIBr3KkOcOF+/Bo5rhsCAx/cmx8JOWfApuTtN2gQzqEwYb?= =?us-ascii?Q?t4/coLrpMZ9oxoGqhPPqsV/oHMtOqaNerpowzxquMUe0oqW+bauXywZMaP5R?= =?us-ascii?Q?Xs6/UhAFyMP3e41X+kVbUdYUV5ynRDLJ25WYKK+HkBBG1FFVLYgJWYBJaC18?= =?us-ascii?Q?gYOS3U9ffrwpU3bUv0sittgnFVA9XHv7u+tMVvic?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53abd562-505e-455e-4bc3-08db8d6705d9 X-MS-Exchange-CrossTenant-AuthSource: CY5PR12MB6297.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jul 2023 23:29:42.4695 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zYzHYdVyZAHt0tvKBkUM7zredjGdSsW5rYU54A6Gn7glZr+0cQ0BJMNYoPKP4AykxdgL1Q0YjO6TB9yprg2e0w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5839 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,gmahadevan@nvidia.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: mIz0oezg74IiBmbc0njcmeYEx7686176AA= Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=nrUOM09r; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}"); dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io Hi Sami My responses inline [GM] Best Regards Girish On 7/24/2023 11:48 AM, Sami Mujawar wrote: > External email: Use caution opening links or attachments >=20 >=20 > Hi Girish, >=20 > Thank you for taking this effort forward >=20 > Please find my response inline marked [SAMI]. >=20 > Regards, >=20 > Sami Mujawar >=20 > On 22/07/2023 12:14 am, Girish Mahadevan wrote: >> Hi Sami >> >> Your patches worked. There was just one thing I had to add to get >> compile to work. (inline with [GM]), other than that I think you can >> get this in. > [SAMI] Thanks for testing these patches. >> >> We've implemented about 18 table generators. (Types=C2=A0 0, 1, 2, 3, 8,= 9, >> 11, 13, 14, 16, 17, 19, 32, 38, 39, 41, 43, 45) >> Two more are under way (Type 4.7). > [SAMI] I would be keen to understand how the Type 4 and 7 generators > would work as I would prefer to avoid duplication of data. >> [GM] As a first pass we're setting up the generators to just blindly use=20 SMBIOS specific CM objects to setup these tables. Second pass could be to have the generators try to rely on ACPI objects=20 (PPTT) or fallback to Architecture specific libraries to figure out how=20 to populate these tables. Honestly we need to think about this a little=20 more, we'd love to swap notes. (We are in the prelim stages of these so haven't gotten very far) >> I've setup a github repo here >> https://github.com/tianocore/edk2/compare/master...gmahadevan:edk2-upstr= eam:RFC/smbios-dyntables-v2?expand=3D1 >> > [SAMI] Thanks for sharing the github branch. Please also share a github > branch when you send out your patches for review. >> [GM] Will do. >> I could send you one massive patch train (22 patches or so) or split >> it up into smaller chunks perhaps just the table generation stuff >> first and then each generator library. >> > [SAMI] I think it may be good to split the patch series to include table > generation and then 1 or 2 generators to understand the code flow. The > remaining generators can follow later. I think Type 4 and 7 would be > really interesting, but you can send what you already have. >=20 [GM] ok, I will send out a patch train for the core generator code and 2 of=20 the Generators. Best Regards Girish >> Let me know. >> >> Best Regards >> Girish >> >> >> On 3/10/2023 9:28 AM, Sami Mujawar wrote: >>> External email: Use caution opening links or attachments >>> >>> >>> Hi Girish, >>> >>> On 10/03/2023 04:23 pm, Girish Mahadevan wrote: >>>> Hi Sami >>>> >>>> Response inline.[GM] >>>> >>>> Best Regards >>>> Girish >>>> >>>> On 3/9/2023 3:41 AM, Sami Mujawar wrote: >>>>> External email: Use caution opening links or attachments >>>>> >>>>> >>>>> Hi Girish, >>>>> >>>>> Thank you for your feedback. >>>>> >>>>> Please find my response inline marked [SAMI]. >>>>> >>>>> Regards, >>>>> >>>>> Sami Mujawar >>>>> >>>>> =EF=BB=BFOn 08/03/2023, 17:41, "Girish Mahadevan" >>>> > wrote: >>>>> >>>>> >>>>> Hi Sami >>>>> >>>>> >>>>> Thanks for v2, I will apply these to my tree and test it out. >>>>> One small comment before I review/test the patch train inline >>>>> (prefixed >>>>> by [GM]) >>>>> >>>>> >>>>> Best Regards >>>>> Girish >>>>> >>>>> >>>>> On 3/8/2023 1:16 AM, Sami Mujawar wrote: >>>>>> External email: Use caution opening links or attachments >>>>>> >>>>>> >>>>>> Some SMBIOS structure/table fields have dependency on other SMBIOS >>>>>> structures/tables. These dependencies are established using handles >>>>>> pointing to the dependent tables. >>>>>> >>>>>> A SMBIOS table handle can be obtained by either installing a SMBIOS >>>>>> table or by allocating a handle, which requires complex management >>>>>> to avoid any clashes. >>>>>> >>>>>> Obtaining a SMBIOS handle by installation requires that the dependen= t >>>>>> table is installed before the parent SMBIOS table can be installed. >>>>>> Therefore, introduce a SMBIOS table dispatcher that walks the SMBIOS >>>>>> dependency list and schedules the dependent tables to be installed >>>>>> before the parent table is installed. >>>>>> >>>>>> Signed-off-by: Sami Mujawar >>>>> > >>>>>> Cc: Alexei Fedorov >>>>> > >>>>>> Cc: Pierre Gondois >>>>> > >>>>>> Cc: Girish Mahadevan >>>>> > >>>>>> Cc: Jeff Brasen > >>>>>> Cc: Ashish Singhal >>>>> > >>>>>> Cc: Nick Ramirez > >>>>>> Cc: William Watson > >>>>>> Cc: Abner Chang > >>>>>> Cc: Samer El-Haj-Mahmoud >>>>> > >>>>>> Cc: Jose Marinho = > >>>>>> --- >>>>>> >>>>>> Notes: >>>>>> v2: >>>>>> - Update dispatcher state machine to remove StUnknown. [SAMI] >>>>>> - Move extern function to header file and move debug [ABNER] >>>>>> code together. >>>>>> - Updated code based on review feedback to move extern [SAMI] >>>>>> function to header file and also moved the debug code >>>>>> together. >>>>>> Ref: >>>>>> https://edk2.groups.io/g/devel/message/95341 >>>>>> >>>>>> >>>>>> >>>>>> DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerD= xe.inf >>>>>> >>>>>> | 4 +- >>>>>> DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatche= r.c >>>>>> >>>>>> | 282 ++++++++++++++++++++ >>>>>> DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatche= r.h >>>>>> >>>>>> | 159 +++++++++++ >>>>>> 3 files changed, 444 insertions(+), 1 deletion(-) >>>>>> >>>>>> diff --git >>>>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManage= rDxe.inf >>>>>> >>>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManage= rDxe.inf >>>>>> >>>>>> >>>>>> index >>>>>> ad8b3d037c169ca848b5ea84fd1086b83f37876f..b09272d883c6f4f05eb03dcdab= 3efeda92b2fbb6 >>>>>> >>>>>> 100644 >>>>>> --- >>>>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManage= rDxe.inf >>>>>> >>>>>> +++ >>>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManage= rDxe.inf >>>>>> >>>>>> @@ -1,7 +1,7 @@ >>>>>> ## @file >>>>>> # Module that drives the table generation and installation process. >>>>>> # >>>>>> -# Copyright (c) 2017 - 2019, ARM Limited. All rights reserved. >>>>>> +# Copyright (c) 2017 - 2022, Arm Limited. All rights reserved. >>>>>> # >>>>>> # SPDX-License-Identifier: BSD-2-Clause-Patent >>>>>> ## >>>>>> @@ -22,6 +22,8 @@ [Defines] >>>>>> >>>>>> [Sources] >>>>>> DynamicTableManagerDxe.c >>>>>> + SmbiosTableDispatcher.c >>>>>> + SmbiosTableDispatcher.h >>>>>> >>>>>> [Packages] >>>>>> MdePkg/MdePkg.dec >>>>>> diff --git >>>>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatc= her.c >>>>>> >>>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatc= her.c >>>>>> >>>>>> >>>>>> new file mode 100644 >>>>>> index >>>>>> 0000000000000000000000000000000000000000..0e728538d9f6eb0b164fea3a16= 0d3233db833f8d >>>>>> >>>>>> --- /dev/null >>>>>> +++ >>>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatc= her.c >>>>>> >>>>>> @@ -0,0 +1,282 @@ >>>>>> +/** @file >>>>>> + Dynamic Smbios Table Dispatcher >>>>>> + >> [GM] >> Not sure if it was an oversight, but you missed adding the extern to >> BuildAndInstallSmbiosTable > [SAMI] Yes, you are correct. I had tested my changes only using > simulation so may have removed the stub function when posting the patches= . >> >>>>>> + Copyright (c) 2022 - 2023, Arm Limited. All rights reserved. >>>>>> + >>>>>> + SPDX-License-Identifier: BSD-2-Clause-Patent >>>>>> + >>>>>> +**/ >>>>>> +#include >>>>>> +#include >>>>>> + >>>>>> +#include >>>>>> +#include >>>>>> + >>>>>> +/** >>>>>> + The SMBIOS dispatcher state table. >>>>>> + >>>>>> + The SMBIOS dispatcher state table is used to establish the >>>>>> dependency >>>>>> + order in which the SMBIOS tables are installed. This allows the >>>>>> SMBIOS >>>>>> + dispatcher to dispatch the dependent tables for installation >>>>>> before the >>>>>> + parent table is installed. >>>>>> + The SMBIOS_TABLE_DISPATCHER.Dependency[] field is used to >>>>>> establish the >>>>>> + dependency list. >>>>>> + Elements in the Dependency list are resolved by increasing index. >>>>>> However, >>>>>> + all orders are equivalent as: >>>>>> + - the Parent SMBIOS table will only be installed once all >>>>>> dependencies >>>>>> + have been satisfied. >>>>>> + - no cyclic dependency is allowed. >>>>>> + The dependency list is terminated by SMTT_NULL. >>>>>> +*/ >>>>>> +STATIC >>>>>> +SMBIOS_TABLE_DISPATCHER mSmBiosDispatcher[MAX_SMBIOS_TABLES] =3D { >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_BIOS_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_BASEBOARD_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >> [GM]: >> We've made changes to this and to the Firmware inventory > [SAMI] Did I get something wrong or missed something here? Can you let > me know, please? >> >> >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_ENCLOSURE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_PROCESSOR_INFORMATION, >>>>>> SMBIOS_TYPE_CACHE_INFORMATION, SMTT_NULL, SMTT_NULL, SMTT_NULL, >>>>>> SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MEMORY_CONTROLLER_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MEMORY_MODULE_INFORMATON, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_CACHE_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_SLOTS, SMTT_NULL, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_OEM_STRINGS, SMTT_NULL, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_GROUP_ASSOCIATIONS, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_EVENT_LOG, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, >>>>>> SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION, >>>>>> SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION, SMTT_NULL, SMTT_NULL, >>>>>> SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MEMORY_DEVICE, >>>>>> SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, >>>>>> SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION, >>>>>> SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MEMORY_DEVICE_MAPPED_ADDRESS, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_BUILT_IN_POINTING_DEVICE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_PORTABLE_BATTERY, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_RESET, SMTT_NULL, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_HARDWARE_SECURITY, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_POWER_CONTROLS, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_VOLTAGE_PROBE, SMTT_NULL, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_COOLING_DEVICE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_TEMPERATURE_PROBE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_ELECTRICAL_CURRENT_PROBE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_OUT_OF_BAND_REMOTE_ACCESS, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_BOOT_INTEGRITY_SERVICE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MANAGEMENT_DEVICE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MANAGEMENT_DEVICE_COMPONENT, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MANAGEMENT_DEVICE_THRESHOLD_DATA, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_MEMORY_CHANNEL, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_IPMI_DEVICE_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_SYSTEM_POWER_SUPPLY, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_ADDITIONAL_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP >>>>>> (SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP >>>>>> (SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_TPM_DEVICE, SMTT_NULL, SMTT_NULL, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_PROCESSOR_ADDITIONAL_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_FIRMWARE_INVENTORY_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL), >>>>>> + SMBIOS_TABLE_DEP (SMBIOS_TYPE_STRING_PROPERTY_INFORMATION, >>>>>> SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL, SMTT_NULL) >>>>>> +}; >>>>>> + >>>>>> +#if !defined (MDEPKG_NDEBUG) >>>>>> + >>>>>> +/** >>>>>> + A string table describing the SMBIOS dispatcher states. >>>>>> +*/ >>>>>> +STATIC >>>>>> +CONST CHAR8 *SmbiosTableStateTxt[] =3D { >>>>>> + "StNotPresent", >>>>>> + "StPresent", >>>>>> + "StDispatched" >>>>>> +}; >>>>>> + >>>>>> +/** >>>>>> + Print the SMBIOS Table Dispatcher state information. >>>>>> + >>>>>> + @param Verbose Print detailed report >>>>>> +**/ >>>>>> +STATIC >>>>>> +VOID >>>>>> +EFIAPI >>>>>> +PrintDispatcherStatus ( >>>>>> + IN BOOLEAN Verbose >>>>>> + ) >>>>>> +{ >>>>>> + UINTN Index; >>>>>> + >>>>>> + DEBUG ((DEBUG_VERBOSE, "Dispatcher Status:\n")); >>>>>> + for (Index =3D 0; Index < ARRAY_SIZE (mSmBiosDispatcher); Index++)= { >>>>>> + if ((!Verbose) && (mSmBiosDispatcher[Index].State =3D=3D >>>>>> StNotPresent)) { >>>>>> + continue; >>>>>> + } >>>>>> + >>>>>> + DEBUG (( >>>>>> + DEBUG_VERBOSE, >>>>>> + "%02d: %10a [%02d, %02d, %02d, %02d, %02d]\n", >>>>>> + mSmBiosDispatcher[Index].TableType, >>>>>> + SmbiosTableStateTxt[mSmBiosDispatcher[Index].State], >>>>>> + mSmBiosDispatcher[Index].Dependency[0], >>>>>> + mSmBiosDispatcher[Index].Dependency[1], >>>>>> + mSmBiosDispatcher[Index].Dependency[2], >>>>>> + mSmBiosDispatcher[Index].Dependency[3], >>>>>> + mSmBiosDispatcher[Index].Dependency[4] >>>>>> + )); >>>>>> + } // for >>>>>> + >>>>>> + DEBUG ((DEBUG_VERBOSE, "\n")); >>>>>> +} >>>>>> + >>>>>> +#define DEBUG_PRINT_DISPATCHER_STATUS(Verbose) >>>>>> PrintDispatcherStatus (Verbose) >>>>>> +#else >>>>>> +#define DEBUG_PRINT_DISPATCHER_STATUS(x) >>>>>> +#endif >>>>>> + >>>>>> +/** >>>>>> + Initialise the SMBIOS table dispatcher. >>>>>> + >>>>>> + @param SmbiosTableInfo Pointer to the list of SMBIOS tables to be >>>>>> installed. >>>>>> + @param SmbiosTableCount Count of SMBIOS tables to be installed. >>>>>> +**/ >>>>>> +VOID >>>>>> +EFIAPI >>>>>> +InitSmbiosTableDispatcher ( >>>>>> + IN CM_STD_OBJ_SMBIOS_TABLE_INFO *SmbiosTableInfo, >>>>>> + IN UINT32 SmbiosTableCount >>>>>> + ) >>>>>> +{ >>>>>> + UINTN Index; >>>>>> + SMBIOS_TABLE_TYPE TableType; >>>>>> + >>>>>> + // Search for the list of SMBIOS tables presented >>>>>> + // for installation and update the dispatcher status. >>>>>> + for (Index =3D 0; Index < SmbiosTableCount; Index++) { >>>>>> + TableType =3D SmbiosTableInfo[Index].TableType; >>>>>> + ASSERT (mSmBiosDispatcher[TableType].State !=3D StPresent); >>>>> >>>>> >>>>> [GM] >>>>> This ASSERT will be hit even if we have multiple SMBIOS CM objects of >>>>> the same type which is legal (for e.g there are multiple tables for >>>>> type17/19 ) >>>>> >>>>> [SAMI] The understanding is that SmbiosTableInfo[] will only contain >>>>> one entry for a given TableType as it is used to indicate which >>>>> generators are to be instantiated. >>>>> >>>>> Following is the sequence of operations: >>>>> - The dispatcher is initialised in InitSmbiosTableDispatcher(), which >>>>> will set the mSmBiosDispatcher[].State to StPresent if >>>>> SmbiosTableInfo[] contains a table of Table_Type. >>>>> - SmbiosTableInfo[] will only contain one entry for each table type, >>>>> e.g. even if there are multiple Type17/Type19 tables to be installed. >>>>> This entry indicates that table(s) of Type17/Type19 is/are requested >>>>> to be installed and that the corresponding generator must be >>>>> instantiated. >>>>> - Once the SMBIOS table generator is instantiated, it will then >>>>> request for the object(s) of the required type from the Configuration >>>>> Manager that are required to construct the table. >>>>> - The generator can then decide if multiple SMBIOS tables are to be >>>>> constructed based on the objects returned by the Configuration >>>>> Manager. e.g. if multiple Cm_Type17_objects are returned then the >>>>> corresponding number of Type17 tables will be built by the generator. >>>>> >>>>> Therefore, I think we should not hit the above assert. >>>>> >>>> >>>> [GM] >>>> That sounds right, I'd made a mistake when installing the CM objects. >>>> >>>> I should be installing one of each SMBIOS table so that >>>> GetEStdObjSmbiosTableList gets the list of the available tables and >>>> each generator should install multiple tables of a given type based on >>>> the number of CM objects available. >>>> >>>> I did expand the existing SMBIOS factory code to install multiple >>>> tables. >>>> >>>> Thanks for the clarification. >>>> >>>> Best Regards >>>> Girish >>>> >>> [SAMI] No worries. Please let me know if you face any issues with the >>> dispatcher or if you identify any problem during integration. >>> >>> Regards, >>> >>> Sami Mujawar >>> >>>> >>>>> However, the code that may need to change/extend is the call to >>>>> BuildAndInstallSmbiosTable(). I am not sure if we need to indicate >>>>> that there could be multiple SMBIOS tables that may be installed. For >>>>> now, BuildAndInstallSmbiosTable() implies that a generator of the >>>>> specified type is to be instantiated for building the SMBIOS table of >>>>> the specified type. >>>>> >>>>> Hope this clarifies the scenario and please do let me know if I am >>>>> missing something. >>>>> >>>>> Also, I have only tested this patch with simulated data and there may >>>>> be some issues that we may find when the full stack is integrated. >>>>> So, thank you for going through the patch in detail. >>>>> >>>>> [SAMI] >>>>> >>>>> Best Regards >>>>> Girish >>>>> >>>>> >>>>>> + mSmBiosDispatcher[TableType].State =3D StPresent; >>>>>> + } >>>>>> + >>>>>> + DEBUG_PRINT_DISPATCHER_STATUS (FALSE); >>>>>> +} >>>>>> + >>>>>> +/** Schedule the dispatch of a SMBIOS table. >>>>>> + >>>>>> + The SMBIOS dispatcher state table is used to establish the >>>>>> dependency >>>>>> + order in which the SMBIOS tables are installed. This allows the >>>>>> SMBIOS >>>>>> + dispatcher to dispatch the dependent tables for installation >>>>>> before the >>>>>> + parent table is installed. >>>>>> + The SMBIOS_TABLE_DISPATCHER.Dependency[] field is used to >>>>>> establish the >>>>>> + dependency list. >>>>>> + Elements in the Dependency list are resolved by increasing index. >>>>>> However, >>>>>> + all orders are equivalent as: >>>>>> + - the Parent SMBIOS table will only be installed once all >>>>>> dependencies >>>>>> + have been satisfied. >>>>>> + - no cyclic dependency is allowed. >>>>>> + The dependency list is terminated by SMTT_NULL. >>>>>> + >>>>>> + @param [in] TableType The SMBIOS table type to schedule for >>>>>> + dispatch. >>>>>> + @param [in] TableFactoryProtocol Pointer to the Table Factory >>>>>> Protocol >>>>>> + interface. >>>>>> + @param [in] CfgMgrProtocol Pointer to the Configuration Manager >>>>>> + Protocol Interface. >>>>>> + @param [in] SmbiosProtocol Pointer to the SMBIOS protocol. >>>>>> + @param [in] SmbiosTableInfo Pointer to the SMBIOS table Info. >>>>>> + @param [in] SmbiosTableCount Count of SMBIOS table info objects. >>>>>> + >>>>>> + @retval EFI_SUCCESS Success. >>>>>> + @retval EFI_INVALID_PARAMETER A parameter is invalid. >>>>>> + @retval EFI_NOT_FOUND Required object is not found. >>>>>> + @retval EFI_BAD_BUFFER_SIZE Size returned by the Configuration >>>>>> Manager >>>>>> + is less than the Object size for the >>>>>> + requested object. >>>>>> +**/ >>>>>> +EFI_STATUS >>>>>> +EFIAPI >>>>>> +DispatchSmbiosTable ( >>>>>> + IN CONST SMBIOS_TABLE_TYPE TableType, >>>>>> + IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL *CONST >>>>>> TableFactoryProtocol, >>>>>> + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST >>>>>> CfgMgrProtocol, >>>>>> + IN EFI_SMBIOS_PROTOCOL *SmbiosProtocol, >>>>>> + IN CM_STD_OBJ_SMBIOS_TABLE_INFO *CONST SmbiosTableInfo, >>>>>> + IN CONST UINT32 SmbiosTableCount >>>>>> + ) >>>>>> +{ >>>>>> + EFI_STATUS Status; >>>>>> + UINTN Index; >>>>>> + SMBIOS_TABLE_DISPATCHER *Disp; >>>>>> + >>>>>> + DEBUG ((DEBUG_VERBOSE, "->DP %02d\n", TableType)); >>>>>> + Disp =3D &mSmBiosDispatcher[TableType]; >>>>>> + if (Disp->State =3D=3D StNotPresent) { >>>>>> + DEBUG ((DEBUG_VERBOSE, "<-DP %02d : EFI_NOT_FOUND\n", TableType)); >>>>>> + return EFI_NOT_FOUND; >>>>>> + } >>>>>> + >>>>>> + if (Disp->State =3D=3D StDispatched) { >>>>>> + DEBUG ((DEBUG_VERBOSE, "<-DP %02d : EFI_ALREADY_STARTED\n", >>>>>> TableType)); >>>>>> + return EFI_ALREADY_STARTED; >>>>>> + } >>>>>> + >>>>>> + // Table is present so check the dependency. >>>>>> + for (Index =3D 0; Index < MAX_SMBIOS_DEPENDENCY; Index++) { >>>>>> + // Check if the dependency list is terminated by SMTT_NULL. >>>>>> + if (Disp->Dependency[Index] =3D=3D SMTT_NULL) { >>>>>> + break; >>>>>> + } >>>>>> + >>>>>> + Status =3D DispatchSmbiosTable ( >>>>>> + Disp->Dependency[Index], >>>>>> + TableFactoryProtocol, >>>>>> + CfgMgrProtocol, >>>>>> + SmbiosProtocol, >>>>>> + SmbiosTableInfo, >>>>>> + SmbiosTableCount >>>>>> + ); >>>>>> + if (EFI_ERROR (Status)) { >>>>>> + if ((Status =3D=3D EFI_ALREADY_STARTED) || (Status =3D=3D EFI_NOT_= FOUND)) { >>>>>> + // Some dependencies may already be satisfied >>>>>> + // as other tables may also have similar >>>>>> + // dependencies i.e. EFI_ALREADY_STARTED >>>>>> + // Or >>>>>> + // the dependent table may be optional >>>>>> + // and not provided i.e. EFI_NOT_FOUND. >>>>>> + continue; >>>>>> + } >>>>>> + >>>>>> + DEBUG ((DEBUG_VERBOSE, "<-DP %02d : Status =3D %d\n", TableType, >>>>>> Status)); >>>>>> + return Status; >>>>>> + } >>>>>> + } >>>>>> + >>>>>> + DEBUG ((DEBUG_VERBOSE, "DP %02d : Status =3D %d\n", TableType, >>>>>> Status)); >>>>>> + >>>>>> + // All dependencies satisfied - Install SMBIOS table >>>>>> + Disp->State =3D StDispatched; >>>>>> + // Find the SMBIOS table info matching the TableType >>>>>> + for (Index =3D 0; Index < SmbiosTableCount; Index++) { >>>>>> + if (SmbiosTableInfo[Index].TableType =3D=3D TableType) { >>>>>> + break; >>>>>> + } >>>>>> + } >>>>>> + >>>>>> + Status =3D BuildAndInstallSmbiosTable ( >>>>>> + TableFactoryProtocol, >>>>>> + CfgMgrProtocol, >>>>>> + SmbiosProtocol, >>>>>> + &SmbiosTableInfo[Index] >>>>>> + ); >>>>>> + if (EFI_ERROR (Status)) { >>>>>> + DEBUG (( >>>>>> + DEBUG_ERROR, >>>>>> + "ERROR: Failed to install SMBIOS Table." \ >>>>>> + " Id =3D %u Status =3D %r\n", >>>>>> + SmbiosTableInfo[Index].TableGeneratorId, >>>>>> + Status >>>>>> + )); >>>>>> + } >>>>>> + >>>>>> + DEBUG_PRINT_DISPATCHER_STATUS (FALSE); >>>>>> + DEBUG ((DEBUG_VERBOSE, "<-DP %0d\n", TableType)); >>>>>> + return Status; >>>>>> +} >>>>>> diff --git >>>>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatc= her.h >>>>>> >>>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatc= her.h >>>>>> >>>>>> >>>>>> new file mode 100644 >>>>>> index >>>>>> 0000000000000000000000000000000000000000..d59eab4223c142293bdaf49055= 88f08e7a4a467f >>>>>> >>>>>> --- /dev/null >>>>>> +++ >>>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatc= her.h >>>>>> >>>>>> @@ -0,0 +1,159 @@ >>>>>> +/** @file >>>>>> + >>>>>> + Copyright (c) 2022 - 2023, Arm Limited. All rights reserved. >>>>>> + >>>>>> + SPDX-License-Identifier: BSD-2-Clause-Patent >>>>>> + >>>>>> +**/ >>>>>> + >>>>>> +#ifndef SMBIOS_TABLE_DISPATCHER_H_ >>>>>> +#define SMBIOS_TABLE_DISPATCHER_H_ >>>>>> + >>>>>> +#include >>>>>> +#include >>>>>> + >>>>>> +/** >>>>>> + A SMBIOS Table Type from the OEM range reserved for terminating >>>>>> + the SMBIOS table dispatch dependency. >>>>>> + >>>>>> + Note: According to the SMBIOS specification, Table Types 0 >>>>>> + through 127 (7Fh) are reserved for and defined by the >>>>>> + SMBIOS specification. >>>>>> + Types 128 through 256 (80h to FFh) are available for system and >>>>>> + OEM-specific information. >>>>>> + >>>>>> + This Dynamic SMBIOS table generation implementation defines >>>>>> + TableType FFh as a NULL table which is used by the Dynamic >>>>>> + SMBIOS table dispatcher to terminate the dependency list. >>>>>> +*/ >>>>>> +#define SMTT_NULL 0xFF >>>>>> + >>>>>> +/** >>>>>> + A macro defining the maximum number of dependendant SMBIOS tables >>>>>> + represented by the SMBIOS table dispatcher. >>>>>> +*/ >>>>>> +#define MAX_SMBIOS_DEPENDENCY 5 >>>>>> + >>>>>> +/** >>>>>> + A macro defining the maximum table types handled by the SMBIOS >>>>>> + table dispatcher. >>>>>> +*/ >>>>>> +#define MAX_SMBIOS_TABLES (SMBIOS_TYPE_STRING_PROPERTY_INFORMATION >>>>>> + 1) >>>>>> + >>>>>> +/** >>>>>> + A helper macro to populate the SMBIOS table dispatcher table >>>>>> +*/ >>>>>> +#define SMBIOS_TABLE_DEP(TableId, Dep1, Dep2, Dep3, Dep4, Dep5) \ >>>>>> + { \ >>>>>> + TableId, \ >>>>>> + StNotPresent, \ >>>>>> + { Dep1, Dep2, Dep3, Dep4, Dep5 } \ >>>>>> + } >>>>>> + >>>>>> +/** >>>>>> + An enum describing the states of the SMBIOS table dispatcher. >>>>>> +*/ >>>>>> +typedef enum SmbiosTableState { >>>>>> + StNotPresent, ///< SMBIOS table is not present for installation. >>>>>> + StPresent, ///< SMBIOS table is present for installation. >>>>>> + StDispatched ///< SMBIOS table generators have been dispatched. >>>>>> +} SMBIOS_TABLE_STATE; >>>>>> + >>>>>> +/** >>>>>> + A structure describing the dependencies for a SMBIOS table and >>>>>> + the dispatcher state information. >>>>>> +*/ >>>>>> +typedef struct SmBiosTableDispatcher { >>>>>> + /// SMBIOS Structure/Table Type >>>>>> + SMBIOS_TABLE_TYPE TableType; >>>>>> + /// SMBIOS dispatcher state >>>>>> + SMBIOS_TABLE_STATE State; >>>>>> + /// SMBIOS Structure/Table dependency list >>>>>> + /// The list is terminated using SMTT_NULL. >>>>>> + SMBIOS_TABLE_TYPE Dependency[MAX_SMBIOS_DEPENDENCY]; >>>>>> +} SMBIOS_TABLE_DISPATCHER; >>>>>> + >>>>>> +/** >>>>>> + A helper function to build and install a SMBIOS table. >>>>>> + >>>>>> + @param [in] TableFactoryProtocol Pointer to the Table Factory >>>>>> Protocol >>>>>> + interface. >>>>>> + @param [in] CfgMgrProtocol Pointer to the Configuration Manager >>>>>> + Protocol Interface. >>>>>> + @param [in] SmbiosProtocol Pointer to the SMBIOS protocol. >>>>>> + @param [in] SmbiosTableInfo Pointer to the SMBIOS table Info. >>>>>> + >>>>>> + @retval EFI_SUCCESS Success. >>>>>> + @retval EFI_INVALID_PARAMETER A parameter is invalid. >>>>>> + @retval EFI_NOT_FOUND Required object is not found. >>>>>> + @retval EFI_BAD_BUFFER_SIZE Size returned by the Configuration >>>>>> Manager >>>>>> + is less than the Object size for the >>>>>> + requested object. >>>>>> +**/ >>>>>> +extern >>>>>> +EFI_STATUS >>>>>> +EFIAPI >>>>>> +BuildAndInstallSmbiosTable ( >>>>>> + IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL *CONST >>>>>> TableFactoryProtocol, >>>>>> + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST >>>>>> CfgMgrProtocol, >>>>>> + IN EFI_SMBIOS_PROTOCOL *SmbiosProtocol, >>>>>> + IN CM_STD_OBJ_SMBIOS_TABLE_INFO *CONST SmbiosTableInfo >>>>>> + ); >>>>>> + >>>>>> +/** >>>>>> + Initialise the SMBIOS table dispatcher. >>>>>> + >>>>>> + @param SmbiosTableInfo Pointer to the list of SMBIOS tables to be >>>>>> installed. >>>>>> + @param SmbiosTableCount Count of SMBIOS tables to be installed. >>>>>> +**/ >>>>>> +VOID >>>>>> +EFIAPI >>>>>> +InitSmbiosTableDispatcher ( >>>>>> + IN CM_STD_OBJ_SMBIOS_TABLE_INFO *SmbiosTableInfo, >>>>>> + IN UINT32 SmbiosTableCount >>>>>> + ); >>>>>> + >>>>>> +/** Schedule the dispatch of a SMBIOS table. >>>>>> + >>>>>> + The SMBIOS dispatcher state table is used to establish the >>>>>> dependency >>>>>> + order in which the SMBIOS tables are installed. This allows the >>>>>> SMBIOS >>>>>> + dispatcher to dispatch the dependent tables for installation >>>>>> before the >>>>>> + parent table is installed. >>>>>> + The SMBIOS_TABLE_DISPATCHER.Dependency[] field is used to >>>>>> establish the >>>>>> + dependency list. >>>>>> + Elements in the Dependency list are resolved by increasing index. >>>>>> However, >>>>>> + all orders are equivalent as: >>>>>> + - the Parent SMBIOS table will only be installed once all >>>>>> dependencies >>>>>> + have been satisfied. >>>>>> + - no cyclic dependency is allowed. >>>>>> + The dependency list is terminated by SMTT_NULL. >>>>>> + >>>>>> + @param [in] TableType The SMBIOS table type to schedule for >>>>>> + dispatch. >>>>>> + @param [in] TableFactoryProtocol Pointer to the Table Factory >>>>>> Protocol >>>>>> + interface. >>>>>> + @param [in] CfgMgrProtocol Pointer to the Configuration Manager >>>>>> + Protocol Interface. >>>>>> + @param [in] SmbiosProtocol Pointer to the SMBIOS protocol. >>>>>> + @param [in] SmbiosTableInfo Pointer to the SMBIOS table Info. >>>>>> + @param [in] SmbiosTableCount Count of SMBIOS table info objects. >>>>>> + >>>>>> + @retval EFI_SUCCESS Success. >>>>>> + @retval EFI_INVALID_PARAMETER A parameter is invalid. >>>>>> + @retval EFI_NOT_FOUND Required object is not found. >>>>>> + @retval EFI_BAD_BUFFER_SIZE Size returned by the Configuration >>>>>> Manager >>>>>> + is less than the Object size for the >>>>>> + requested object. >>>>>> +**/ >>>>>> +EFI_STATUS >>>>>> +EFIAPI >>>>>> +DispatchSmbiosTable ( >>>>>> + IN CONST SMBIOS_TABLE_TYPE TableType, >>>>>> + IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL *CONST >>>>>> TableFactoryProtocol, >>>>>> + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST >>>>>> CfgMgrProtocol, >>>>>> + IN EFI_SMBIOS_PROTOCOL *SmbiosProtocol, >>>>>> + IN CM_STD_OBJ_SMBIOS_TABLE_INFO *CONST SmbiosTableInfo, >>>>>> + IN CONST UINT32 SmbiosTableCount >>>>>> + ); >>>>>> + >>>>>> +#endif // SMBIOS_TABLE_DISPATCHER_H_ >>>>>> --=20 >>>>>> 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' >>>>>> >>>>> >>>>> >>>>> -=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 (#107253): https://edk2.groups.io/g/devel/message/107253 Mute This Topic: https://groups.io/mt/97468481/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-