* [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher @ 2022-10-18 15:33 Sami Mujawar 2022-10-18 15:33 ` [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table type Sami Mujawar ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Sami Mujawar @ 2022-10-18 15:33 UTC (permalink / raw) To: devel Cc: Sami Mujawar, Alexei.Fedorov, pierre.gondois, gmahadevan, abner.chang, jbrasen, ashishsingha, nramirez, wwatson, Matteo.Carlini, Akanksha.Jain2, Ben.Adderson, Samer.El-Haj-Mahmoud, nd Some SMBIOS tables have dependencies on other SMBIOS tables. These dependencies are established using handles pointing to the dependent SMBIOS tables. This requires the dependent SMBIOS table to be installed before the parent SMBIOS table can be installed. To facilitate dynamic SMBIOS table generation, a SMBIOS table dispatcher has been introduced. The SMBIOS table dispatcher schedules the installation of dependent SMBIOS tables before the parent SMBIOS table is installed. The changes can be seen at: https://github.com/samimujawar/edk2/tree/2406_smbios_dispatcher_v1 Sami Mujawar (2): DynamicTablesPkg: Define a SMBIOS Structure/Table type DynamicTablesPkg: Add SMBIOS table dispatcher DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf | 4 +- DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.c | 304 ++++++++++++++++++++ DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.h | 133 +++++++++ DynamicTablesPkg/Include/StandardNameSpaceObjects.h | 17 ++ 4 files changed, 457 insertions(+), 1 deletion(-) create mode 100644 DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.c create mode 100644 DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.h -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table type 2022-10-18 15:33 [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher Sami Mujawar @ 2022-10-18 15:33 ` Sami Mujawar 2022-10-25 0:56 ` Chang, Abner 2022-10-18 15:33 ` [PATCH v1 2/2] DynamicTablesPkg: Add SMBIOS table dispatcher Sami Mujawar 2022-10-25 12:29 ` [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher PierreGondois 2 siblings, 1 reply; 6+ messages in thread From: Sami Mujawar @ 2022-10-18 15:33 UTC (permalink / raw) To: devel Cc: Sami Mujawar, Alexei.Fedorov, pierre.gondois, gmahadevan, abner.chang, jbrasen, ashishsingha, nramirez, wwatson, Matteo.Carlini, Akanksha.Jain2, Ben.Adderson, Samer.El-Haj-Mahmoud, nd SMBIOS Structure 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. Therefore, define a new type 'SMBIOS_TABLE_TYPE' that represents a SMBIOS structure type and include it in the definition of CM_STD_OBJ_SMBIOS_TABLE_INFO. Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Cc: Alexei Fedorov <Alexei.Fedorov@arm.com> Cc: Pierre Gondois <pierre.gondois@arm.com> Cc: Girish Mahadevan <gmahadevan@nvidia.com> Cc: Jeff Brasen <jbrasen@nvidia.com> Cc: Ashish Singhal <ashishsingha@nvidia.com> Cc: Nick Ramirez <nramirez@nvidia.com> Cc: William Watson <wwatson@nvidia.com> Cc: Abner Chang <abner.chang@amd.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> --- DynamicTablesPkg/Include/StandardNameSpaceObjects.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/DynamicTablesPkg/Include/StandardNameSpaceObjects.h b/DynamicTablesPkg/Include/StandardNameSpaceObjects.h index 8ec3238225abe4fc16a7337c29ecd655590b408f..c81efbc237779c305abc3c4dd07f6b705563e2a1 100644 --- a/DynamicTablesPkg/Include/StandardNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/StandardNameSpaceObjects.h @@ -40,6 +40,20 @@ **/ typedef UINTN CM_OBJECT_TOKEN; +/** + A type representing a SMBIOS structure/table type. + + 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. + + Note: 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 sequence. +*/ +typedef UINT8 SMBIOS_TABLE_TYPE; + /** The ESTD_OBJECT_ID enum describes the Object IDs in the Standard Namespace. */ @@ -127,6 +141,9 @@ typedef struct CmAStdObjAcpiTableInfo { to NULL. */ typedef struct CmStdObjSmbiosTableInfo { + /// SMBIOS Structure/Table Type + SMBIOS_TABLE_TYPE TableType; + /// The SMBIOS Table Generator ID SMBIOS_TABLE_GENERATOR_ID TableGeneratorId; -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table type 2022-10-18 15:33 ` [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table type Sami Mujawar @ 2022-10-25 0:56 ` Chang, Abner 0 siblings, 0 replies; 6+ messages in thread From: Chang, Abner @ 2022-10-25 0:56 UTC (permalink / raw) To: Sami Mujawar, devel@edk2.groups.io Cc: Alexei.Fedorov@arm.com, pierre.gondois@arm.com, gmahadevan@nvidia.com, jbrasen@nvidia.com, ashishsingha@nvidia.com, nramirez@nvidia.com, wwatson@nvidia.com, Matteo.Carlini@arm.com, Akanksha.Jain2@arm.com, Ben.Adderson@arm.com, Samer.El-Haj-Mahmoud@arm.com, nd@arm.com [AMD Official Use Only - General] Acked-by: Abner Chang <abner.chang@amd.com> > -----Original Message----- > From: Sami Mujawar <sami.mujawar@arm.com> > Sent: Tuesday, October 18, 2022 11:34 PM > To: devel@edk2.groups.io > Cc: Sami Mujawar <sami.mujawar@arm.com>; Alexei.Fedorov@arm.com; > pierre.gondois@arm.com; gmahadevan@nvidia.com; Chang, Abner > <Abner.Chang@amd.com>; jbrasen@nvidia.com; ashishsingha@nvidia.com; > nramirez@nvidia.com; wwatson@nvidia.com; Matteo.Carlini@arm.com; > Akanksha.Jain2@arm.com; Ben.Adderson@arm.com; Samer.El-Haj- > Mahmoud@arm.com; nd@arm.com > Subject: [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table > type > > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. > > > SMBIOS Structure 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. > > Therefore, define a new type 'SMBIOS_TABLE_TYPE' that represents a > SMBIOS structure type and include it in the definition of > CM_STD_OBJ_SMBIOS_TABLE_INFO. > > Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> > Cc: Alexei Fedorov <Alexei.Fedorov@arm.com> > Cc: Pierre Gondois <pierre.gondois@arm.com> > Cc: Girish Mahadevan <gmahadevan@nvidia.com> > Cc: Jeff Brasen <jbrasen@nvidia.com> > Cc: Ashish Singhal <ashishsingha@nvidia.com> > Cc: Nick Ramirez <nramirez@nvidia.com> > Cc: William Watson <wwatson@nvidia.com> > Cc: Abner Chang <abner.chang@amd.com> > Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> > --- > DynamicTablesPkg/Include/StandardNameSpaceObjects.h | 17 > +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/DynamicTablesPkg/Include/StandardNameSpaceObjects.h > b/DynamicTablesPkg/Include/StandardNameSpaceObjects.h > index > 8ec3238225abe4fc16a7337c29ecd655590b408f..c81efbc237779c305abc3c4dd0 > 7f6b705563e2a1 100644 > --- a/DynamicTablesPkg/Include/StandardNameSpaceObjects.h > +++ b/DynamicTablesPkg/Include/StandardNameSpaceObjects.h > @@ -40,6 +40,20 @@ > **/ > typedef UINTN CM_OBJECT_TOKEN; > > +/** > + A type representing a SMBIOS structure/table type. > + > + 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. > + > + Note: 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 sequence. > +*/ > +typedef UINT8 SMBIOS_TABLE_TYPE; > + > /** The ESTD_OBJECT_ID enum describes the Object IDs > in the Standard Namespace. > */ > @@ -127,6 +141,9 @@ typedef struct CmAStdObjAcpiTableInfo { > to NULL. > */ > typedef struct CmStdObjSmbiosTableInfo { > + /// SMBIOS Structure/Table Type > + SMBIOS_TABLE_TYPE TableType; > + > /// The SMBIOS Table Generator ID > SMBIOS_TABLE_GENERATOR_ID TableGeneratorId; > > -- > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v1 2/2] DynamicTablesPkg: Add SMBIOS table dispatcher 2022-10-18 15:33 [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher Sami Mujawar 2022-10-18 15:33 ` [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table type Sami Mujawar @ 2022-10-18 15:33 ` Sami Mujawar 2022-10-25 0:54 ` Chang, Abner 2022-10-25 12:29 ` [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher PierreGondois 2 siblings, 1 reply; 6+ messages in thread From: Sami Mujawar @ 2022-10-18 15:33 UTC (permalink / raw) To: devel Cc: Sami Mujawar, Alexei.Fedorov, pierre.gondois, gmahadevan, abner.chang, jbrasen, ashishsingha, nramirez, wwatson, Matteo.Carlini, Akanksha.Jain2, Ben.Adderson, Samer.El-Haj-Mahmoud, nd 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 <sami.mujawar@arm.com> Cc: Alexei Fedorov <Alexei.Fedorov@arm.com> Cc: Pierre Gondois <pierre.gondois@arm.com> Cc: Girish Mahadevan <gmahadevan@nvidia.com> Cc: Jeff Brasen <jbrasen@nvidia.com> Cc: Ashish Singhal <ashishsingha@nvidia.com> Cc: Nick Ramirez <nramirez@nvidia.com> Cc: William Watson <wwatson@nvidia.com> Cc: Abner Chang <abner.chang@amd.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> --- DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf | 4 +- DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.c | 304 ++++++++++++++++++++ DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.h | 133 +++++++++ 3 files changed, 440 insertions(+), 1 deletion(-) diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf index ad8b3d037c169ca848b5ea84fd1086b83f37876f..b09272d883c6f4f05eb03dcdab3efeda92b2fbb6 100644 --- a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.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/SmbiosTableDispatcher.c b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.c new file mode 100644 index 0000000000000000000000000000000000000000..88907fecdde5e36d40ac22cd486391abbb853e38 --- /dev/null +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.c @@ -0,0 +1,304 @@ +/** @file + Dynamic Smbios Table Dispatcher + + Copyright (c) 2022, Arm Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include <Library/DebugLib.h> +#include <Protocol/Smbios.h> + +#include <Include/StandardNameSpaceObjects.h> +#include <SmbiosTableDispatcher.h> + +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 + ); + +#if !defined (MDEPKG_NDEBUG) + +/** + A string table describing the SMBIOS dispatcher states. +*/ +STATIC +CONST CHAR8 *SmbiosTableStateTxt[] = { + "StUnknown", + "StNotPresent", + "StPresent", + "StDispatched" +}; + +#endif + +/** + 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] = { + 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), + 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) + +/** + 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 = 0; Index < ARRAY_SIZE (mSmBiosDispatcher); Index++) { + if ((!Verbose) && (mSmBiosDispatcher[Index].State < StPresent)) { + 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; + + // First search for the list of SMBIOS tables presented + // for installation and update the dispatcher status. + for (Index = 0; Index < SmbiosTableCount; Index++) { + TableType = SmbiosTableInfo[Index].TableType; + ASSERT (mSmBiosDispatcher[TableType].State != StPresent); + mSmBiosDispatcher[TableType].State = StPresent; + } + + // Mark the remaining tables as not presented for installation + for (Index = 0; Index < ARRAY_SIZE (mSmBiosDispatcher); Index++) { + if (mSmBiosDispatcher[Index].State == StUnknown) { + mSmBiosDispatcher[Index].State = StNotPresent; + } + } + + 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 = &mSmBiosDispatcher[TableType]; + if (Disp->State < StPresent) { + DEBUG ((DEBUG_VERBOSE, "<-DP %02d : EFI_NOT_FOUND\n", TableType)); + return EFI_NOT_FOUND; + } + + if (Disp->State == StDispatched) { + DEBUG ((DEBUG_VERBOSE, "<-DP %02d : EFI_ALREADY_STARTED\n", TableType)); + return EFI_ALREADY_STARTED; + } + + // Table is present so check the dependency. + for (Index = 0; Index < MAX_SMBIOS_DEPENDENCY; Index++) { + // Check if the dependency list is terminated by SMTT_NULL. + if (Disp->Dependency[Index] == SMTT_NULL) { + break; + } + + Status = DispatchSmbiosTable ( + Disp->Dependency[Index], + TableFactoryProtocol, + CfgMgrProtocol, + SmbiosProtocol, + SmbiosTableInfo, + SmbiosTableCount + ); + if (EFI_ERROR (Status)) { + if ((Status == EFI_ALREADY_STARTED) || (Status == 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 = %d\n", TableType, Status)); + return Status; + } + } + + DEBUG ((DEBUG_VERBOSE, "DP %02d : Status = %d\n", TableType, Status)); + + // All dependencies satisfied - Install SMBIOS table + Disp->State = StDispatched; + // Find the SMBIOS table info matching the TableType + for (Index = 0; Index < SmbiosTableCount; Index++) { + if (SmbiosTableInfo[Index].TableType == TableType) { + break; + } + } + + Status = BuildAndInstallSmbiosTable ( + TableFactoryProtocol, + CfgMgrProtocol, + SmbiosProtocol, + &SmbiosTableInfo[Index] + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: Failed to install SMBIOS Table." \ + " Id = %u Status = %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/SmbiosTableDispatcher.h b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.h new file mode 100644 index 0000000000000000000000000000000000000000..420e16f62d58cf295b27174ce78ce9e2697918cb --- /dev/null +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.h @@ -0,0 +1,133 @@ +/** @file + + Copyright (c) 2022, Arm Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef SMBIOS_TABLE_DISPATCHER_H_ +#define SMBIOS_TABLE_DISPATCHER_H_ + +#include <Protocol/ConfigurationManagerProtocol.h> +#include <Protocol/DynamicTableFactoryProtocol.h> + +/** + 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, \ + StUnknown, \ + { Dep1, Dep2, Dep3, Dep4, Dep5 } \ + } + +/** + An enum desribing the states of the SMBIOS table dispatcher. +*/ +typedef enum SmbiosTableState { + StUnknown, ///< Initial state. + 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; + +/** + 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_ -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v1 2/2] DynamicTablesPkg: Add SMBIOS table dispatcher 2022-10-18 15:33 ` [PATCH v1 2/2] DynamicTablesPkg: Add SMBIOS table dispatcher Sami Mujawar @ 2022-10-25 0:54 ` Chang, Abner 0 siblings, 0 replies; 6+ messages in thread From: Chang, Abner @ 2022-10-25 0:54 UTC (permalink / raw) To: Sami Mujawar, devel@edk2.groups.io Cc: Alexei.Fedorov@arm.com, pierre.gondois@arm.com, gmahadevan@nvidia.com, jbrasen@nvidia.com, ashishsingha@nvidia.com, nramirez@nvidia.com, wwatson@nvidia.com, Matteo.Carlini@arm.com, Akanksha.Jain2@arm.com, Ben.Adderson@arm.com, Samer.El-Haj-Mahmoud@arm.com, nd@arm.com [AMD Official Use Only - General] > -----Original Message----- > From: Sami Mujawar <sami.mujawar@arm.com> > Sent: Tuesday, October 18, 2022 11:34 PM > To: devel@edk2.groups.io > Cc: Sami Mujawar <sami.mujawar@arm.com>; Alexei.Fedorov@arm.com; > pierre.gondois@arm.com; gmahadevan@nvidia.com; Chang, Abner > <Abner.Chang@amd.com>; jbrasen@nvidia.com; ashishsingha@nvidia.com; > nramirez@nvidia.com; wwatson@nvidia.com; Matteo.Carlini@arm.com; > Akanksha.Jain2@arm.com; Ben.Adderson@arm.com; Samer.El-Haj- > Mahmoud@arm.com; nd@arm.com > Subject: [PATCH v1 2/2] DynamicTablesPkg: Add SMBIOS table dispatcher > > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. > > > 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 <sami.mujawar@arm.com> > Cc: Alexei Fedorov <Alexei.Fedorov@arm.com> > Cc: Pierre Gondois <pierre.gondois@arm.com> > Cc: Girish Mahadevan <gmahadevan@nvidia.com> > Cc: Jeff Brasen <jbrasen@nvidia.com> > Cc: Ashish Singhal <ashishsingha@nvidia.com> > Cc: Nick Ramirez <nramirez@nvidia.com> > Cc: William Watson <wwatson@nvidia.com> > Cc: Abner Chang <abner.chang@amd.com> > Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> > --- > > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManag > erDxe.inf | 4 +- > > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatch > er.c | 304 ++++++++++++++++++++ > > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatch > er.h | 133 +++++++++ > 3 files changed, 440 insertions(+), 1 deletion(-) > > diff --git > a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableMan > agerDxe.inf > b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableMan > agerDxe.inf > index > ad8b3d037c169ca848b5ea84fd1086b83f37876f..b09272d883c6f4f05eb03dcdab > 3efeda92b2fbb6 100644 > --- > a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableMan > agerDxe.inf > +++ > b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableMan > age > +++ 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/SmbiosTableDispat > cher.c > b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispat > cher.c > new file mode 100644 > index > 0000000000000000000000000000000000000000..88907fecdde5e36d40ac22cd4 > 86391abbb853e38 > --- /dev/null > +++ > b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispat > c > +++ her.c > @@ -0,0 +1,304 @@ > +/** @file > + Dynamic Smbios Table Dispatcher > + > + Copyright (c) 2022, Arm Limited. All rights reserved. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > +#include <Library/DebugLib.h> > +#include <Protocol/Smbios.h> > + > +#include <Include/StandardNameSpaceObjects.h> > +#include <SmbiosTableDispatcher.h> > + > +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 > + ); You can move above external reference to the header file. > + > +#if !defined (MDEPKG_NDEBUG) > + > +/** > + A string table describing the SMBIOS dispatcher states. > +*/ > +STATIC > +CONST CHAR8 *SmbiosTableStateTxt[] = { > + "StUnknown", > + "StNotPresent", > + "StPresent", > + "StDispatched" > +}; > + > +#endif You can merge above #if block with below #if !defined (MDEPKG_NDEBUG). Other looks good to me. Abner > + > +/** > + 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] > = { > + 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), > + 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) > +}; I'm not quite sure but is it possible a circular dependence? (for example, the cross reference handle) > + > +#if !defined (MDEPKG_NDEBUG) > + > +/** > + 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 = 0; > + Index < ARRAY_SIZE (mSmBiosDispatcher); Index++) { > + if ((!Verbose) && (mSmBiosDispatcher[Index].State < StPresent)) { > + 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; > + > + // First search for the list of SMBIOS tables presented // for > + installation and update the dispatcher status. > + for (Index = 0; Index < SmbiosTableCount; Index++) { > + TableType = SmbiosTableInfo[Index].TableType; > + ASSERT (mSmBiosDispatcher[TableType].State != StPresent); > + mSmBiosDispatcher[TableType].State = StPresent; } > + > + // Mark the remaining tables as not presented for installation for > + (Index = 0; Index < ARRAY_SIZE (mSmBiosDispatcher); Index++) { > + if (mSmBiosDispatcher[Index].State == StUnknown) { > + mSmBiosDispatcher[Index].State = StNotPresent; > + } > + } > + > + 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 = > + &mSmBiosDispatcher[TableType]; if (Disp->State < StPresent) { > + DEBUG ((DEBUG_VERBOSE, "<-DP %02d : EFI_NOT_FOUND\n", > TableType)); > + return EFI_NOT_FOUND; > + } > + > + if (Disp->State == StDispatched) { > + DEBUG ((DEBUG_VERBOSE, "<-DP %02d : EFI_ALREADY_STARTED\n", > TableType)); > + return EFI_ALREADY_STARTED; > + } > + > + // Table is present so check the dependency. > + for (Index = 0; Index < MAX_SMBIOS_DEPENDENCY; Index++) { > + // Check if the dependency list is terminated by SMTT_NULL. > + if (Disp->Dependency[Index] == SMTT_NULL) { > + break; > + } > + > + Status = DispatchSmbiosTable ( > + Disp->Dependency[Index], > + TableFactoryProtocol, > + CfgMgrProtocol, > + SmbiosProtocol, > + SmbiosTableInfo, > + SmbiosTableCount > + ); > + if (EFI_ERROR (Status)) { > + if ((Status == EFI_ALREADY_STARTED) || (Status == 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 = %d\n", TableType, > Status)); > + return Status; > + } > + } > + > + DEBUG ((DEBUG_VERBOSE, "DP %02d : Status = %d\n", TableType, > + Status)); > + > + // All dependencies satisfied - Install SMBIOS table Disp->State = > + StDispatched; // Find the SMBIOS table info matching the TableType > + for (Index = 0; Index < SmbiosTableCount; Index++) { > + if (SmbiosTableInfo[Index].TableType == TableType) { > + break; > + } > + } > + > + Status = BuildAndInstallSmbiosTable ( > + TableFactoryProtocol, > + CfgMgrProtocol, > + SmbiosProtocol, > + &SmbiosTableInfo[Index] > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Failed to install SMBIOS Table." \ > + " Id = %u Status = %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/SmbiosTableDispat > cher.h > b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispat > cher.h > new file mode 100644 > index > 0000000000000000000000000000000000000000..420e16f62d58cf295b27174ce7 > 8ce9e2697918cb > --- /dev/null > +++ > b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispat > c > +++ her.h > @@ -0,0 +1,133 @@ > +/** @file > + > + Copyright (c) 2022, Arm Limited. All rights reserved. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef SMBIOS_TABLE_DISPATCHER_H_ > +#define SMBIOS_TABLE_DISPATCHER_H_ > + > +#include <Protocol/ConfigurationManagerProtocol.h> > +#include <Protocol/DynamicTableFactoryProtocol.h> > + > +/** > + 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, \ > + StUnknown, \ > + { Dep1, Dep2, Dep3, Dep4, Dep5 } \ > + } > + > +/** > + An enum desribing the states of the SMBIOS table dispatcher. > +*/ > +typedef enum SmbiosTableState { > + StUnknown, ///< Initial state. > + 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; > + > +/** > + 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_ > -- > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher 2022-10-18 15:33 [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher Sami Mujawar 2022-10-18 15:33 ` [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table type Sami Mujawar 2022-10-18 15:33 ` [PATCH v1 2/2] DynamicTablesPkg: Add SMBIOS table dispatcher Sami Mujawar @ 2022-10-25 12:29 ` PierreGondois 2 siblings, 0 replies; 6+ messages in thread From: PierreGondois @ 2022-10-25 12:29 UTC (permalink / raw) To: Sami Mujawar, devel Cc: Alexei.Fedorov, gmahadevan, abner.chang, jbrasen, ashishsingha, nramirez, wwatson, Matteo.Carlini, Akanksha.Jain2, Ben.Adderson, Samer.El-Haj-Mahmoud, nd Hello Sami, Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Regards, Pierre On 10/18/22 17:33, Sami Mujawar wrote: > Some SMBIOS tables have dependencies on other SMBIOS tables. These > dependencies are established using handles pointing to the dependent > SMBIOS tables. > This requires the dependent SMBIOS table to be installed before the > parent SMBIOS table can be installed. > > To facilitate dynamic SMBIOS table generation, a SMBIOS table > dispatcher has been introduced. The SMBIOS table dispatcher > schedules the installation of dependent SMBIOS tables before > the parent SMBIOS table is installed. > > The changes can be seen at: > https://github.com/samimujawar/edk2/tree/2406_smbios_dispatcher_v1 > > Sami Mujawar (2): > DynamicTablesPkg: Define a SMBIOS Structure/Table type > DynamicTablesPkg: Add SMBIOS table dispatcher > > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf | 4 +- > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.c | 304 ++++++++++++++++++++ > DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.h | 133 +++++++++ > DynamicTablesPkg/Include/StandardNameSpaceObjects.h | 17 ++ > 4 files changed, 457 insertions(+), 1 deletion(-) > create mode 100644 DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.c > create mode 100644 DynamicTablesPkg/Drivers/DynamicTableManagerDxe/SmbiosTableDispatcher.h > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-10-25 12:29 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-10-18 15:33 [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher Sami Mujawar 2022-10-18 15:33 ` [PATCH v1 1/2] DynamicTablesPkg: Define a SMBIOS Structure/Table type Sami Mujawar 2022-10-25 0:56 ` Chang, Abner 2022-10-18 15:33 ` [PATCH v1 2/2] DynamicTablesPkg: Add SMBIOS table dispatcher Sami Mujawar 2022-10-25 0:54 ` Chang, Abner 2022-10-25 12:29 ` [PATCH v1 0/2] DynamicTablesPkg: Introduce SMBIOS dispatcher PierreGondois
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox