diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 759dedc03b..da543b8495 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -93,6 +93,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjMemoryChannelInfo, ///< 64 - Memory Channel Info EArchCommonObjMemoryChannelDevice, ///< 65 - Memory Channel Device Info EArchCommonObjProcessorSpecificBlockInfo, ///< 66 - Processor specific data Info + EArchCommonObjSystemInfo, ///< 67 - System Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -1727,4 +1728,31 @@ typedef struct CmArchCommonProcessorSpecificBlockInfo { CM_OBJECT_TOKEN ArchProcessorSpecificDataToken; } CM_ARCH_COMMON_PROCESSOR_SPECIFIC_BLOCK_INFO; +/** A structure that describes System Information. + + SMBIOS Specification v3.9.0 Type 1 + + ID: EArchCommonObjSystemInfo +**/ +typedef struct CmArchCommonSystemInfo { + /// CM Object Token uniquely identifying this System Information entry. + CM_OBJECT_TOKEN SystemInfoToken; + /// Manufacturer of the system. + CHAR8 Manufacturer[SMBIOS_MAX_STRING_SIZE]; + /// Product name of the system. + CHAR8 ProductName[SMBIOS_MAX_STRING_SIZE]; + /// Version of the system. + CHAR8 Version[SMBIOS_MAX_STRING_SIZE]; + /// Serial number of the system. + CHAR8 SerialNum[SMBIOS_MAX_STRING_SIZE]; + /// Universal unique ID of the system. + GUID Uuid; + /// Identifies the event that caused the system to power up. + UINT8 WakeUpType; + /// SKU number of the system. + CHAR8 SkuNum[SMBIOS_MAX_STRING_SIZE]; + /// Family that the system belongs to. + CHAR8 Family[SMBIOS_MAX_STRING_SIZE]; +} CM_ARCH_COMMON_SYSTEM_INFO; + #pragma pack() diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 7b3f612866..77b94121f3 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -41,6 +41,15 @@ PrintChars ( UINT32 Length ); +STATIC +VOID +EFIAPI +PrintGuid ( + CONST CHAR8 *Format, + UINT8 *Ptr, + UINT32 Length + ); + STATIC VOID EFIAPI @@ -1320,76 +1329,92 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonSystemResetInfoParser[] = { { "Timeout", sizeof (UINT16), "0x%x", NULL }, }; +/** A parser for EArchCommonObjSystemInfo. +*/ +STATIC CONST CM_OBJ_PARSER CmArchCommonSystemInfoParser[] = { + { "SystemInfoToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, + { "Manufacturer", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "ProductName", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "Version", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "SerialNum", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "Uuid", sizeof (GUID), NULL, PrintGuid }, + { "WakeUpType", sizeof (UINT8), "0x%x", NULL }, + { "SkuNum", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, + { "Family", SMBIOS_MAX_STRING_SIZE, NULL, PrintString }, +}; + /** A parser for Arch Common namespace objects. */ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjReserved), - CM_PARSER_ADD_OBJECT (EArchCommonObjPowerManagementProfileInfo, CmArchCommonPowerManagementProfileInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjSerialPortInfo, CmArchCommonSerialPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjConsolePortInfo, CmArchCommonSerialPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryAffinityInfo, CmArchCommonMemoryAffinityInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandleAcpi, CmArchCommonDeviceHandleAcpiParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandlePci, CmArchCommonDeviceHandlePciParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjGenericInitiatorAffinityInfo, CmArchCommonGenericInitiatorAffinityInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjLpiInfo, CmArchCommonLpiInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjProcHierarchyInfo, CmArchCommonProcHierarchyInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjCacheInfo, CmArchCommonCacheInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjCpcInfo, CmArchCommonCpcInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType0Info, CmArchCommonPccSubspaceType0InfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType1Info, CmArchCommonPccSubspaceType1InfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType2Info, CmArchCommonPccSubspaceType2InfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType3Info, CmArchCommonPccSubspaceType34InfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType4Info, CmArchCommonPccSubspaceType34InfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType5Info, CmArchCommonPccSubspaceType5InfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPsdInfo, CmArchCommonPsdInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjTpm2InterfaceInfo, CmArchCommonTpm2InterfaceInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjSpmiInterfaceInfo, CmArchCommonSpmiInterfaceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjSpmiInterruptDeviceInfo, CmArchCommonSpmiInterruptDeviceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjCstInfo, CmArchCommonCstInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjCsdInfo, CmArchCommonCsdInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPctInfo, CmArchCommonPctInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPssInfo, CmArchCommonPssInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPpcInfo, CmArchCommonPpcInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjStaInfo, CmArchCommonStaInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryRangeDescriptor, CmArchCommonObjMemoryRangeDescriptor), - CM_PARSER_ADD_OBJECT (EArchCommonObjGenericDbg2DeviceInfo, CmArchCommonObjDbg2DeviceInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjCxlHostBridgeInfo, CmArchCommonObjCxlHostBridgeInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjCxlFixedMemoryWindowInfo, CmArchCommonObjCxlFixedMemoryWindowInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjProximityDomainInfo, CmArchCommonProximityDomainInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjProximityDomainRelationInfo, CmArchCommonProximityDomainRelationInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjSystemLocalityInfo, CmArchCommonSystemLocalityInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryProximityDomainAttrInfo,CmArchCommonMemoryProximityDomainAttrInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryLatBwInfo, CmArchCommonMemoryLatBwInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryCacheInfo, CmArchCommonMemoryCacheInfo), - CM_PARSER_ADD_OBJECT (EArchCommonObjSpcrInfo, CmArchCommonObjSpcrInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjTpm2DeviceInfo, CmArchCommonObjTpm2DeviceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMcfgPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPciRootPortInfo, CmArchCommonObjPciRootPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourcePciRootPortInfo, CmArchCommonObjErrSourcePciRootPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourcePciDeviceInfo, CmArchCommonObjErrSourcePciDeviceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourcePciBridgeInfo, CmArchCommonObjErrSourcePciBridgeInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourceGenericHwInfo, CmArchCommonObjErrSourceGenericHwInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourceGenericHwVer2Info, CmArchCommonObjErrSourceGenericHwVer2InfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjEinjInstructionsInfo, CmArchCommonObjEinjInstructionsInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPlatformFwInfo, CmArchCommonPlatformFwInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPhysicalMemoryArray, CmArchCommonPhysicalMemoryArrayParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryDeviceInfo, CmArchCommonMemoryDeviceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryArrayMappedAddress, CmArchCommonMemoryArrayMappedAddressParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjCoolingDeviceInfo, CmArchCommonCoolingDeviceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjTemperatureProbeInfo, CmArchCommonTemperatureProbeInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjVoltageProbeInfo, CmArchCommonVoltageProbeInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjElectricalCurrentProbeInfo, CmArchCommonElectricalCurrentProbeInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjSystemResetInfo, CmArchCommonSystemResetInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryDeviceMappedAddress, CmArchCommonMemoryDeviceMappedAddressParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryChannelInfo, CmArchCommonMemoryChannelInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryChannelDevice, CmArchCommonMemoryChannelDeviceParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPowerManagementProfileInfo, CmArchCommonPowerManagementProfileInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSerialPortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjConsolePortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryAffinityInfo, CmArchCommonMemoryAffinityInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandleAcpi, CmArchCommonDeviceHandleAcpiParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandlePci, CmArchCommonDeviceHandlePciParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjGenericInitiatorAffinityInfo, CmArchCommonGenericInitiatorAffinityInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjLpiInfo, CmArchCommonLpiInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjProcHierarchyInfo, CmArchCommonProcHierarchyInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCacheInfo, CmArchCommonCacheInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCpcInfo, CmArchCommonCpcInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType0Info, CmArchCommonPccSubspaceType0InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType1Info, CmArchCommonPccSubspaceType1InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType2Info, CmArchCommonPccSubspaceType2InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType3Info, CmArchCommonPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType4Info, CmArchCommonPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType5Info, CmArchCommonPccSubspaceType5InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPsdInfo, CmArchCommonPsdInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjTpm2InterfaceInfo, CmArchCommonTpm2InterfaceInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjSpmiInterfaceInfo, CmArchCommonSpmiInterfaceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSpmiInterruptDeviceInfo, CmArchCommonSpmiInterruptDeviceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCstInfo, CmArchCommonCstInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCsdInfo, CmArchCommonCsdInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPctInfo, CmArchCommonPctInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPssInfo, CmArchCommonPssInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPpcInfo, CmArchCommonPpcInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjStaInfo, CmArchCommonStaInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryRangeDescriptor, CmArchCommonObjMemoryRangeDescriptor), + CM_PARSER_ADD_OBJECT (EArchCommonObjGenericDbg2DeviceInfo, CmArchCommonObjDbg2DeviceInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjCxlHostBridgeInfo, CmArchCommonObjCxlHostBridgeInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjCxlFixedMemoryWindowInfo, CmArchCommonObjCxlFixedMemoryWindowInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjProximityDomainInfo, CmArchCommonProximityDomainInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjProximityDomainRelationInfo, CmArchCommonProximityDomainRelationInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjSystemLocalityInfo, CmArchCommonSystemLocalityInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryProximityDomainAttrInfo, CmArchCommonMemoryProximityDomainAttrInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryLatBwInfo, CmArchCommonMemoryLatBwInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryCacheInfo, CmArchCommonMemoryCacheInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjSpcrInfo, CmArchCommonObjSpcrInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjTpm2DeviceInfo, CmArchCommonObjTpm2DeviceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMcfgPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciRootPortInfo, CmArchCommonObjPciRootPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourcePciRootPortInfo, CmArchCommonObjErrSourcePciRootPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourcePciDeviceInfo, CmArchCommonObjErrSourcePciDeviceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourcePciBridgeInfo, CmArchCommonObjErrSourcePciBridgeInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourceGenericHwInfo, CmArchCommonObjErrSourceGenericHwInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjErrSourceGenericHwVer2Info, CmArchCommonObjErrSourceGenericHwVer2InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjEinjInstructionsInfo, CmArchCommonObjEinjInstructionsInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPlatformFwInfo, CmArchCommonPlatformFwInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPhysicalMemoryArray, CmArchCommonPhysicalMemoryArrayParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryDeviceInfo, CmArchCommonMemoryDeviceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryArrayMappedAddress, CmArchCommonMemoryArrayMappedAddressParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCoolingDeviceInfo, CmArchCommonCoolingDeviceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjTemperatureProbeInfo, CmArchCommonTemperatureProbeInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjVoltageProbeInfo, CmArchCommonVoltageProbeInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjElectricalCurrentProbeInfo, CmArchCommonElectricalCurrentProbeInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSystemResetInfo, CmArchCommonSystemResetInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryDeviceMappedAddress, CmArchCommonMemoryDeviceMappedAddressParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryChannelInfo, CmArchCommonMemoryChannelInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryChannelDevice, CmArchCommonMemoryChannelDeviceParser), + CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjProcessorSpecificBlockInfo), + CM_PARSER_ADD_OBJECT (EArchCommonObjSystemInfo, CmArchCommonSystemInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -1786,6 +1811,29 @@ PrintString ( DEBUG ((DEBUG_INFO, "%a", Ptr)); } +/** Print GUID data. + + @param [in] Format Format to print the Ptr. + @param [in] Ptr Pointer to the GUID. + @param [in] Length Length of the field. +**/ +STATIC +VOID +EFIAPI +PrintGuid ( + IN CONST CHAR8 *Format, + IN UINT8 *Ptr, + IN UINT32 Length + ) +{ + if ((Ptr == NULL) || (Length != sizeof (GUID))) { + ASSERT (0); + return; + } + + DEBUG ((DEBUG_INFO, "%g", (GUID *)Ptr)); +} + /** Print string from pointer. The string must be NULL terminated.