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 08F7ED8095A for ; Mon, 24 Jul 2023 17:49:17 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=fBAoozQJs3vRX682fQvVPBMkoFaeUiKuPEuLMshXAR0=; c=relaxed/simple; d=groups.io; h=X-Received:X-Received:X-Received:X-Received:X-MS-Exchange-Authentication-Results:Received-SPF:X-Received:X-Received:X-CheckRecipientChecked:X-CR-MTA-CID:X-CR-MTA-TID:X-Received:X-Received:ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:Authentication-Results-Original:X-Received:X-Received:Message-ID:Date:User-Agent:Subject:To:CC:References:From:In-Reply-To:X-ClientProxiedBy:MIME-Version:X-MS-TrafficTypeDiagnostic:X-MS-Office365-Filtering-Correlation-Id:X-LD-Processed:x-checkrecipientrouted:NoDisclaimer:X-MS-Exchange-SenderADCheck:X-MS-Exchange-AntiSpam-Relay:X-Microsoft-Antispam-Untrusted:X-Microsoft-Antispam-Message-Info-Original:X-Forefront-Antispam-Report-Untrusted:X-MS-Exchange-Transport-CrossTenantHeadersStamped:Original-Authentication-Results:X-EOPAttributedMessage:X-MS-Exchange-Transport-CrossTenantHeadersStripped:X-MS-PublicTrafficType:X-MS-Office365-Filtering-Correlation-Id-Prvs:X-Microsoft-Antispam-Message-Info:X-OriginatorOrg:X-MS-Exchange-CrossTenant-Original ArrivalTime:X-MS-Exchange-CrossTenant-Network-Message-Id:X-MS-Exchange-CrossTenant-Id:X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp:X-MS-Exchange-CrossTenant-AuthSource:X-MS-Exchange-CrossTenant-AuthAs:X-MS-Exchange-CrossTenant-FromEntityHeader: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:Content-Type:Content-Transfer-Encoding; s=20140610; t=1690220956; v=1; b=JVNmKnKvBN2zKUYMwJ7yuM3JvbnA4PH8O+OFPBvCYgZqgtNHwLPpT4jsdmY6ejt6h1vAZOob EGrz/XsZaAOD7l69s4RvCD3lYIyjCz9zWkvU0XAokGrLWmEnVDkgRNVU+4bRJcLYT0rX5G/Er4p 5jkrUhINaJz+Od1s8vV5cuNE= X-Received: by 127.0.0.2 with SMTP id nC59YY7687511xCxoXWZRqAX; Mon, 24 Jul 2023 10:49:16 -0700 X-Received: from EUR05-DB8-obe.outbound.protection.outlook.com (EUR05-DB8-obe.outbound.protection.outlook.com [40.107.20.86]) by mx.groups.io with SMTP id smtpd.web10.896.1690220955249347445 for ; Mon, 24 Jul 2023 10:49:15 -0700 X-Received: from DUZPR01CA0051.eurprd01.prod.exchangelabs.com (2603:10a6:10:469::15) by AS8PR08MB5943.eurprd08.prod.outlook.com (2603:10a6:20b:23e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.32; Mon, 24 Jul 2023 17:48:59 +0000 X-Received: from DBAEUR03FT020.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:469:cafe::ae) by DUZPR01CA0051.outlook.office365.com (2603:10a6:10:469::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.25 via Frontend Transport; Mon, 24 Jul 2023 17:48:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C X-Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT020.mail.protection.outlook.com (100.127.143.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6631.24 via Frontend Transport; Mon, 24 Jul 2023 17:48:59 +0000 X-Received: ("Tessian outbound 997ae1cc9f47:v145"); Mon, 24 Jul 2023 17:48:59 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 555a1652373533f5 X-CR-MTA-TID: 64aa7808 X-Received: from ad01109a1fe6.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3D76A249-6525-49FE-B7BA-997FAB4601C4.1; Mon, 24 Jul 2023 17:48:48 +0000 X-Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ad01109a1fe6.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 24 Jul 2023 17:48:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GbyqsZ8WtinKGnOe+l6mLyck9/DW8Ns9AtEdssI2oPxuI5SpK5d8Lc4TESX9LlSmLGohqp6O4QDMsI+zxXNmRIxP3YMnPQFd4tvXv7ZUeh5qwV42d9NW2P7SUiEWGZ/V2eft5zs5zmEdY1jhcmCjxxbsEoMhEFYzNY5YqYQ8uTN8vQNmwxtR/x1Zr2Mmqwsnv56iUcDnBhldsSc9Qp5HZIhoT/ULWcZyeYMfHVcGLwV67IUNVCUyXzaxWzCbFKoqwxXKU3MDmvJOCHc9zw7AUkAdh2XxCNSY4+VxL53/ZsUN6ER2nE+jcDmavAHB94cW1rkaFcoGeV67nIWdU8IRrQ== 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=vBgb2c3qwN4dhl9dOi4JcTZYEGJ4n6GJjlZpZy+HaCA=; b=AvTOlyOf+l3YCpcR9TshHI28xAxtEV52DJWK6l/z/ElG96u2pSjdEtQHY10DWAIl/LZZ9xaB+wu8bY9NCajm1EkNKAybslvSksYYOLmV/B7dhClWwmo2ojtq8jWzR1lAgkV4T+RWvBmly5bHFCA5sYTA1WdPayxhDg+gDhwYo1LiQLYJMqp1GRkAKbq0fchr+lBbZvBjymg3089orP0nnJiy+aNn508LxQu8TDOLQEEld/z+IlM6JF4oZLSlz8ERIfP0c6D4lbsW29rFVECPte7Y8rvaIiprkXL8l4lhlFWTWTZ7xu1S/j59rs6lYIMwfXDXsVz5jHyOhxKEKtkqdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by DB9PR08MB6492.eurprd08.prod.outlook.com (2603:10a6:10:23d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.32; Mon, 24 Jul 2023 17:48:44 +0000 X-Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::cd3c:b67a:63d8:a236]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::cd3c:b67a:63d8:a236%7]) with mapi id 15.20.6609.032; Mon, 24 Jul 2023 17:48:44 +0000 Message-ID: <834a869f-35e2-08cf-3e93-820e2ef62edb@arm.com> Date: Mon, 24 Jul 2023 18:48:40 +0100 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: Girish Mahadevan , "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> From: "Sami Mujawar" In-Reply-To: <143a7bee-82dd-53b3-c0d5-58da8129605e@nvidia.com> X-ClientProxiedBy: LO2P265CA0123.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9f::15) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB6806:EE_|DB9PR08MB6492:EE_|DBAEUR03FT020:EE_|AS8PR08MB5943:EE_ X-MS-Office365-Filtering-Correlation-Id: bfc3f76e-16b0-41bc-3575-08db8c6e42ab X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: JMgR+Iw0gLFvnWW04Q1wFaFN2eC/WnzAjdfkASLq/5LYC5/IOX4YH/nsqezBUCznRcfUYl+r2Z+wHrp+xzQanPI8r2VgQYS2gD/zvbDWIqlcRf+cXntwdG16jGmRDWi9cxNuuZL9xkIpi8jFn2wUAu7dE5K259/ur4Od905tWWdj097x0s5N0AoykHke0qRNe2FPRlvKfv4SOmLVNA3a9fFcJxF3edQc8OqXbseRHqjzdz+GVK+UzJASi4cbJe9EaTXA9MU0T9SdqVFO0FajCqZ9el//YaXOvF/qcGdloGyZVCguE3fFW45A5MMym4kOepnSGvGj7NhBsPGXsoKOkr5FjxGfH7ruLfFDMQCWwMFgRBogH1nLgQOrYOo5cxluXS4ZmoEr174qWiiH0qYMX0R1Su2qzfkdh2/hQstxozLIYE9s7b20tudT8Kz4VuKus+VmlPjL2N9sPCYZe0YtuyiVp4O1whKuM9vM1i0m004KreQ3uvvy20CR7iovSj4zoZ8FB2LEo2WxKt0v7LYski/FKVc3Wu65ZVRw4AE5Lzy4Cl0zepby6We5Pf6uJviYiXGQpjLypwj7nfWArcgDkK+khFW2/+1LWPgScxIPPBfR+nMJBu+4IwVI9FpI9ZaJkiMjYI4sORrKbbJ9GDbWM89RSYmhzmIdH3lPGylF2m3+D/Stxvj/eQ1v+Bpi3+mF X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(376002)(136003)(366004)(346002)(396003)(451199021)(44832011)(2906002)(38100700002)(966005)(6512007)(83380400001)(186003)(2616005)(6506007)(26005)(53546011)(8936002)(31696002)(86362001)(5660300002)(36756003)(30864003)(478600001)(6666004)(6486002)(4326008)(66476007)(66946007)(66556008)(8676002)(316002)(54906003)(110136005)(41300700001)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6492 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT020.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a9a447e7-5153-402b-bf3b-08db8c6e3906 X-Microsoft-Antispam-Message-Info: xbg0FQ2nkGVKUCco5Ge0XVRsukDq6K7yAc/kE47mYfwxRT5PNLRs8vTxuGdna5Aztz/ljXB8KuQUoDqrUqQKoDkDUpitmmz9lglyb5nDdplr2dHEhATNqbqzdaq6YOows5fQNQmFpYs7oLXkvhtcpky0BKsDT1h97DIZjvuLyZrn3cFyOuOQ2EA+gJdv4Ya7xDSZejW8egzbSMvY9+gkvWctgIr7MxZtMGIDdlmroNS2VU0Ns863dBlEI7eB2YDEPYgZunMXyoYjZtG4yb9T2wwbM0r+Qi0K3cCnbXbhngz24j6YDYfvXje7QFbxTbwlecwvNXZJy03OfJQ7+kLDhby76+5iqPwN4fPCsnmH3JT9UcMb+sqrXU42Bhmq30/TjTMdTniU6uYOatFJuY0NZsBB8i6dwc9yq2T1flVIy/N/eeVYEGCJUzVgeOyNFPtvwvm5l5EhH6B21Dfx/a2BXolT8lgVCg4NdAMptlVFTQHUIlDcP84xswhXyQu5+asU415Cd7ezY/icsk7eg81vJI1oAn3frAK5YqSUXg9OpC1Nrl0Qu7Ru1X6valFPGnGFnfM0PfiqqoFdzPjkZdl1E3qN+ztHVjSKAspvKZAvhTbo/RJCyEtXvpxkJroAO2sUkutfVRD/mSiZVWEUuI01ElJi3Od0/ID6gd2Sz5f9OA15ZOQjJyeYmQ73mrYFSa0icR050quAABLV4O0uyn0y6Y1ls+4gh2LV3CBlNAAKP7ug2k6i1IEtWRFyeqfEAz2wwxaVarWseMV6HgOktGSrM/kbC7af2pMRGlZ2hqAU6LI= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2023 17:48:59.5708 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bfc3f76e-16b0-41bc-3575-08db8c6e42ab X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT020.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5943 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,sami.mujawar@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: R9jn5fg2WNdbQonpq3jE1NOsx7686176AA= 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=JVNmKnKv; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none); arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") Hi Girish, Thank you for taking this effort forward Please find my response inline marked [SAMI]. Regards, Sami Mujawar 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=20 > compile to work. (inline with [GM]), other than that I think you can=20 > 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,=20 > 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=20 would work as I would prefer to avoid duplication of data. > > I've setup a github repo here > https://github.com/tianocore/edk2/compare/master...gmahadevan:edk2-upstre= am:RFC/smbios-dyntables-v2?expand=3D1=20 > [SAMI] Thanks for sharing the github branch. Please also share a github=20 branch when you send out your patches for review. > > I could send you one massive patch train (22 patches or so) or split=20 > it up into smaller chunks perhaps just the table generation stuff=20 > first and then each generator library. > [SAMI] I think it may be good to split the patch series to include table=20 generation and then 1 or 2 generators to understand the code flow. The=20 remaining generators can follow later. I think Type 4 and 7 would be=20 really interesting, but you can send what you already have. > 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=20 >>>> (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/DynamicTableManagerDx= e.inf=20 >>>>> >>>>> | 4 +- >>>>> DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher= .c=20 >>>>> >>>>> | 282 ++++++++++++++++++++ >>>>> DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher= .h=20 >>>>> >>>>> | 159 +++++++++++ >>>>> 3 files changed, 444 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git >>>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.inf=20 >>>>> >>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.inf=20 >>>>> >>>>> >>>>> index >>>>> ad8b3d037c169ca848b5ea84fd1086b83f37876f..b09272d883c6f4f05eb03dcdab3= efeda92b2fbb6=20 >>>>> >>>>> 100644 >>>>> --- >>>>> a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.inf=20 >>>>> >>>>> +++ >>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManager= Dxe.inf=20 >>>>> >>>>> @@ -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/SmbiosTableDispatch= er.c=20 >>>>> >>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatch= er.c=20 >>>>> >>>>> >>>>> new file mode 100644 >>>>> index >>>>> 0000000000000000000000000000000000000000..0e728538d9f6eb0b164fea3a160= d3233db833f8d=20 >>>>> >>>>> --- /dev/null >>>>> +++ >>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatch= er.c=20 >>>>> >>>>> @@ -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 [SAMI] Yes, you are correct. I had tested my changes only using=20 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=20 >>>>> 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=20 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=20 >>>>> 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=20 >>> 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=20 >>>>> 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=20 >>>>> 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_F= OUND)) { >>>>> + // 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/SmbiosTableDispatch= er.h=20 >>>>> >>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatch= er.h=20 >>>>> >>>>> >>>>> new file mode 100644 >>>>> index >>>>> 0000000000000000000000000000000000000000..d59eab4223c142293bdaf490558= 8f08e7a4a467f=20 >>>>> >>>>> --- /dev/null >>>>> +++ >>>>> b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatch= er.h=20 >>>>> >>>>> @@ -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=20 >>>>> 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=20 >>>>> 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=20 >>>>> 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 (#107186): https://edk2.groups.io/g/devel/message/107186 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-