From 1d8239c4fc8434babb91ae1355ef07aa6a0d073a Mon Sep 17 00:00:00 2001 From: Girish Mahadevan Date: Sat, 11 Jul 2026 16:20:13 +0000 Subject: [PATCH] DynamicTablesPkg: Add System Enclosure CM object and parser Signed-off-by: Girish Mahadevan --- .../Include/ArchCommonNameSpaceObjects.h | 65 ++++++++++++++++++- .../ConfigurationManagerObjectParser.c | 34 +++++++++- 2 files changed, 97 insertions(+), 2 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 70837b15ba..165fe73d1a 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -1,7 +1,7 @@ /** @file Copyright (c) 2024 - 2026, Arm Limited. All rights reserved.
- Copyright (c) 2024 - 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ Copyright (c) 2024 - 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Copyright (C) 2024 - 2025, Advanced Micro Devices, Inc. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @@ -127,6 +127,8 @@ typedef enum ArchCommonObjectID { EArchCommonObjAdditionalInformation, ///< 68 - Additional Information EArchCommonObjAdditionalInformationEntry, ///< 69 - Additional Information Entry EArchCommonObjAdditionalInformationValue, ///< 70 - Additional Information Value + EArchCommonObjSystemEnclosureInfo, ///< 71 - System Enclosure Info + EArchCommonObjEnclosureElement, ///< 72 - System Enclosure Contained Element EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -1836,4 +1838,65 @@ typedef struct CmArchCommonAdditionalInformationValue { UINT8 Value[SMBIOS_MAX_ADDITIONAL_INFORMATION_VALUE_SIZE]; } CM_ARCH_COMMON_ADDITIONAL_INFORMATION_VALUE; +/** A structure that describes a System Enclosure Contained Element. + + SMBIOS Specification v3.9.0 Type 3 + + ID: EArchCommonObjEnclosureElement +**/ +typedef struct CmArchCommonEnclosureElement { + /// The contained element type. + UINT8 ContainedElementType; + + /// Minimum number of the element type required for proper operation. + UINT8 ContainedElementMinimum; + + /// Maximum number of the element type that can be installed. + UINT8 ContainedElementMaximum; +} CM_ARCH_COMMON_ENCLOSURE_ELEMENT; + +/** A structure that describes System Enclosure Information. + + SMBIOS Specification v3.9.0 Type 3 + + ID: EArchCommonObjSystemEnclosureInfo +**/ +typedef struct CmArchCommonSystemEnclosureInfo { + /// CM Object Token uniquely identifying this System Enclosure entry. + CM_OBJECT_TOKEN SystemEnclosureToken; + /// Manufacturer of the enclosure. + CHAR8 Manufacturer[SMBIOS_MAX_STRING_SIZE]; + /// Chassis type with the lock-present bit in bit 7. + UINT8 Type; + /// Version of the enclosure. + CHAR8 Version[SMBIOS_MAX_STRING_SIZE]; + /// Serial number of the enclosure. + CHAR8 SerialNum[SMBIOS_MAX_STRING_SIZE]; + /// Asset tag of the enclosure. + CHAR8 AssetTag[SMBIOS_MAX_STRING_SIZE]; + /// Boot-up state as defined by SMBIOS Type 3. + UINT8 BootUpState; + /// Power supply state as defined by SMBIOS Type 3. + UINT8 PowerSupplyState; + /// Thermal state as defined by SMBIOS Type 3. + UINT8 ThermalState; + /// Security status as defined by SMBIOS Type 3. + UINT8 SecurityStatus; + /// OEM-defined value. + UINT32 OemDefined; + /// Height of the enclosure in rack units. + UINT8 Height; + /// Number of power cords associated with the enclosure. + UINT8 NumberOfPowerCords; + /// Token referencing an array of System Enclosure Contained Elements. + /// CM_NULL_TOKEN indicates that no contained elements are supplied. + CM_OBJECT_TOKEN ContainedElementListToken; + /// SKU number of the enclosure. + CHAR8 SkuNum[SMBIOS_MAX_STRING_SIZE]; + /// Rack type as defined by SMBIOS Type 3. + UINT8 RackType; + /// Rack height in rack units when Height is 0xFF. + UINT8 RackHeight; +} CM_ARCH_COMMON_SYSTEM_ENCLOSURE_INFO; + #pragma pack() diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 45e2d9e46d..d1f08ea26a 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -3,7 +3,7 @@ Copyright (c) 2021 - 2026, ARM Limited. All rights reserved.
Copyright (C) 2024 - 2025 Advanced Micro Devices, Inc. All rights reserved. - Copyright (c) 2024 - 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ Copyright (c) 2024 - 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -1367,6 +1367,36 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonSystemInfoParser[] = { { "Family", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, }; +/** A parser for EArchCommonObjSystemEnclosureInfo. +*/ +STATIC CONST CM_OBJ_PARSER CmArchCommonSystemEnclosureInfoParser[] = { + { "SystemEnclosureToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, + { "Manufacturer", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "Type", sizeof (UINT8), "0x%x", NULL }, + { "Version", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "SerialNum", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "AssetTag", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "BootUpState", sizeof (UINT8), "0x%x", NULL }, + { "PowerSupplyState", sizeof (UINT8), "0x%x", NULL }, + { "ThermalState", sizeof (UINT8), "0x%x", NULL }, + { "SecurityStatus", sizeof (UINT8), "0x%x", NULL }, + { "OemDefined", sizeof (UINT32), "0x%x", NULL }, + { "Height", sizeof (UINT8), "0x%x", NULL }, + { "NumberOfPowerCords", sizeof (UINT8), "0x%x", NULL }, + { "ContainedElementListToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, + { "SkuNum", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "RackType", sizeof (UINT8), "0x%x", NULL }, + { "RackHeight", sizeof (UINT8), "0x%x", NULL }, +}; + +/** A parser for EArchCommonObjEnclosureElement. +*/ +STATIC CONST CM_OBJ_PARSER CmArchCommonEnclosureElementParser[] = { + { "ContainedElementType", sizeof (UINT8), "0x%x", NULL }, + { "ContainedElementMinimum", sizeof (UINT8), "%u", NULL }, + { "ContainedElementMaximum", sizeof (UINT8), "%u", NULL }, +}; + /** A parser for Arch Common namespace objects. */ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { @@ -1442,6 +1472,8 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjAdditionalInformation, CmArchCommonAdditionalInformationParser), CM_PARSER_ADD_OBJECT (EArchCommonObjAdditionalInformationEntry, CmArchCommonAdditionalInformationEntryParser), CM_PARSER_ADD_OBJECT (EArchCommonObjAdditionalInformationValue, CmArchCommonAdditionalInformationValueParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSystemEnclosureInfo, CmArchCommonSystemEnclosureInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjEnclosureElement, CmArchCommonEnclosureElementParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) };