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 7A66F740032 for ; Fri, 21 Jul 2023 23:14:28 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=ha2EVq0dsMcPj3b4Ca4zaa5ff/pBI/jVjbvFKzT6gM0=; 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=1689981267; v=1; b=pSfPi8gEGE3H1gtM6DIna3tjX0mXUVyRWvBk5/3h6fz+2YScI943fAcB8lKl1/tqxVLaNUxp BYlizStQ5c2vkq6c+/FxeNS+bh5Jo8/ypS7k8hL/wCusItYx3jKGa67tesl6/o0vhCW/XxLSs2X ZqfC7A5NkiUUCd87jaL1fcf4= X-Received: by 127.0.0.2 with SMTP id y8owYY7687511xBHMUEqpkCO; Fri, 21 Jul 2023 16:14:27 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.53]) by mx.groups.io with SMTP id smtpd.web11.20168.1689981266358861542 for ; Fri, 21 Jul 2023 16:14:26 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k8HZ8PRVh0MNYI8ajwUz1E+TlaBq3BOfUSEsBzZW3NSNzpmRE/AHzuH10GncCo72prIkC6HAIv0Ab9fL8bWxg5nVD69/2KXRaMNy3Im/elccyfJyddxDQY0rSzq/8SFtFKJH2sq5OLI/R525J+VPRh22yPq/mP3863UaF5kPRlK62OEPHtzgAfQo8QvgvOzI8MQZzzX7qc3oa1tTMwpMdC+5/slqf31lLHqbWBbeNI2VSCI1q7qsaj7J1MwLnI64fn36EoByGUEnV9mN2rrAqLEbki1vFbPYkaEutbtS0WP33pRf6j8BDkc5QvROJb8jgCLzmYa5HwOrhhZR1/zx1g== 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=SYrMLZK+U8f7Y1QNifqB7KT7+bx2NbuAgM+fIyUyd7E=; b=cTjp6SUJoc1bKZYU10vaZM+HOI1lGXr5d7YU97uYOkVBkt+uSCLPRrlU9FySla4tlfPBEXe+UDLs6lyUMH/dbmkWjT+LE5Cw1GAQ2q607n3Pjy63+imxYvgWZOQBPgrL7DNuSklhSuShvaFXIl/GgsyorjTOY3rywkBLpfK4Q+bYcKN0UVf07500vM5z/PT4YFhOzIl3Euq3vWtAK/BM4Q8un4EJVHvayG7M2uwsVxFHghA9pp/ynSotGBETp7MPCYinl8NCYPwxf8BQea+qh97YumxXIGdt2ZZB7FncfnIJ92/Weesfs2zng7OvikXwWlLZMMyJvkV+wpBM1Ux7MA== 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 IA0PR12MB7529.namprd12.prod.outlook.com (2603:10b6:208:441::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.24; Fri, 21 Jul 2023 23:14:19 +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.6588.031; Fri, 21 Jul 2023 23:14:19 +0000 Message-ID: <143a7bee-82dd-53b3-c0d5-58da8129605e@nvidia.com> Date: Fri, 21 Jul 2023 17:14:13 -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 , Ben Adderson , 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> From: "Girish Mahadevan via groups.io" In-Reply-To: <9bfe354b-914d-4534-1b8e-5d32411b5354@arm.com> X-ClientProxiedBy: BN9PR03CA0726.namprd03.prod.outlook.com (2603:10b6:408:110::11) To CY5PR12MB6297.namprd12.prod.outlook.com (2603:10b6:930:22::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR12MB6297:EE_|IA0PR12MB7529:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ad54194-86c1-4e16-3bbc-08db8a4035d0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: b4HAXZNVza1CzpYWmFbk75lkt0+L4eVa8qDFY1g8+bz48Ng5Xgrl3sSwg9MolEC8lUijIPYWFWjeJSmdzm16/2w5cMZ1v+z20SmS8Cw3PXJBsMSaWri8Gi+oKhN0fnep4s6FtCO5Z1iNp61ivHSeLv60O0JbRqoZHPKXNFSRzybL2AcytwRKFSzH7bziFRVmta/H5+HL5XculbS5ruxkW0WnGSjuI/IMhf/DlOP1uKy8yKRQYh2Pv8XckG/tLD8KZErf02YMjUVoCrpDAQO5jxHpElP8ZMHtdZf7AOQmlLAg9Qe7UFp5t07GGOvz3voQjteXC03rjlFGffadCRH0f80Ls69NjexhiEEDLLeZ7uPcAAfAJb/dL4yPVA9AmaYN732tYCt4ikHx0GqzfEQKtkRoMektjA/W8io2X7L/9kVoIA3DhbDT349kOBiD1UUV+XkI9Vd96L6soqogq8dnDI6mvHtFRwIb/sFN/p5Urtuvas+I19AOjj5fuRgT6NVHqzgF1oDvcn4kEWsZzxGDYb2L4GOcqeqaDzo6ClVFoNYRE0j0WgmoMEsEBOPYLEoUuqi2PjwCUhKkbvT6mIMqi5FT44JI6VjUvIZ3TGjI86pXy2QJCuoXyQUDAiPGfOi0hRQnHvJrRAF2qvatWCMVBw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eiP9CZtLSi9LKJarUFgguMdN9XV+RTc4u0inx2hVDqQ9/dxtNH6rkIMubHev?= =?us-ascii?Q?sJpZP5OLNo0bGq2Q3LUlp1WELI1o/kDihNBJ2L3Mht5Ye6VAfGD4jvXJv0qP?= =?us-ascii?Q?jLJQDFjilAoHVSTBDOn1xMy4Kx7FH4RHTVMUpHkQ5LBloSautBzDADHH8L7G?= =?us-ascii?Q?Wku4IYu8T+6EYEn+kVDSgU+bINbFfTkU3UftqoucZQUKPVVFodQtSJl4Xga/?= =?us-ascii?Q?oxZ/fWqndMVbxkiAaWvOxeWj3wM6RQOfQ7Ocla0NAaBslWBLXnZgacjuMyjR?= =?us-ascii?Q?3JHQwbgJ3m4AGfG83/S3Zzoa4k7qEcb/BaxaJTTzRItuxOvOzmCRydkCWPXe?= =?us-ascii?Q?8P7IzAoz++8n9tC5qgYAe4XQ1P85CmKgkSPDdLwBtSjPIAYG4CTGHv8eLTJL?= =?us-ascii?Q?uch0xMxHXZXhhxSY0WSnvQumlVp0NRdx1wyH5HRRV9R0Gtickoto7Abyx8CU?= =?us-ascii?Q?ZQhKlkVXhyYfrgNRlzlPs32ZC15xizPCmVqWPsprnEyN3AE1zr0pjJcLaXdg?= =?us-ascii?Q?q7p9SJ5cHU0HAC2eqAaSUrQQ2Ju7nh2wZUZ7KWhxXgMjGesoEOjtie7ARr3V?= =?us-ascii?Q?1hdpQ5V/7hY6UVxk1kMWW8k33d/5FkMo4m6HKrH7XOO1d4Sn+7GguD+gPMHN?= =?us-ascii?Q?yMHzYvDp7kflp5ZXpNtplMZ0Hu+Tzamt5hcMWfymNVWNrOLhtaEJh1zu3zIN?= =?us-ascii?Q?pVmy1ihK2zU1WaTeC8CSKeGPs1caIhORC6eRHdBWEAc2geZK8MIihqXffSgz?= =?us-ascii?Q?f9fJVghjkk6hCAQB/vceps1tDTLe30qvEhAiqW/PWVFgpoxhHXBW9ICWpcN6?= =?us-ascii?Q?TgWCufuVM1pmHEHrARyaxsqLinhhe/wFmnseFk/9g1IBhT63WJb0DFjbFgcT?= =?us-ascii?Q?ScnCJxe4kXYXiKKR9xtJWcmYEUoAtWEB9o6XRMIX8ZnmgM90alZG0Mxu/alJ?= =?us-ascii?Q?dBgzaqYd3XoKdWOKCjptPgpAHZK49N/8pnJeFY+lIU9B6H4F29OAGs6UVWVj?= =?us-ascii?Q?1JDpCpDTv65JoDao8MO3y24NOiSPFIuR+ZGsw2w2KQ6cn9HOwBGuAxwNvACO?= =?us-ascii?Q?OW5i3/qx6Da6pwauJgvWprAAvnTx481qA6psVsDM/Yp3PqTFQPPuhSzw2HA+?= =?us-ascii?Q?ootYLVCVcOMmgC6fWK2+iSB4/YIkfmr1vO3JX2kDyAxNnxkxl71/KJ9o+dEw?= =?us-ascii?Q?OOPyi8rJyPfzI/aJtyw9ejntqbXJ56zqz2g9+Kvwprg9w2pVANSiUOhu1zhj?= =?us-ascii?Q?RWUdvHP6UkTNVthdf1C9KIPosySA/5Waj7mFWL9B49y8aDL/Y0iLhpChD823?= =?us-ascii?Q?wj3ZnveE+JZo5uXLGXUlT8F77edaHOXe9DsZ3n6la9l9Y1xO/OaRKf1kNWkE?= =?us-ascii?Q?rRom4mWMjNCr/6nuowVYkgNp1Hqu6CYHqJ9j7FDT2vynSughbpQLJdkVsi1b?= =?us-ascii?Q?6z0MxXViwxE6kNgPJ1JDN+BYyZ/KLPbqaBzV8zkqi7XtMMfQ0yaP+TC8So/N?= =?us-ascii?Q?gPnb0RNLTXr7yuumY9+bjEEtmkAJtOxftOE5Jo8dHUR6lXVfawpEdfu/xCvy?= =?us-ascii?Q?R4FDUdZZ3rzbmrv/95LzQHuWNkWxZPSUM806xgD4?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ad54194-86c1-4e16-3bbc-08db8a4035d0 X-MS-Exchange-CrossTenant-AuthSource: CY5PR12MB6297.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2023 23:14:19.0645 (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: pvwV10UrNXoM5VCl8HLaYMY7KcAzKMI6zu6wh+LqjW9evjbquuYZa/EAZpEoYh4qt6ZQmQD70cQtuma5tEhIiA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB7529 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: FElkKgxvJcxi8EPhm9HxXCJGx7686176AA= 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=pSfPi8gE; 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; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") Hi Sami Your patches worked. There was just one thing I had to add to get=20 compile to work. (inline with [GM]), other than that I think you can get=20 this in. We've implemented about 18 table generators. (Types 0, 1, 2, 3, 8, 9,=20 11, 13, 14, 16, 17, 19, 32, 38, 39, 41, 43, 45) Two more are under way (Type 4.7). I've setup a github repo here https://github.com/tianocore/edk2/compare/master...gmahadevan:edk2-upstream= :RFC/smbios-dyntables-v2?expand=3D1 I could send you one massive patch train (22 patches or so) or split it=20 up into smaller chunks perhaps just the table generation stuff first and=20 then each generator library. Let me know. Best Regards Girish On 3/10/2023 9:28 AM, Sami Mujawar wrote: > External email: Use caution opening links or attachments >=20 >=20 > Hi Girish, >=20 > 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 dependent >>>> 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/DynamicTableManagerDxe= .inf >>>> | 4 +- >>>> DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.= c >>>> | 282 ++++++++++++++++++++ >>>> DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.= h >>>> | 159 +++++++++++ >>>> 3 files changed, 444 insertions(+), 1 deletion(-) >>>> >>>> diff --git >>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerD= xe.inf >>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerD= xe.inf >>>> >>>> index >>>> ad8b3d037c169ca848b5ea84fd1086b83f37876f..b09272d883c6f4f05eb03dcdab3e= feda92b2fbb6 >>>> 100644 >>>> --- >>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerD= xe.inf >>>> +++ >>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerD= xe.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/SmbiosTableDispatche= r.c >>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatche= r.c >>>> >>>> new file mode 100644 >>>> index >>>> 0000000000000000000000000000000000000000..0e728538d9f6eb0b164fea3a160d= 3233db833f8d >>>> --- /dev/null >>>> +++ >>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatche= r.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=20 BuildAndInstallSmbiosTable >>>> + 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 dependenc= y >>>> + 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 >>>> + 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 StNotPresen= t)) { >>>> + 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. >=20 > Regards, >=20 > Sami Mujawar >=20 >> >>> 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 dependenc= y >>>> + 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_FO= UND)) { >>>> + // 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/SmbiosTableDispatche= r.h >>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatche= r.h >>>> >>>> new file mode 100644 >>>> index >>>> 0000000000000000000000000000000000000000..d59eab4223c142293bdaf4905588= f08e7a4a467f >>>> --- /dev/null >>>> +++ >>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatche= r.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 dependenc= y >>>> + 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 (#107135): https://edk2.groups.io/g/devel/message/107135 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-