1 /** @file 2 Industry Standard Definitions of SMBIOS Table Specification v3.6.0. 3 4 Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR> 5 (C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP<BR> 6 (C) Copyright 2015 - 2019 Hewlett Packard Enterprise Development LP<BR> 7 Copyright (c) 2022, AMD Incorporated. All rights reserved.<BR> 8 Copyright (c) 1985 - 2022, American Megatrends International LLC.<BR> 9 SPDX-License-Identifier: BSD-2-Clause-Patent 10 11 **/ 12 13 #ifndef __SMBIOS_STANDARD_H__ 14 #define __SMBIOS_STANDARD_H__ 15 16 /// 17 /// Reference SMBIOS 2.6, chapter 3.1.2. 18 /// For v2.1 and later, handle values in the range 0FF00h to 0FFFFh are reserved for 19 /// use by this specification. 20 /// 21 #define SMBIOS_HANDLE_RESERVED_BEGIN 0xFF00 22 23 /// 24 /// Reference SMBIOS 2.7, chapter 6.1.2. 25 /// The UEFI Platform Initialization Specification reserves handle number FFFEh for its 26 /// EFI_SMBIOS_PROTOCOL.Add() function to mean "assign an unused handle number automatically." 27 /// This number is not used for any other purpose by the SMBIOS specification. 28 /// 29 #define SMBIOS_HANDLE_PI_RESERVED 0xFFFE 30 31 /// 32 /// Reference SMBIOS 2.6, chapter 3.1.3. 33 /// Each text string is limited to 64 significant characters due to system MIF limitations. 34 /// Reference SMBIOS 2.7, chapter 6.1.3. 35 /// It will have no limit on the length of each individual text string. 36 /// 37 #define SMBIOS_STRING_MAX_LENGTH 64 38 39 // 40 // The length of the entire structure table (including all strings) must be reported 41 // in the Structure Table Length field of the SMBIOS Structure Table Entry Point, 42 // which is a WORD field limited to 65,535 bytes. 43 // 44 #define SMBIOS_TABLE_MAX_LENGTH 0xFFFF 45 46 // 47 // For SMBIOS 3.0, Structure table maximum size in Entry Point structure is DWORD field limited to 0xFFFFFFFF bytes. 48 // 49 #define SMBIOS_3_0_TABLE_MAX_LENGTH 0xFFFFFFFF 50 51 // 52 // SMBIOS type macros which is according to SMBIOS 3.3.0 specification. 53 // 54 #define SMBIOS_TYPE_BIOS_INFORMATION 0 55 #define SMBIOS_TYPE_SYSTEM_INFORMATION 1 56 #define SMBIOS_TYPE_BASEBOARD_INFORMATION 2 57 #define SMBIOS_TYPE_SYSTEM_ENCLOSURE 3 58 #define SMBIOS_TYPE_PROCESSOR_INFORMATION 4 59 #define SMBIOS_TYPE_MEMORY_CONTROLLER_INFORMATION 5 60 #define SMBIOS_TYPE_MEMORY_MODULE_INFORMATON 6 61 #define SMBIOS_TYPE_CACHE_INFORMATION 7 62 #define SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION 8 63 #define SMBIOS_TYPE_SYSTEM_SLOTS 9 64 #define SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION 10 65 #define SMBIOS_TYPE_OEM_STRINGS 11 66 #define SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS 12 67 #define SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION 13 68 #define SMBIOS_TYPE_GROUP_ASSOCIATIONS 14 69 #define SMBIOS_TYPE_SYSTEM_EVENT_LOG 15 70 #define SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY 16 71 #define SMBIOS_TYPE_MEMORY_DEVICE 17 72 #define SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION 18 73 #define SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS 19 74 #define SMBIOS_TYPE_MEMORY_DEVICE_MAPPED_ADDRESS 20 75 #define SMBIOS_TYPE_BUILT_IN_POINTING_DEVICE 21 76 #define SMBIOS_TYPE_PORTABLE_BATTERY 22 77 #define SMBIOS_TYPE_SYSTEM_RESET 23 78 #define SMBIOS_TYPE_HARDWARE_SECURITY 24 79 #define SMBIOS_TYPE_SYSTEM_POWER_CONTROLS 25 80 #define SMBIOS_TYPE_VOLTAGE_PROBE 26 81 #define SMBIOS_TYPE_COOLING_DEVICE 27 82 #define SMBIOS_TYPE_TEMPERATURE_PROBE 28 83 #define SMBIOS_TYPE_ELECTRICAL_CURRENT_PROBE 29 84 #define SMBIOS_TYPE_OUT_OF_BAND_REMOTE_ACCESS 30 85 #define SMBIOS_TYPE_BOOT_INTEGRITY_SERVICE 31 86 #define SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION 32 87 #define SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION 33 88 #define SMBIOS_TYPE_MANAGEMENT_DEVICE 34 89 #define SMBIOS_TYPE_MANAGEMENT_DEVICE_COMPONENT 35 90 #define SMBIOS_TYPE_MANAGEMENT_DEVICE_THRESHOLD_DATA 36 91 #define SMBIOS_TYPE_MEMORY_CHANNEL 37 92 #define SMBIOS_TYPE_IPMI_DEVICE_INFORMATION 38 93 #define SMBIOS_TYPE_SYSTEM_POWER_SUPPLY 39 94 #define SMBIOS_TYPE_ADDITIONAL_INFORMATION 40 95 #define SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION 41 96 #define SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE 42 97 #define SMBIOS_TYPE_TPM_DEVICE 43 98 #define SMBIOS_TYPE_PROCESSOR_ADDITIONAL_INFORMATION 44 99 #define SMBIOS_TYPE_FIRMWARE_INVENTORY_INFORMATION 45 100 #define SMBIOS_TYPE_STRING_PROPERTY_INFORMATION 46 101 102 /// 103 /// Inactive type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.43. 104 /// Upper-level software that interprets the SMBIOS structure-table should bypass an 105 /// Inactive structure just like a structure type that the software does not recognize. 106 /// 107 #define SMBIOS_TYPE_INACTIVE 0x007E 108 109 /// 110 /// End-of-table type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.44. 111 /// The end-of-table indicator is used in the last physical structure in a table 112 /// 113 #define SMBIOS_TYPE_END_OF_TABLE 0x007F 114 115 #define SMBIOS_OEM_BEGIN 128 116 #define SMBIOS_OEM_END 255 117 118 /// 119 /// Types 0 through 127 (7Fh) are reserved for and defined by this 120 /// specification. Types 128 through 256 (80h to FFh) are available for system- and OEM-specific information. 121 /// 122 typedef UINT8 SMBIOS_TYPE; 123 124 /// 125 /// Specifies the structure's handle, a unique 16-bit number in the range 0 to 0FFFEh (for version 126 /// 2.0) or 0 to 0FEFFh (for version 2.1 and later). The handle can be used with the Get SMBIOS 127 /// Structure function to retrieve a specific structure; the handle numbers are not required to be 128 /// contiguous. For v2.1 and later, handle values in the range 0FF00h to 0FFFFh are reserved for 129 /// use by this specification. 130 /// If the system configuration changes, a previously assigned handle might no longer exist. 131 /// However once a handle has been assigned by the BIOS, the BIOS cannot re-assign that handle 132 /// number to another structure. 133 /// 134 typedef UINT16 SMBIOS_HANDLE; 135 136 /// 137 /// Smbios Table Entry Point Structure. 138 /// 139 #pragma pack(1) 140 typedef struct { 141 UINT8 AnchorString[4]; 142 UINT8 EntryPointStructureChecksum; 143 UINT8 EntryPointLength; 144 UINT8 MajorVersion; 145 UINT8 MinorVersion; 146 UINT16 MaxStructureSize; 147 UINT8 EntryPointRevision; 148 UINT8 FormattedArea[5]; 149 UINT8 IntermediateAnchorString[5]; 150 UINT8 IntermediateChecksum; 151 UINT16 TableLength; 152 UINT32 TableAddress; 153 UINT16 NumberOfSmbiosStructures; 154 UINT8 SmbiosBcdRevision; 155 } SMBIOS_TABLE_ENTRY_POINT; 156 157 typedef struct { 158 UINT8 AnchorString[5]; 159 UINT8 EntryPointStructureChecksum; 160 UINT8 EntryPointLength; 161 UINT8 MajorVersion; 162 UINT8 MinorVersion; 163 UINT8 DocRev; 164 UINT8 EntryPointRevision; 165 UINT8 Reserved; 166 UINT32 TableMaximumSize; 167 UINT64 TableAddress; 168 } SMBIOS_TABLE_3_0_ENTRY_POINT; 169 170 /// 171 /// The Smbios structure header. 172 /// 173 typedef struct { 174 SMBIOS_TYPE Type; 175 UINT8 Length; 176 SMBIOS_HANDLE Handle; 177 } SMBIOS_STRUCTURE; 178 179 /// 180 /// Text strings associated with a given SMBIOS structure are returned in the dmiStrucBuffer, appended directly after 181 /// the formatted portion of the structure. This method of returning string information eliminates the need for 182 /// application software to deal with pointers embedded in the SMBIOS structure. Each string is terminated with a null 183 /// (00h) BYTE and the set of strings is terminated with an additional null (00h) BYTE. When the formatted portion of 184 /// a SMBIOS structure references a string, it does so by specifying a non-zero string number within the structure's 185 /// string-set. For example, if a string field contains 02h, it references the second string following the formatted portion 186 /// of the SMBIOS structure. If a string field references no string, a null (0) is placed in that string field. If the 187 /// formatted portion of the structure contains string-reference fields and all the string fields are set to 0 (no string 188 /// references), the formatted section of the structure is followed by two null (00h) BYTES. 189 /// 190 typedef UINT8 SMBIOS_TABLE_STRING; 191 192 /// 193 /// BIOS Characteristics 194 /// Defines which functions the BIOS supports. PCI, PCMCIA, Flash, etc. 195 /// 196 typedef struct { 197 UINT32 Reserved : 2; ///< Bits 0-1. 198 UINT32 Unknown : 1; 199 UINT32 BiosCharacteristicsNotSupported : 1; 200 UINT32 IsaIsSupported : 1; 201 UINT32 McaIsSupported : 1; 202 UINT32 EisaIsSupported : 1; 203 UINT32 PciIsSupported : 1; 204 UINT32 PcmciaIsSupported : 1; 205 UINT32 PlugAndPlayIsSupported : 1; 206 UINT32 ApmIsSupported : 1; 207 UINT32 BiosIsUpgradable : 1; 208 UINT32 BiosShadowingAllowed : 1; 209 UINT32 VlVesaIsSupported : 1; 210 UINT32 EscdSupportIsAvailable : 1; 211 UINT32 BootFromCdIsSupported : 1; 212 UINT32 SelectableBootIsSupported : 1; 213 UINT32 RomBiosIsSocketed : 1; 214 UINT32 BootFromPcmciaIsSupported : 1; 215 UINT32 EDDSpecificationIsSupported : 1; 216 UINT32 JapaneseNecFloppyIsSupported : 1; 217 UINT32 JapaneseToshibaFloppyIsSupported : 1; 218 UINT32 Floppy525_360IsSupported : 1; 219 UINT32 Floppy525_12IsSupported : 1; 220 UINT32 Floppy35_720IsSupported : 1; 221 UINT32 Floppy35_288IsSupported : 1; 222 UINT32 PrintScreenIsSupported : 1; 223 UINT32 Keyboard8042IsSupported : 1; 224 UINT32 SerialIsSupported : 1; 225 UINT32 PrinterIsSupported : 1; 226 UINT32 CgaMonoIsSupported : 1; 227 UINT32 NecPc98 : 1; 228 UINT32 ReservedForVendor : 32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor 229 ///< and bits 48-63 reserved for System Vendor. 230 } MISC_BIOS_CHARACTERISTICS; 231 232 /// 233 /// BIOS Characteristics Extension Byte 1. 234 /// This information, available for SMBIOS version 2.1 and later, appears at offset 12h 235 /// within the BIOS Information structure. 236 /// 237 typedef struct { 238 UINT8 AcpiIsSupported : 1; 239 UINT8 UsbLegacyIsSupported : 1; 240 UINT8 AgpIsSupported : 1; 241 UINT8 I2OBootIsSupported : 1; 242 UINT8 Ls120BootIsSupported : 1; 243 UINT8 AtapiZipDriveBootIsSupported : 1; 244 UINT8 Boot1394IsSupported : 1; 245 UINT8 SmartBatteryIsSupported : 1; 246 } MBCE_BIOS_RESERVED; 247 248 /// 249 /// BIOS Characteristics Extension Byte 2. 250 /// This information, available for SMBIOS version 2.3 and later, appears at offset 13h 251 /// within the BIOS Information structure. 252 /// 253 typedef struct { 254 UINT8 BiosBootSpecIsSupported : 1; 255 UINT8 FunctionKeyNetworkBootIsSupported : 1; 256 UINT8 TargetContentDistributionEnabled : 1; 257 UINT8 UefiSpecificationSupported : 1; 258 UINT8 VirtualMachineSupported : 1; 259 UINT8 ManufacturingModeSupported : 1; 260 UINT8 ManufacturingModeEnabled : 1; 261 UINT8 ExtensionByte2Reserved : 1; 262 } MBCE_SYSTEM_RESERVED; 263 264 /// 265 /// BIOS Characteristics Extension Bytes. 266 /// 267 typedef struct { 268 MBCE_BIOS_RESERVED BiosReserved; 269 MBCE_SYSTEM_RESERVED SystemReserved; 270 } MISC_BIOS_CHARACTERISTICS_EXTENSION; 271 272 /// 273 /// Extended BIOS ROM size. 274 /// 275 typedef struct { 276 UINT16 Size : 14; 277 UINT16 Unit : 2; 278 } EXTENDED_BIOS_ROM_SIZE; 279 280 /// 281 /// BIOS Information (Type 0). 282 /// 283 typedef struct { 284 SMBIOS_STRUCTURE Hdr; 285 SMBIOS_TABLE_STRING Vendor; 286 SMBIOS_TABLE_STRING BiosVersion; 287 UINT16 BiosSegment; 288 SMBIOS_TABLE_STRING BiosReleaseDate; 289 UINT8 BiosSize; 290 MISC_BIOS_CHARACTERISTICS BiosCharacteristics; 291 UINT8 BIOSCharacteristicsExtensionBytes[2]; 292 UINT8 SystemBiosMajorRelease; 293 UINT8 SystemBiosMinorRelease; 294 UINT8 EmbeddedControllerFirmwareMajorRelease; 295 UINT8 EmbeddedControllerFirmwareMinorRelease; 296 // 297 // Add for smbios 3.1.0 298 // 299 EXTENDED_BIOS_ROM_SIZE ExtendedBiosSize; 300 } SMBIOS_TABLE_TYPE0; 301 302 /// 303 /// System Wake-up Type. 304 /// 305 typedef enum { 306 SystemWakeupTypeReserved = 0x00, 307 SystemWakeupTypeOther = 0x01, 308 SystemWakeupTypeUnknown = 0x02, 309 SystemWakeupTypeApmTimer = 0x03, 310 SystemWakeupTypeModemRing = 0x04, 311 SystemWakeupTypeLanRemote = 0x05, 312 SystemWakeupTypePowerSwitch = 0x06, 313 SystemWakeupTypePciPme = 0x07, 314 SystemWakeupTypeAcPowerRestored = 0x08 315 } MISC_SYSTEM_WAKEUP_TYPE; 316 317 /// 318 /// System Information (Type 1). 319 /// 320 /// The information in this structure defines attributes of the overall system and is 321 /// intended to be associated with the Component ID group of the system's MIF. 322 /// An SMBIOS implementation is associated with a single system instance and contains 323 /// one and only one System Information (Type 1) structure. 324 /// 325 typedef struct { 326 SMBIOS_STRUCTURE Hdr; 327 SMBIOS_TABLE_STRING Manufacturer; 328 SMBIOS_TABLE_STRING ProductName; 329 SMBIOS_TABLE_STRING Version; 330 SMBIOS_TABLE_STRING SerialNumber; 331 GUID Uuid; 332 UINT8 WakeUpType; ///< The enumeration value from MISC_SYSTEM_WAKEUP_TYPE. 333 SMBIOS_TABLE_STRING SKUNumber; 334 SMBIOS_TABLE_STRING Family; 335 } SMBIOS_TABLE_TYPE1; 336 337 /// 338 /// Base Board - Feature Flags. 339 /// 340 typedef struct { 341 UINT8 Motherboard : 1; 342 UINT8 RequiresDaughterCard : 1; 343 UINT8 Removable : 1; 344 UINT8 Replaceable : 1; 345 UINT8 HotSwappable : 1; 346 UINT8 Reserved : 3; 347 } BASE_BOARD_FEATURE_FLAGS; 348 349 /// 350 /// Base Board - Board Type. 351 /// 352 typedef enum { 353 BaseBoardTypeUnknown = 0x1, 354 BaseBoardTypeOther = 0x2, 355 BaseBoardTypeServerBlade = 0x3, 356 BaseBoardTypeConnectivitySwitch = 0x4, 357 BaseBoardTypeSystemManagementModule = 0x5, 358 BaseBoardTypeProcessorModule = 0x6, 359 BaseBoardTypeIOModule = 0x7, 360 BaseBoardTypeMemoryModule = 0x8, 361 BaseBoardTypeDaughterBoard = 0x9, 362 BaseBoardTypeMotherBoard = 0xA, 363 BaseBoardTypeProcessorMemoryModule = 0xB, 364 BaseBoardTypeProcessorIOModule = 0xC, 365 BaseBoardTypeInterconnectBoard = 0xD 366 } BASE_BOARD_TYPE; 367 368 /// 369 /// Base Board (or Module) Information (Type 2). 370 /// 371 /// The information in this structure defines attributes of a system baseboard - 372 /// for example a motherboard, planar, or server blade or other standard system module. 373 /// 374 typedef struct { 375 SMBIOS_STRUCTURE Hdr; 376 SMBIOS_TABLE_STRING Manufacturer; 377 SMBIOS_TABLE_STRING ProductName; 378 SMBIOS_TABLE_STRING Version; 379 SMBIOS_TABLE_STRING SerialNumber; 380 SMBIOS_TABLE_STRING AssetTag; 381 BASE_BOARD_FEATURE_FLAGS FeatureFlag; 382 SMBIOS_TABLE_STRING LocationInChassis; 383 UINT16 ChassisHandle; 384 UINT8 BoardType; ///< The enumeration value from BASE_BOARD_TYPE. 385 UINT8 NumberOfContainedObjectHandles; 386 UINT16 ContainedObjectHandles[1]; 387 } SMBIOS_TABLE_TYPE2; 388 389 /// 390 /// System Enclosure or Chassis Types 391 /// 392 typedef enum { 393 MiscChassisTypeOther = 0x01, 394 MiscChassisTypeUnknown = 0x02, 395 MiscChassisTypeDeskTop = 0x03, 396 MiscChassisTypeLowProfileDesktop = 0x04, 397 MiscChassisTypePizzaBox = 0x05, 398 MiscChassisTypeMiniTower = 0x06, 399 MiscChassisTypeTower = 0x07, 400 MiscChassisTypePortable = 0x08, 401 MiscChassisTypeLapTop = 0x09, 402 MiscChassisTypeNotebook = 0x0A, 403 MiscChassisTypeHandHeld = 0x0B, 404 MiscChassisTypeDockingStation = 0x0C, 405 MiscChassisTypeAllInOne = 0x0D, 406 MiscChassisTypeSubNotebook = 0x0E, 407 MiscChassisTypeSpaceSaving = 0x0F, 408 MiscChassisTypeLunchBox = 0x10, 409 MiscChassisTypeMainServerChassis = 0x11, 410 MiscChassisTypeExpansionChassis = 0x12, 411 MiscChassisTypeSubChassis = 0x13, 412 MiscChassisTypeBusExpansionChassis = 0x14, 413 MiscChassisTypePeripheralChassis = 0x15, 414 MiscChassisTypeRaidChassis = 0x16, 415 MiscChassisTypeRackMountChassis = 0x17, 416 MiscChassisTypeSealedCasePc = 0x18, 417 MiscChassisMultiSystemChassis = 0x19, 418 MiscChassisCompactPCI = 0x1A, 419 MiscChassisAdvancedTCA = 0x1B, 420 MiscChassisBlade = 0x1C, 421 MiscChassisBladeEnclosure = 0x1D, 422 MiscChassisTablet = 0x1E, 423 MiscChassisConvertible = 0x1F, 424 MiscChassisDetachable = 0x20, 425 MiscChassisIoTGateway = 0x21, 426 MiscChassisEmbeddedPc = 0x22, 427 MiscChassisMiniPc = 0x23, 428 MiscChassisStickPc = 0x24 429 } MISC_CHASSIS_TYPE; 430 431 /// 432 /// System Enclosure or Chassis States . 433 /// 434 typedef enum { 435 ChassisStateOther = 0x01, 436 ChassisStateUnknown = 0x02, 437 ChassisStateSafe = 0x03, 438 ChassisStateWarning = 0x04, 439 ChassisStateCritical = 0x05, 440 ChassisStateNonRecoverable = 0x06 441 } MISC_CHASSIS_STATE; 442 443 /// 444 /// System Enclosure or Chassis Security Status. 445 /// 446 typedef enum { 447 ChassisSecurityStatusOther = 0x01, 448 ChassisSecurityStatusUnknown = 0x02, 449 ChassisSecurityStatusNone = 0x03, 450 ChassisSecurityStatusExternalInterfaceLockedOut = 0x04, 451 ChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05 452 } MISC_CHASSIS_SECURITY_STATE; 453 454 /// 455 /// Contained Element record 456 /// 457 typedef struct { 458 UINT8 ContainedElementType; 459 UINT8 ContainedElementMinimum; 460 UINT8 ContainedElementMaximum; 461 } CONTAINED_ELEMENT; 462 463 /// 464 /// System Enclosure or Chassis (Type 3). 465 /// 466 /// The information in this structure defines attributes of the system's mechanical enclosure(s). 467 /// For example, if a system included a separate enclosure for its peripheral devices, 468 /// two structures would be returned: one for the main, system enclosure and the second for 469 /// the peripheral device enclosure. The additions to this structure in v2.1 of this specification 470 /// support the population of the CIM_Chassis class. 471 /// 472 typedef struct { 473 SMBIOS_STRUCTURE Hdr; 474 SMBIOS_TABLE_STRING Manufacturer; 475 UINT8 Type; 476 SMBIOS_TABLE_STRING Version; 477 SMBIOS_TABLE_STRING SerialNumber; 478 SMBIOS_TABLE_STRING AssetTag; 479 UINT8 BootupState; ///< The enumeration value from MISC_CHASSIS_STATE. 480 UINT8 PowerSupplyState; ///< The enumeration value from MISC_CHASSIS_STATE. 481 UINT8 ThermalState; ///< The enumeration value from MISC_CHASSIS_STATE. 482 UINT8 SecurityStatus; ///< The enumeration value from MISC_CHASSIS_SECURITY_STATE. 483 UINT8 OemDefined[4]; 484 UINT8 Height; 485 UINT8 NumberofPowerCords; 486 UINT8 ContainedElementCount; 487 UINT8 ContainedElementRecordLength; 488 // 489 // Can have 0 to (ContainedElementCount * ContainedElementRecordLength) contained elements 490 // 491 CONTAINED_ELEMENT ContainedElements[1]; 492 // 493 // Add for smbios 2.7 494 // 495 // Since ContainedElements has a variable number of entries, must not define SKUNumber in 496 // the structure. Need to reference it by starting at offset 0x15 and adding 497 // (ContainedElementCount * ContainedElementRecordLength) bytes. 498 // 499 // SMBIOS_TABLE_STRING SKUNumber; 500 } SMBIOS_TABLE_TYPE3; 501 502 /// 503 /// Processor Information - Processor Type. 504 /// 505 typedef enum { 506 ProcessorOther = 0x01, 507 ProcessorUnknown = 0x02, 508 CentralProcessor = 0x03, 509 MathProcessor = 0x04, 510 DspProcessor = 0x05, 511 VideoProcessor = 0x06 512 } PROCESSOR_TYPE_DATA; 513 514 /// 515 /// Processor Information - Processor Family. 516 /// 517 typedef enum { 518 ProcessorFamilyOther = 0x01, 519 ProcessorFamilyUnknown = 0x02, 520 ProcessorFamily8086 = 0x03, 521 ProcessorFamily80286 = 0x04, 522 ProcessorFamilyIntel386 = 0x05, 523 ProcessorFamilyIntel486 = 0x06, 524 ProcessorFamily8087 = 0x07, 525 ProcessorFamily80287 = 0x08, 526 ProcessorFamily80387 = 0x09, 527 ProcessorFamily80487 = 0x0A, 528 ProcessorFamilyPentium = 0x0B, 529 ProcessorFamilyPentiumPro = 0x0C, 530 ProcessorFamilyPentiumII = 0x0D, 531 ProcessorFamilyPentiumMMX = 0x0E, 532 ProcessorFamilyCeleron = 0x0F, 533 ProcessorFamilyPentiumIIXeon = 0x10, 534 ProcessorFamilyPentiumIII = 0x11, 535 ProcessorFamilyM1 = 0x12, 536 ProcessorFamilyM2 = 0x13, 537 ProcessorFamilyIntelCeleronM = 0x14, 538 ProcessorFamilyIntelPentium4Ht = 0x15, 539 ProcessorFamilyAmdDuron = 0x18, 540 ProcessorFamilyK5 = 0x19, 541 ProcessorFamilyK6 = 0x1A, 542 ProcessorFamilyK6_2 = 0x1B, 543 ProcessorFamilyK6_3 = 0x1C, 544 ProcessorFamilyAmdAthlon = 0x1D, 545 ProcessorFamilyAmd29000 = 0x1E, 546 ProcessorFamilyK6_2Plus = 0x1F, 547 ProcessorFamilyPowerPC = 0x20, 548 ProcessorFamilyPowerPC601 = 0x21, 549 ProcessorFamilyPowerPC603 = 0x22, 550 ProcessorFamilyPowerPC603Plus = 0x23, 551 ProcessorFamilyPowerPC604 = 0x24, 552 ProcessorFamilyPowerPC620 = 0x25, 553 ProcessorFamilyPowerPCx704 = 0x26, 554 ProcessorFamilyPowerPC750 = 0x27, 555 ProcessorFamilyIntelCoreDuo = 0x28, 556 ProcessorFamilyIntelCoreDuoMobile = 0x29, 557 ProcessorFamilyIntelCoreSoloMobile = 0x2A, 558 ProcessorFamilyIntelAtom = 0x2B, 559 ProcessorFamilyIntelCoreM = 0x2C, 560 ProcessorFamilyIntelCorem3 = 0x2D, 561 ProcessorFamilyIntelCorem5 = 0x2E, 562 ProcessorFamilyIntelCorem7 = 0x2F, 563 ProcessorFamilyAlpha = 0x30, 564 ProcessorFamilyAlpha21064 = 0x31, 565 ProcessorFamilyAlpha21066 = 0x32, 566 ProcessorFamilyAlpha21164 = 0x33, 567 ProcessorFamilyAlpha21164PC = 0x34, 568 ProcessorFamilyAlpha21164a = 0x35, 569 ProcessorFamilyAlpha21264 = 0x36, 570 ProcessorFamilyAlpha21364 = 0x37, 571 ProcessorFamilyAmdTurionIIUltraDualCoreMobileM = 0x38, 572 ProcessorFamilyAmdTurionIIDualCoreMobileM = 0x39, 573 ProcessorFamilyAmdAthlonIIDualCoreM = 0x3A, 574 ProcessorFamilyAmdOpteron6100Series = 0x3B, 575 ProcessorFamilyAmdOpteron4100Series = 0x3C, 576 ProcessorFamilyAmdOpteron6200Series = 0x3D, 577 ProcessorFamilyAmdOpteron4200Series = 0x3E, 578 ProcessorFamilyAmdFxSeries = 0x3F, 579 ProcessorFamilyMips = 0x40, 580 ProcessorFamilyMIPSR4000 = 0x41, 581 ProcessorFamilyMIPSR4200 = 0x42, 582 ProcessorFamilyMIPSR4400 = 0x43, 583 ProcessorFamilyMIPSR4600 = 0x44, 584 ProcessorFamilyMIPSR10000 = 0x45, 585 ProcessorFamilyAmdCSeries = 0x46, 586 ProcessorFamilyAmdESeries = 0x47, 587 ProcessorFamilyAmdASeries = 0x48, ///< SMBIOS spec 2.8.0 updated the name 588 ProcessorFamilyAmdGSeries = 0x49, 589 ProcessorFamilyAmdZSeries = 0x4A, 590 ProcessorFamilyAmdRSeries = 0x4B, 591 ProcessorFamilyAmdOpteron4300 = 0x4C, 592 ProcessorFamilyAmdOpteron6300 = 0x4D, 593 ProcessorFamilyAmdOpteron3300 = 0x4E, 594 ProcessorFamilyAmdFireProSeries = 0x4F, 595 ProcessorFamilySparc = 0x50, 596 ProcessorFamilySuperSparc = 0x51, 597 ProcessorFamilymicroSparcII = 0x52, 598 ProcessorFamilymicroSparcIIep = 0x53, 599 ProcessorFamilyUltraSparc = 0x54, 600 ProcessorFamilyUltraSparcII = 0x55, 601 ProcessorFamilyUltraSparcIii = 0x56, 602 ProcessorFamilyUltraSparcIII = 0x57, 603 ProcessorFamilyUltraSparcIIIi = 0x58, 604 ProcessorFamily68040 = 0x60, 605 ProcessorFamily68xxx = 0x61, 606 ProcessorFamily68000 = 0x62, 607 ProcessorFamily68010 = 0x63, 608 ProcessorFamily68020 = 0x64, 609 ProcessorFamily68030 = 0x65, 610 ProcessorFamilyAmdAthlonX4QuadCore = 0x66, 611 ProcessorFamilyAmdOpteronX1000Series = 0x67, 612 ProcessorFamilyAmdOpteronX2000Series = 0x68, 613 ProcessorFamilyAmdOpteronASeries = 0x69, 614 ProcessorFamilyAmdOpteronX3000Series = 0x6A, 615 ProcessorFamilyAmdZen = 0x6B, 616 ProcessorFamilyHobbit = 0x70, 617 ProcessorFamilyCrusoeTM5000 = 0x78, 618 ProcessorFamilyCrusoeTM3000 = 0x79, 619 ProcessorFamilyEfficeonTM8000 = 0x7A, 620 ProcessorFamilyWeitek = 0x80, 621 ProcessorFamilyItanium = 0x82, 622 ProcessorFamilyAmdAthlon64 = 0x83, 623 ProcessorFamilyAmdOpteron = 0x84, 624 ProcessorFamilyAmdSempron = 0x85, 625 ProcessorFamilyAmdTurion64Mobile = 0x86, 626 ProcessorFamilyDualCoreAmdOpteron = 0x87, 627 ProcessorFamilyAmdAthlon64X2DualCore = 0x88, 628 ProcessorFamilyAmdTurion64X2Mobile = 0x89, 629 ProcessorFamilyQuadCoreAmdOpteron = 0x8A, 630 ProcessorFamilyThirdGenerationAmdOpteron = 0x8B, 631 ProcessorFamilyAmdPhenomFxQuadCore = 0x8C, 632 ProcessorFamilyAmdPhenomX4QuadCore = 0x8D, 633 ProcessorFamilyAmdPhenomX2DualCore = 0x8E, 634 ProcessorFamilyAmdAthlonX2DualCore = 0x8F, 635 ProcessorFamilyPARISC = 0x90, 636 ProcessorFamilyPaRisc8500 = 0x91, 637 ProcessorFamilyPaRisc8000 = 0x92, 638 ProcessorFamilyPaRisc7300LC = 0x93, 639 ProcessorFamilyPaRisc7200 = 0x94, 640 ProcessorFamilyPaRisc7100LC = 0x95, 641 ProcessorFamilyPaRisc7100 = 0x96, 642 ProcessorFamilyV30 = 0xA0, 643 ProcessorFamilyQuadCoreIntelXeon3200Series = 0xA1, 644 ProcessorFamilyDualCoreIntelXeon3000Series = 0xA2, 645 ProcessorFamilyQuadCoreIntelXeon5300Series = 0xA3, 646 ProcessorFamilyDualCoreIntelXeon5100Series = 0xA4, 647 ProcessorFamilyDualCoreIntelXeon5000Series = 0xA5, 648 ProcessorFamilyDualCoreIntelXeonLV = 0xA6, 649 ProcessorFamilyDualCoreIntelXeonULV = 0xA7, 650 ProcessorFamilyDualCoreIntelXeon7100Series = 0xA8, 651 ProcessorFamilyQuadCoreIntelXeon5400Series = 0xA9, 652 ProcessorFamilyQuadCoreIntelXeon = 0xAA, 653 ProcessorFamilyDualCoreIntelXeon5200Series = 0xAB, 654 ProcessorFamilyDualCoreIntelXeon7200Series = 0xAC, 655 ProcessorFamilyQuadCoreIntelXeon7300Series = 0xAD, 656 ProcessorFamilyQuadCoreIntelXeon7400Series = 0xAE, 657 ProcessorFamilyMultiCoreIntelXeon7400Series = 0xAF, 658 ProcessorFamilyPentiumIIIXeon = 0xB0, 659 ProcessorFamilyPentiumIIISpeedStep = 0xB1, 660 ProcessorFamilyPentium4 = 0xB2, 661 ProcessorFamilyIntelXeon = 0xB3, 662 ProcessorFamilyAS400 = 0xB4, 663 ProcessorFamilyIntelXeonMP = 0xB5, 664 ProcessorFamilyAMDAthlonXP = 0xB6, 665 ProcessorFamilyAMDAthlonMP = 0xB7, 666 ProcessorFamilyIntelItanium2 = 0xB8, 667 ProcessorFamilyIntelPentiumM = 0xB9, 668 ProcessorFamilyIntelCeleronD = 0xBA, 669 ProcessorFamilyIntelPentiumD = 0xBB, 670 ProcessorFamilyIntelPentiumEx = 0xBC, 671 ProcessorFamilyIntelCoreSolo = 0xBD, ///< SMBIOS spec 2.6 updated this value 672 ProcessorFamilyReserved = 0xBE, 673 ProcessorFamilyIntelCore2 = 0xBF, 674 ProcessorFamilyIntelCore2Solo = 0xC0, 675 ProcessorFamilyIntelCore2Extreme = 0xC1, 676 ProcessorFamilyIntelCore2Quad = 0xC2, 677 ProcessorFamilyIntelCore2ExtremeMobile = 0xC3, 678 ProcessorFamilyIntelCore2DuoMobile = 0xC4, 679 ProcessorFamilyIntelCore2SoloMobile = 0xC5, 680 ProcessorFamilyIntelCoreI7 = 0xC6, 681 ProcessorFamilyDualCoreIntelCeleron = 0xC7, 682 ProcessorFamilyIBM390 = 0xC8, 683 ProcessorFamilyG4 = 0xC9, 684 ProcessorFamilyG5 = 0xCA, 685 ProcessorFamilyG6 = 0xCB, 686 ProcessorFamilyzArchitecture = 0xCC, 687 ProcessorFamilyIntelCoreI5 = 0xCD, 688 ProcessorFamilyIntelCoreI3 = 0xCE, 689 ProcessorFamilyIntelCoreI9 = 0xCF, 690 ProcessorFamilyViaC7M = 0xD2, 691 ProcessorFamilyViaC7D = 0xD3, 692 ProcessorFamilyViaC7 = 0xD4, 693 ProcessorFamilyViaEden = 0xD5, 694 ProcessorFamilyMultiCoreIntelXeon = 0xD6, 695 ProcessorFamilyDualCoreIntelXeon3Series = 0xD7, 696 ProcessorFamilyQuadCoreIntelXeon3Series = 0xD8, 697 ProcessorFamilyViaNano = 0xD9, 698 ProcessorFamilyDualCoreIntelXeon5Series = 0xDA, 699 ProcessorFamilyQuadCoreIntelXeon5Series = 0xDB, 700 ProcessorFamilyDualCoreIntelXeon7Series = 0xDD, 701 ProcessorFamilyQuadCoreIntelXeon7Series = 0xDE, 702 ProcessorFamilyMultiCoreIntelXeon7Series = 0xDF, 703 ProcessorFamilyMultiCoreIntelXeon3400Series = 0xE0, 704 ProcessorFamilyAmdOpteron3000Series = 0xE4, 705 ProcessorFamilyAmdSempronII = 0xE5, 706 ProcessorFamilyEmbeddedAmdOpteronQuadCore = 0xE6, 707 ProcessorFamilyAmdPhenomTripleCore = 0xE7, 708 ProcessorFamilyAmdTurionUltraDualCoreMobile = 0xE8, 709 ProcessorFamilyAmdTurionDualCoreMobile = 0xE9, 710 ProcessorFamilyAmdAthlonDualCore = 0xEA, 711 ProcessorFamilyAmdSempronSI = 0xEB, 712 ProcessorFamilyAmdPhenomII = 0xEC, 713 ProcessorFamilyAmdAthlonII = 0xED, 714 ProcessorFamilySixCoreAmdOpteron = 0xEE, 715 ProcessorFamilyAmdSempronM = 0xEF, 716 ProcessorFamilyi860 = 0xFA, 717 ProcessorFamilyi960 = 0xFB, 718 ProcessorFamilyIndicatorFamily2 = 0xFE, 719 ProcessorFamilyReserved1 = 0xFF 720 } PROCESSOR_FAMILY_DATA; 721 722 /// 723 /// Processor Information2 - Processor Family2. 724 /// 725 typedef enum { 726 ProcessorFamilyARMv7 = 0x0100, 727 ProcessorFamilyARMv8 = 0x0101, 728 ProcessorFamilyARMv9 = 0x0102, 729 ProcessorFamilySH3 = 0x0104, 730 ProcessorFamilySH4 = 0x0105, 731 ProcessorFamilyARM = 0x0118, 732 ProcessorFamilyStrongARM = 0x0119, 733 ProcessorFamily6x86 = 0x012C, 734 ProcessorFamilyMediaGX = 0x012D, 735 ProcessorFamilyMII = 0x012E, 736 ProcessorFamilyWinChip = 0x0140, 737 ProcessorFamilyDSP = 0x015E, 738 ProcessorFamilyVideoProcessor = 0x01F4, 739 ProcessorFamilyRiscvRV32 = 0x0200, 740 ProcessorFamilyRiscVRV64 = 0x0201, 741 ProcessorFamilyRiscVRV128 = 0x0202, 742 ProcessorFamilyLoongArch = 0x0258, 743 ProcessorFamilyLoongson1 = 0x0259, 744 ProcessorFamilyLoongson2 = 0x025A, 745 ProcessorFamilyLoongson3 = 0x025B, 746 ProcessorFamilyLoongson2K = 0x025C, 747 ProcessorFamilyLoongson3A = 0x025D, 748 ProcessorFamilyLoongson3B = 0x025E, 749 ProcessorFamilyLoongson3C = 0x025F, 750 ProcessorFamilyLoongson3D = 0x0260, 751 ProcessorFamilyLoongson3E = 0x0261, 752 ProcessorFamilyDualCoreLoongson2K = 0x0262, 753 ProcessorFamilyQuadCoreLoongson3A = 0x026C, 754 ProcessorFamilyMultiCoreLoongson3A = 0x026D, 755 ProcessorFamilyQuadCoreLoongson3B = 0x026E, 756 ProcessorFamilyMultiCoreLoongson3B = 0x026F, 757 ProcessorFamilyMultiCoreLoongson3C = 0x0270, 758 ProcessorFamilyMultiCoreLoongson3D = 0x0271 759 } PROCESSOR_FAMILY2_DATA; 760 761 /// 762 /// Processor Information - Voltage. 763 /// 764 typedef struct { 765 UINT8 ProcessorVoltageCapability5V : 1; 766 UINT8 ProcessorVoltageCapability3_3V : 1; 767 UINT8 ProcessorVoltageCapability2_9V : 1; 768 UINT8 ProcessorVoltageCapabilityReserved : 1; ///< Bit 3, must be zero. 769 UINT8 ProcessorVoltageReserved : 3; ///< Bits 4-6, must be zero. 770 UINT8 ProcessorVoltageIndicateLegacy : 1; 771 } PROCESSOR_VOLTAGE; 772 773 /// 774 /// Processor Information - Processor Upgrade. 775 /// 776 typedef enum { 777 ProcessorUpgradeOther = 0x01, 778 ProcessorUpgradeUnknown = 0x02, 779 ProcessorUpgradeDaughterBoard = 0x03, 780 ProcessorUpgradeZIFSocket = 0x04, 781 ProcessorUpgradePiggyBack = 0x05, ///< Replaceable. 782 ProcessorUpgradeNone = 0x06, 783 ProcessorUpgradeLIFSocket = 0x07, 784 ProcessorUpgradeSlot1 = 0x08, 785 ProcessorUpgradeSlot2 = 0x09, 786 ProcessorUpgrade370PinSocket = 0x0A, 787 ProcessorUpgradeSlotA = 0x0B, 788 ProcessorUpgradeSlotM = 0x0C, 789 ProcessorUpgradeSocket423 = 0x0D, 790 ProcessorUpgradeSocketA = 0x0E, ///< Socket 462. 791 ProcessorUpgradeSocket478 = 0x0F, 792 ProcessorUpgradeSocket754 = 0x10, 793 ProcessorUpgradeSocket940 = 0x11, 794 ProcessorUpgradeSocket939 = 0x12, 795 ProcessorUpgradeSocketmPGA604 = 0x13, 796 ProcessorUpgradeSocketLGA771 = 0x14, 797 ProcessorUpgradeSocketLGA775 = 0x15, 798 ProcessorUpgradeSocketS1 = 0x16, 799 ProcessorUpgradeAM2 = 0x17, 800 ProcessorUpgradeF1207 = 0x18, 801 ProcessorSocketLGA1366 = 0x19, 802 ProcessorUpgradeSocketG34 = 0x1A, 803 ProcessorUpgradeSocketAM3 = 0x1B, 804 ProcessorUpgradeSocketC32 = 0x1C, 805 ProcessorUpgradeSocketLGA1156 = 0x1D, 806 ProcessorUpgradeSocketLGA1567 = 0x1E, 807 ProcessorUpgradeSocketPGA988A = 0x1F, 808 ProcessorUpgradeSocketBGA1288 = 0x20, 809 ProcessorUpgradeSocketrPGA988B = 0x21, 810 ProcessorUpgradeSocketBGA1023 = 0x22, 811 ProcessorUpgradeSocketBGA1224 = 0x23, 812 ProcessorUpgradeSocketLGA1155 = 0x24, ///< SMBIOS spec 2.8.0 updated the name 813 ProcessorUpgradeSocketLGA1356 = 0x25, 814 ProcessorUpgradeSocketLGA2011 = 0x26, 815 ProcessorUpgradeSocketFS1 = 0x27, 816 ProcessorUpgradeSocketFS2 = 0x28, 817 ProcessorUpgradeSocketFM1 = 0x29, 818 ProcessorUpgradeSocketFM2 = 0x2A, 819 ProcessorUpgradeSocketLGA2011_3 = 0x2B, 820 ProcessorUpgradeSocketLGA1356_3 = 0x2C, 821 ProcessorUpgradeSocketLGA1150 = 0x2D, 822 ProcessorUpgradeSocketBGA1168 = 0x2E, 823 ProcessorUpgradeSocketBGA1234 = 0x2F, 824 ProcessorUpgradeSocketBGA1364 = 0x30, 825 ProcessorUpgradeSocketAM4 = 0x31, 826 ProcessorUpgradeSocketLGA1151 = 0x32, 827 ProcessorUpgradeSocketBGA1356 = 0x33, 828 ProcessorUpgradeSocketBGA1440 = 0x34, 829 ProcessorUpgradeSocketBGA1515 = 0x35, 830 ProcessorUpgradeSocketLGA3647_1 = 0x36, 831 ProcessorUpgradeSocketSP3 = 0x37, 832 ProcessorUpgradeSocketSP3r2 = 0x38, 833 ProcessorUpgradeSocketLGA2066 = 0x39, 834 ProcessorUpgradeSocketBGA1392 = 0x3A, 835 ProcessorUpgradeSocketBGA1510 = 0x3B, 836 ProcessorUpgradeSocketBGA1528 = 0x3C, 837 ProcessorUpgradeSocketLGA4189 = 0x3D, 838 ProcessorUpgradeSocketLGA1200 = 0x3E, 839 ProcessorUpgradeSocketLGA4677 = 0x3F, 840 ProcessorUpgradeSocketLGA1700 = 0x40, 841 ProcessorUpgradeSocketBGA1744 = 0x41, 842 ProcessorUpgradeSocketBGA1781 = 0x42, 843 ProcessorUpgradeSocketBGA1211 = 0x43, 844 ProcessorUpgradeSocketBGA2422 = 0x44, 845 ProcessorUpgradeSocketLGA1211 = 0x45, 846 ProcessorUpgradeSocketLGA2422 = 0x46, 847 ProcessorUpgradeSocketLGA5773 = 0x47, 848 ProcessorUpgradeSocketBGA5773 = 0x48 849 } PROCESSOR_UPGRADE; 850 851 /// 852 /// Processor ID Field Description 853 /// 854 typedef struct { 855 UINT32 ProcessorSteppingId : 4; 856 UINT32 ProcessorModel : 4; 857 UINT32 ProcessorFamily : 4; 858 UINT32 ProcessorType : 2; 859 UINT32 ProcessorReserved1 : 2; 860 UINT32 ProcessorXModel : 4; 861 UINT32 ProcessorXFamily : 8; 862 UINT32 ProcessorReserved2 : 4; 863 } PROCESSOR_SIGNATURE; 864 865 typedef struct { 866 UINT32 ProcessorFpu : 1; 867 UINT32 ProcessorVme : 1; 868 UINT32 ProcessorDe : 1; 869 UINT32 ProcessorPse : 1; 870 UINT32 ProcessorTsc : 1; 871 UINT32 ProcessorMsr : 1; 872 UINT32 ProcessorPae : 1; 873 UINT32 ProcessorMce : 1; 874 UINT32 ProcessorCx8 : 1; 875 UINT32 ProcessorApic : 1; 876 UINT32 ProcessorReserved1 : 1; 877 UINT32 ProcessorSep : 1; 878 UINT32 ProcessorMtrr : 1; 879 UINT32 ProcessorPge : 1; 880 UINT32 ProcessorMca : 1; 881 UINT32 ProcessorCmov : 1; 882 UINT32 ProcessorPat : 1; 883 UINT32 ProcessorPse36 : 1; 884 UINT32 ProcessorPsn : 1; 885 UINT32 ProcessorClfsh : 1; 886 UINT32 ProcessorReserved2 : 1; 887 UINT32 ProcessorDs : 1; 888 UINT32 ProcessorAcpi : 1; 889 UINT32 ProcessorMmx : 1; 890 UINT32 ProcessorFxsr : 1; 891 UINT32 ProcessorSse : 1; 892 UINT32 ProcessorSse2 : 1; 893 UINT32 ProcessorSs : 1; 894 UINT32 ProcessorReserved3 : 1; 895 UINT32 ProcessorTm : 1; 896 UINT32 ProcessorReserved4 : 2; 897 } PROCESSOR_FEATURE_FLAGS; 898 899 typedef struct { 900 UINT16 ProcessorReserved1 : 1; 901 UINT16 ProcessorUnknown : 1; 902 UINT16 Processor64BitCapable : 1; 903 UINT16 ProcessorMultiCore : 1; 904 UINT16 ProcessorHardwareThread : 1; 905 UINT16 ProcessorExecuteProtection : 1; 906 UINT16 ProcessorEnhancedVirtualization : 1; 907 UINT16 ProcessorPowerPerformanceCtrl : 1; 908 UINT16 Processor128BitCapable : 1; 909 UINT16 ProcessorArm64SocId : 1; 910 UINT16 ProcessorReserved2 : 6; 911 } PROCESSOR_CHARACTERISTIC_FLAGS; 912 913 /// 914 /// Processor Information - Status 915 /// 916 typedef union { 917 struct { 918 UINT8 CpuStatus : 3; ///< Indicates the status of the processor. 919 UINT8 Reserved1 : 3; ///< Reserved for future use. Must be set to zero. 920 UINT8 SocketPopulated : 1; ///< Indicates if the processor socket is populated or not. 921 UINT8 Reserved2 : 1; ///< Reserved for future use. Must be set to zero. 922 } Bits; 923 UINT8 Data; 924 } PROCESSOR_STATUS_DATA; 925 926 typedef struct { 927 PROCESSOR_SIGNATURE Signature; 928 PROCESSOR_FEATURE_FLAGS FeatureFlags; 929 } PROCESSOR_ID_DATA; 930 931 /// 932 /// Processor Information (Type 4). 933 /// 934 /// The information in this structure defines the attributes of a single processor; 935 /// a separate structure instance is provided for each system processor socket/slot. 936 /// For example, a system with an IntelDX2 processor would have a single 937 /// structure instance, while a system with an IntelSX2 processor would have a structure 938 /// to describe the main CPU, and a second structure to describe the 80487 co-processor. 939 /// 940 typedef struct { 941 SMBIOS_STRUCTURE Hdr; 942 SMBIOS_TABLE_STRING Socket; 943 UINT8 ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA. 944 UINT8 ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA. 945 SMBIOS_TABLE_STRING ProcessorManufacturer; 946 PROCESSOR_ID_DATA ProcessorId; 947 SMBIOS_TABLE_STRING ProcessorVersion; 948 PROCESSOR_VOLTAGE Voltage; 949 UINT16 ExternalClock; 950 UINT16 MaxSpeed; 951 UINT16 CurrentSpeed; 952 UINT8 Status; 953 UINT8 ProcessorUpgrade; ///< The enumeration value from PROCESSOR_UPGRADE. 954 UINT16 L1CacheHandle; 955 UINT16 L2CacheHandle; 956 UINT16 L3CacheHandle; 957 SMBIOS_TABLE_STRING SerialNumber; 958 SMBIOS_TABLE_STRING AssetTag; 959 SMBIOS_TABLE_STRING PartNumber; 960 // 961 // Add for smbios 2.5 962 // 963 UINT8 CoreCount; 964 UINT8 EnabledCoreCount; 965 UINT8 ThreadCount; 966 UINT16 ProcessorCharacteristics; 967 // 968 // Add for smbios 2.6 969 // 970 UINT16 ProcessorFamily2; 971 // 972 // Add for smbios 3.0 973 // 974 UINT16 CoreCount2; 975 UINT16 EnabledCoreCount2; 976 UINT16 ThreadCount2; 977 // 978 // Add for smbios 3.6 979 // 980 UINT16 ThreadEnabled; 981 } SMBIOS_TABLE_TYPE4; 982 983 /// 984 /// Memory Controller Error Detecting Method. 985 /// 986 typedef enum { 987 ErrorDetectingMethodOther = 0x01, 988 ErrorDetectingMethodUnknown = 0x02, 989 ErrorDetectingMethodNone = 0x03, 990 ErrorDetectingMethodParity = 0x04, 991 ErrorDetectingMethod32Ecc = 0x05, 992 ErrorDetectingMethod64Ecc = 0x06, 993 ErrorDetectingMethod128Ecc = 0x07, 994 ErrorDetectingMethodCrc = 0x08 995 } MEMORY_ERROR_DETECT_METHOD; 996 997 /// 998 /// Memory Controller Error Correcting Capability. 999 /// 1000 typedef struct { 1001 UINT8 Other : 1; 1002 UINT8 Unknown : 1; 1003 UINT8 None : 1; 1004 UINT8 SingleBitErrorCorrect : 1; 1005 UINT8 DoubleBitErrorCorrect : 1; 1006 UINT8 ErrorScrubbing : 1; 1007 UINT8 Reserved : 2; 1008 } MEMORY_ERROR_CORRECT_CAPABILITY; 1009 1010 /// 1011 /// Memory Controller Information - Interleave Support. 1012 /// 1013 typedef enum { 1014 MemoryInterleaveOther = 0x01, 1015 MemoryInterleaveUnknown = 0x02, 1016 MemoryInterleaveOneWay = 0x03, 1017 MemoryInterleaveTwoWay = 0x04, 1018 MemoryInterleaveFourWay = 0x05, 1019 MemoryInterleaveEightWay = 0x06, 1020 MemoryInterleaveSixteenWay = 0x07 1021 } MEMORY_SUPPORT_INTERLEAVE_TYPE; 1022 1023 /// 1024 /// Memory Controller Information - Memory Speeds. 1025 /// 1026 typedef struct { 1027 UINT16 Other : 1; 1028 UINT16 Unknown : 1; 1029 UINT16 SeventyNs : 1; 1030 UINT16 SixtyNs : 1; 1031 UINT16 FiftyNs : 1; 1032 UINT16 Reserved : 11; 1033 } MEMORY_SPEED_TYPE; 1034 1035 /// 1036 /// Memory Controller Information (Type 5, Obsolete). 1037 /// 1038 /// The information in this structure defines the attributes of the system's memory controller(s) 1039 /// and the supported attributes of any memory-modules present in the sockets controlled by 1040 /// this controller. 1041 /// Note: This structure, and its companion Memory Module Information (Type 6, Obsolete), 1042 /// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16) 1043 /// and Memory Device (Type 17) structures should be used instead. BIOS providers might 1044 /// choose to implement both memory description types to allow existing DMI browsers 1045 /// to properly display the system's memory attributes. 1046 /// 1047 typedef struct { 1048 SMBIOS_STRUCTURE Hdr; 1049 UINT8 ErrDetectMethod; ///< The enumeration value from MEMORY_ERROR_DETECT_METHOD. 1050 MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability; 1051 UINT8 SupportInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE. 1052 UINT8 CurrentInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE . 1053 UINT8 MaxMemoryModuleSize; 1054 MEMORY_SPEED_TYPE SupportSpeed; 1055 UINT16 SupportMemoryType; 1056 UINT8 MemoryModuleVoltage; 1057 UINT8 AssociatedMemorySlotNum; 1058 UINT16 MemoryModuleConfigHandles[1]; 1059 } SMBIOS_TABLE_TYPE5; 1060 1061 /// 1062 /// Memory Module Information - Memory Types 1063 /// 1064 typedef struct { 1065 UINT16 Other : 1; 1066 UINT16 Unknown : 1; 1067 UINT16 Standard : 1; 1068 UINT16 FastPageMode : 1; 1069 UINT16 Edo : 1; 1070 UINT16 Parity : 1; 1071 UINT16 Ecc : 1; 1072 UINT16 Simm : 1; 1073 UINT16 Dimm : 1; 1074 UINT16 BurstEdo : 1; 1075 UINT16 Sdram : 1; 1076 UINT16 Reserved : 5; 1077 } MEMORY_CURRENT_TYPE; 1078 1079 /// 1080 /// Memory Module Information - Memory Size. 1081 /// 1082 typedef struct { 1083 UINT8 InstalledOrEnabledSize : 7; ///< Size (n), where 2**n is the size in MB. 1084 UINT8 SingleOrDoubleBank : 1; 1085 } MEMORY_INSTALLED_ENABLED_SIZE; 1086 1087 /// 1088 /// Memory Module Information (Type 6, Obsolete) 1089 /// 1090 /// One Memory Module Information structure is included for each memory-module socket 1091 /// in the system. The structure describes the speed, type, size, and error status 1092 /// of each system memory module. The supported attributes of each module are described 1093 /// by the "owning" Memory Controller Information structure. 1094 /// Note: This structure, and its companion Memory Controller Information (Type 5, Obsolete), 1095 /// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16) 1096 /// and Memory Device (Type 17) structures should be used instead. 1097 /// 1098 typedef struct { 1099 SMBIOS_STRUCTURE Hdr; 1100 SMBIOS_TABLE_STRING SocketDesignation; 1101 UINT8 BankConnections; 1102 UINT8 CurrentSpeed; 1103 MEMORY_CURRENT_TYPE CurrentMemoryType; 1104 MEMORY_INSTALLED_ENABLED_SIZE InstalledSize; 1105 MEMORY_INSTALLED_ENABLED_SIZE EnabledSize; 1106 UINT8 ErrorStatus; 1107 } SMBIOS_TABLE_TYPE6; 1108 1109 /// 1110 /// Cache Information - SRAM Type. 1111 /// 1112 typedef struct { 1113 UINT16 Other : 1; 1114 UINT16 Unknown : 1; 1115 UINT16 NonBurst : 1; 1116 UINT16 Burst : 1; 1117 UINT16 PipelineBurst : 1; 1118 UINT16 Synchronous : 1; 1119 UINT16 Asynchronous : 1; 1120 UINT16 Reserved : 9; 1121 } CACHE_SRAM_TYPE_DATA; 1122 1123 /// 1124 /// Cache Information - Error Correction Type. 1125 /// 1126 typedef enum { 1127 CacheErrorOther = 0x01, 1128 CacheErrorUnknown = 0x02, 1129 CacheErrorNone = 0x03, 1130 CacheErrorParity = 0x04, 1131 CacheErrorSingleBit = 0x05, ///< ECC 1132 CacheErrorMultiBit = 0x06 ///< ECC 1133 } CACHE_ERROR_TYPE_DATA; 1134 1135 /// 1136 /// Cache Information - System Cache Type. 1137 /// 1138 typedef enum { 1139 CacheTypeOther = 0x01, 1140 CacheTypeUnknown = 0x02, 1141 CacheTypeInstruction = 0x03, 1142 CacheTypeData = 0x04, 1143 CacheTypeUnified = 0x05 1144 } CACHE_TYPE_DATA; 1145 1146 /// 1147 /// Cache Information - Associativity. 1148 /// 1149 typedef enum { 1150 CacheAssociativityOther = 0x01, 1151 CacheAssociativityUnknown = 0x02, 1152 CacheAssociativityDirectMapped = 0x03, 1153 CacheAssociativity2Way = 0x04, 1154 CacheAssociativity4Way = 0x05, 1155 CacheAssociativityFully = 0x06, 1156 CacheAssociativity8Way = 0x07, 1157 CacheAssociativity16Way = 0x08, 1158 CacheAssociativity12Way = 0x09, 1159 CacheAssociativity24Way = 0x0A, 1160 CacheAssociativity32Way = 0x0B, 1161 CacheAssociativity48Way = 0x0C, 1162 CacheAssociativity64Way = 0x0D, 1163 CacheAssociativity20Way = 0x0E 1164 } CACHE_ASSOCIATIVITY_DATA; 1165 1166 /// 1167 /// Cache Information (Type 7). 1168 /// 1169 /// The information in this structure defines the attributes of CPU cache device in the system. 1170 /// One structure is specified for each such device, whether the device is internal to 1171 /// or external to the CPU module. Cache modules can be associated with a processor structure 1172 /// in one or two ways, depending on the SMBIOS version. 1173 /// 1174 typedef struct { 1175 SMBIOS_STRUCTURE Hdr; 1176 SMBIOS_TABLE_STRING SocketDesignation; 1177 UINT16 CacheConfiguration; 1178 UINT16 MaximumCacheSize; 1179 UINT16 InstalledSize; 1180 CACHE_SRAM_TYPE_DATA SupportedSRAMType; 1181 CACHE_SRAM_TYPE_DATA CurrentSRAMType; 1182 UINT8 CacheSpeed; 1183 UINT8 ErrorCorrectionType; ///< The enumeration value from CACHE_ERROR_TYPE_DATA. 1184 UINT8 SystemCacheType; ///< The enumeration value from CACHE_TYPE_DATA. 1185 UINT8 Associativity; ///< The enumeration value from CACHE_ASSOCIATIVITY_DATA. 1186 // 1187 // Add for smbios 3.1.0 1188 // 1189 UINT32 MaximumCacheSize2; 1190 UINT32 InstalledSize2; 1191 } SMBIOS_TABLE_TYPE7; 1192 1193 /// 1194 /// Port Connector Information - Connector Types. 1195 /// 1196 typedef enum { 1197 PortConnectorTypeNone = 0x00, 1198 PortConnectorTypeCentronics = 0x01, 1199 PortConnectorTypeMiniCentronics = 0x02, 1200 PortConnectorTypeProprietary = 0x03, 1201 PortConnectorTypeDB25Male = 0x04, 1202 PortConnectorTypeDB25Female = 0x05, 1203 PortConnectorTypeDB15Male = 0x06, 1204 PortConnectorTypeDB15Female = 0x07, 1205 PortConnectorTypeDB9Male = 0x08, 1206 PortConnectorTypeDB9Female = 0x09, 1207 PortConnectorTypeRJ11 = 0x0A, 1208 PortConnectorTypeRJ45 = 0x0B, 1209 PortConnectorType50PinMiniScsi = 0x0C, 1210 PortConnectorTypeMiniDin = 0x0D, 1211 PortConnectorTypeMicroDin = 0x0E, 1212 PortConnectorTypePS2 = 0x0F, 1213 PortConnectorTypeInfrared = 0x10, 1214 PortConnectorTypeHpHil = 0x11, 1215 PortConnectorTypeUsb = 0x12, 1216 PortConnectorTypeSsaScsi = 0x13, 1217 PortConnectorTypeCircularDin8Male = 0x14, 1218 PortConnectorTypeCircularDin8Female = 0x15, 1219 PortConnectorTypeOnboardIde = 0x16, 1220 PortConnectorTypeOnboardFloppy = 0x17, 1221 PortConnectorType9PinDualInline = 0x18, 1222 PortConnectorType25PinDualInline = 0x19, 1223 PortConnectorType50PinDualInline = 0x1A, 1224 PortConnectorType68PinDualInline = 0x1B, 1225 PortConnectorTypeOnboardSoundInput = 0x1C, 1226 PortConnectorTypeMiniCentronicsType14 = 0x1D, 1227 PortConnectorTypeMiniCentronicsType26 = 0x1E, 1228 PortConnectorTypeHeadPhoneMiniJack = 0x1F, 1229 PortConnectorTypeBNC = 0x20, 1230 PortConnectorType1394 = 0x21, 1231 PortConnectorTypeSasSata = 0x22, 1232 PortConnectorTypeUsbTypeC = 0x23, 1233 PortConnectorTypePC98 = 0xA0, 1234 PortConnectorTypePC98Hireso = 0xA1, 1235 PortConnectorTypePCH98 = 0xA2, 1236 PortConnectorTypePC98Note = 0xA3, 1237 PortConnectorTypePC98Full = 0xA4, 1238 PortConnectorTypeOther = 0xFF 1239 } MISC_PORT_CONNECTOR_TYPE; 1240 1241 /// 1242 /// Port Connector Information - Port Types 1243 /// 1244 typedef enum { 1245 PortTypeNone = 0x00, 1246 PortTypeParallelXtAtCompatible = 0x01, 1247 PortTypeParallelPortPs2 = 0x02, 1248 PortTypeParallelPortEcp = 0x03, 1249 PortTypeParallelPortEpp = 0x04, 1250 PortTypeParallelPortEcpEpp = 0x05, 1251 PortTypeSerialXtAtCompatible = 0x06, 1252 PortTypeSerial16450Compatible = 0x07, 1253 PortTypeSerial16550Compatible = 0x08, 1254 PortTypeSerial16550ACompatible = 0x09, 1255 PortTypeScsi = 0x0A, 1256 PortTypeMidi = 0x0B, 1257 PortTypeJoyStick = 0x0C, 1258 PortTypeKeyboard = 0x0D, 1259 PortTypeMouse = 0x0E, 1260 PortTypeSsaScsi = 0x0F, 1261 PortTypeUsb = 0x10, 1262 PortTypeFireWire = 0x11, 1263 PortTypePcmciaTypeI = 0x12, 1264 PortTypePcmciaTypeII = 0x13, 1265 PortTypePcmciaTypeIII = 0x14, 1266 PortTypeCardBus = 0x15, 1267 PortTypeAccessBusPort = 0x16, 1268 PortTypeScsiII = 0x17, 1269 PortTypeScsiWide = 0x18, 1270 PortTypePC98 = 0x19, 1271 PortTypePC98Hireso = 0x1A, 1272 PortTypePCH98 = 0x1B, 1273 PortTypeVideoPort = 0x1C, 1274 PortTypeAudioPort = 0x1D, 1275 PortTypeModemPort = 0x1E, 1276 PortTypeNetworkPort = 0x1F, 1277 PortTypeSata = 0x20, 1278 PortTypeSas = 0x21, 1279 PortTypeMfdp = 0x22, ///< Multi-Function Display Port 1280 PortTypeThunderbolt = 0x23, 1281 PortType8251Compatible = 0xA0, 1282 PortType8251FifoCompatible = 0xA1, 1283 PortTypeOther = 0xFF 1284 } MISC_PORT_TYPE; 1285 1286 /// 1287 /// Port Connector Information (Type 8). 1288 /// 1289 /// The information in this structure defines the attributes of a system port connector, 1290 /// e.g. parallel, serial, keyboard, or mouse ports. The port's type and connector information 1291 /// are provided. One structure is present for each port provided by the system. 1292 /// 1293 typedef struct { 1294 SMBIOS_STRUCTURE Hdr; 1295 SMBIOS_TABLE_STRING InternalReferenceDesignator; 1296 UINT8 InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 1297 SMBIOS_TABLE_STRING ExternalReferenceDesignator; 1298 UINT8 ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 1299 UINT8 PortType; ///< The enumeration value from MISC_PORT_TYPE. 1300 } SMBIOS_TABLE_TYPE8; 1301 1302 #if !CONFIG(DISPLAY_FSP_VERSION_INFO_2) 1303 1304 /// 1305 /// System Slots - Slot Type 1306 /// 1307 typedef enum { 1308 SlotTypeOther = 0x01, 1309 SlotTypeUnknown = 0x02, 1310 SlotTypeIsa = 0x03, 1311 SlotTypeMca = 0x04, 1312 SlotTypeEisa = 0x05, 1313 SlotTypePci = 0x06, 1314 SlotTypePcmcia = 0x07, 1315 SlotTypeVlVesa = 0x08, 1316 SlotTypeProprietary = 0x09, 1317 SlotTypeProcessorCardSlot = 0x0A, 1318 SlotTypeProprietaryMemoryCardSlot = 0x0B, 1319 SlotTypeIORiserCardSlot = 0x0C, 1320 SlotTypeNuBus = 0x0D, 1321 SlotTypePci66MhzCapable = 0x0E, 1322 SlotTypeAgp = 0x0F, 1323 SlotTypeApg2X = 0x10, 1324 SlotTypeAgp4X = 0x11, 1325 SlotTypePciX = 0x12, 1326 SlotTypeAgp8X = 0x13, 1327 SlotTypeM2Socket1_DP = 0x14, 1328 SlotTypeM2Socket1_SD = 0x15, 1329 SlotTypeM2Socket2 = 0x16, 1330 SlotTypeM2Socket3 = 0x17, 1331 SlotTypeMxmTypeI = 0x18, 1332 SlotTypeMxmTypeII = 0x19, 1333 SlotTypeMxmTypeIIIStandard = 0x1A, 1334 SlotTypeMxmTypeIIIHe = 0x1B, 1335 SlotTypeMxmTypeIV = 0x1C, 1336 SlotTypeMxm30TypeA = 0x1D, 1337 SlotTypeMxm30TypeB = 0x1E, 1338 SlotTypePciExpressGen2Sff_8639 = 0x1F, 1339 SlotTypePciExpressGen3Sff_8639 = 0x20, 1340 SlotTypePciExpressMini52pinWithBSKO = 0x21, ///< PCI Express Mini 52-pin (CEM spec. 2.0) with bottom-side keep-outs. 1341 SlotTypePciExpressMini52pinWithoutBSKO = 0x22, ///< PCI Express Mini 52-pin (CEM spec. 2.0) without bottom-side keep-outs. 1342 SlotTypePciExpressMini76pin = 0x23, ///< PCI Express Mini 76-pin (CEM spec. 2.0) Corresponds to Display-Mini card. 1343 SlotTypePCIExpressGen4SFF_8639 = 0x24, ///< U.2 1344 SlotTypePCIExpressGen5SFF_8639 = 0x25, ///< U.2 1345 SlotTypeOCPNIC30SmallFormFactor = 0x26, ///< SFF 1346 SlotTypeOCPNIC30LargeFormFactor = 0x27, ///< LFF 1347 SlotTypeOCPNICPriorto30 = 0x28, 1348 SlotTypeCXLFlexbus10 = 0x30, 1349 SlotTypePC98C20 = 0xA0, 1350 SlotTypePC98C24 = 0xA1, 1351 SlotTypePC98E = 0xA2, 1352 SlotTypePC98LocalBus = 0xA3, 1353 SlotTypePC98Card = 0xA4, 1354 SlotTypePciExpress = 0xA5, 1355 SlotTypePciExpressX1 = 0xA6, 1356 SlotTypePciExpressX2 = 0xA7, 1357 SlotTypePciExpressX4 = 0xA8, 1358 SlotTypePciExpressX8 = 0xA9, 1359 SlotTypePciExpressX16 = 0xAA, 1360 SlotTypePciExpressGen2 = 0xAB, 1361 SlotTypePciExpressGen2X1 = 0xAC, 1362 SlotTypePciExpressGen2X2 = 0xAD, 1363 SlotTypePciExpressGen2X4 = 0xAE, 1364 SlotTypePciExpressGen2X8 = 0xAF, 1365 SlotTypePciExpressGen2X16 = 0xB0, 1366 SlotTypePciExpressGen3 = 0xB1, 1367 SlotTypePciExpressGen3X1 = 0xB2, 1368 SlotTypePciExpressGen3X2 = 0xB3, 1369 SlotTypePciExpressGen3X4 = 0xB4, 1370 SlotTypePciExpressGen3X8 = 0xB5, 1371 SlotTypePciExpressGen3X16 = 0xB6, 1372 SlotTypePciExpressGen4 = 0xB8, 1373 SlotTypePciExpressGen4X1 = 0xB9, 1374 SlotTypePciExpressGen4X2 = 0xBA, 1375 SlotTypePciExpressGen4X4 = 0xBB, 1376 SlotTypePciExpressGen4X8 = 0xBC, 1377 SlotTypePciExpressGen4X16 = 0xBD, 1378 SlotTypePCIExpressGen5 = 0xBE, 1379 SlotTypePCIExpressGen5X1 = 0xBF, 1380 SlotTypePCIExpressGen5X2 = 0xC0, 1381 SlotTypePCIExpressGen5X4 = 0xC1, 1382 SlotTypePCIExpressGen5X8 = 0xC2, 1383 SlotTypePCIExpressGen5X16 = 0xC3, 1384 SlotTypePCIExpressGen6andBeyond = 0xC4, 1385 SlotTypeEnterpriseandDatacenter1UE1FormFactorSlot = 0xC5, 1386 SlotTypeEnterpriseandDatacenter3E3FormFactorSlot = 0xC6 1387 } MISC_SLOT_TYPE; 1388 1389 /// 1390 /// System Slots - Slot Data Bus Width. 1391 /// 1392 typedef enum { 1393 SlotDataBusWidthOther = 0x01, 1394 SlotDataBusWidthUnknown = 0x02, 1395 SlotDataBusWidth8Bit = 0x03, 1396 SlotDataBusWidth16Bit = 0x04, 1397 SlotDataBusWidth32Bit = 0x05, 1398 SlotDataBusWidth64Bit = 0x06, 1399 SlotDataBusWidth128Bit = 0x07, 1400 SlotDataBusWidth1X = 0x08, ///< Or X1 1401 SlotDataBusWidth2X = 0x09, ///< Or X2 1402 SlotDataBusWidth4X = 0x0A, ///< Or X4 1403 SlotDataBusWidth8X = 0x0B, ///< Or X8 1404 SlotDataBusWidth12X = 0x0C, ///< Or X12 1405 SlotDataBusWidth16X = 0x0D, ///< Or X16 1406 SlotDataBusWidth32X = 0x0E ///< Or X32 1407 } MISC_SLOT_DATA_BUS_WIDTH; 1408 1409 /// 1410 /// System Slots - Slot Physical Width. 1411 /// 1412 typedef enum { 1413 SlotPhysicalWidthOther = 0x01, 1414 SlotPhysicalWidthUnknown = 0x02, 1415 SlotPhysicalWidth8Bit = 0x03, 1416 SlotPhysicalWidth16Bit = 0x04, 1417 SlotPhysicalWidth32Bit = 0x05, 1418 SlotPhysicalWidth64Bit = 0x06, 1419 SlotPhysicalWidth128Bit = 0x07, 1420 SlotPhysicalWidth1X = 0x08, ///< Or X1 1421 SlotPhysicalWidth2X = 0x09, ///< Or X2 1422 SlotPhysicalWidth4X = 0x0A, ///< Or X4 1423 SlotPhysicalWidth8X = 0x0B, ///< Or X8 1424 SlotPhysicalWidth12X = 0x0C, ///< Or X12 1425 SlotPhysicalWidth16X = 0x0D, ///< Or X16 1426 SlotPhysicalWidth32X = 0x0E ///< Or X32 1427 } MISC_SLOT_PHYSICAL_WIDTH; 1428 1429 /// 1430 /// System Slots - Slot Information. 1431 /// 1432 typedef enum { 1433 Others = 0x00, 1434 Gen1 = 0x01, 1435 Gen2 = 0x01, 1436 Gen3 = 0x03, 1437 Gen4 = 0x04, 1438 Gen5 = 0x05, 1439 Gen6 = 0x06 1440 } MISC_SLOT_INFORMATION; 1441 1442 /// 1443 /// System Slots - Current Usage. 1444 /// 1445 typedef enum { 1446 SlotUsageOther = 0x01, 1447 SlotUsageUnknown = 0x02, 1448 SlotUsageAvailable = 0x03, 1449 SlotUsageInUse = 0x04, 1450 SlotUsageUnavailable = 0x05 1451 } MISC_SLOT_USAGE; 1452 1453 /// 1454 /// System Slots - Slot Length. 1455 /// 1456 typedef enum { 1457 SlotLengthOther = 0x01, 1458 SlotLengthUnknown = 0x02, 1459 SlotLengthShort = 0x03, 1460 SlotLengthLong = 0x04 1461 } MISC_SLOT_LENGTH; 1462 1463 #endif 1464 /// 1465 /// System Slots - Slot Characteristics 1. 1466 /// 1467 typedef struct { 1468 UINT8 CharacteristicsUnknown : 1; 1469 UINT8 Provides50Volts : 1; 1470 UINT8 Provides33Volts : 1; 1471 UINT8 SharedSlot : 1; 1472 UINT8 PcCard16Supported : 1; 1473 UINT8 CardBusSupported : 1; 1474 UINT8 ZoomVideoSupported : 1; 1475 UINT8 ModemRingResumeSupported : 1; 1476 } MISC_SLOT_CHARACTERISTICS1; 1477 /// 1478 /// System Slots - Slot Characteristics 2. 1479 /// 1480 typedef struct { 1481 UINT8 PmeSignalSupported : 1; 1482 UINT8 HotPlugDevicesSupported : 1; 1483 UINT8 SmbusSignalSupported : 1; 1484 UINT8 BifurcationSupported : 1; 1485 UINT8 AsyncSurpriseRemoval : 1; 1486 UINT8 FlexbusSlotCxl10Capable : 1; 1487 UINT8 FlexbusSlotCxl20Capable : 1; 1488 UINT8 Reserved : 1; ///< Set to 0. 1489 } MISC_SLOT_CHARACTERISTICS2; 1490 1491 /// 1492 /// System Slots - Slot Height 1493 /// 1494 typedef enum { 1495 SlotHeightNone = 0x00, 1496 SlotHeightOther = 0x01, 1497 SlotHeightUnknown = 0x02, 1498 SlotHeightFullHeight = 0x03, 1499 SlotHeightLowProfile = 0x04 1500 } MISC_SLOT_HEIGHT; 1501 1502 /// 1503 /// System Slots - Peer Segment/Bus/Device/Function/Width Groups 1504 /// 1505 typedef struct { 1506 UINT16 SegmentGroupNum; 1507 UINT8 BusNum; 1508 UINT8 DevFuncNum; 1509 UINT8 DataBusWidth; 1510 } MISC_SLOT_PEER_GROUP; 1511 1512 /// 1513 /// System Slots (Type 9) 1514 /// 1515 /// The information in this structure defines the attributes of a system slot. 1516 /// One structure is provided for each slot in the system. 1517 /// 1518 /// 1519 typedef struct { 1520 SMBIOS_STRUCTURE Hdr; 1521 SMBIOS_TABLE_STRING SlotDesignation; 1522 UINT8 SlotType; ///< The enumeration value from MISC_SLOT_TYPE. 1523 UINT8 SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH. 1524 UINT8 CurrentUsage; ///< The enumeration value from MISC_SLOT_USAGE. 1525 UINT8 SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH. 1526 UINT16 SlotID; 1527 MISC_SLOT_CHARACTERISTICS1 SlotCharacteristics1; 1528 MISC_SLOT_CHARACTERISTICS2 SlotCharacteristics2; 1529 // 1530 // Add for smbios 2.6 1531 // 1532 UINT16 SegmentGroupNum; 1533 UINT8 BusNum; 1534 UINT8 DevFuncNum; 1535 // 1536 // Add for smbios 3.2 1537 // 1538 UINT8 DataBusWidth; 1539 UINT8 PeerGroupingCount; 1540 MISC_SLOT_PEER_GROUP PeerGroups[1]; 1541 // 1542 // Since PeerGroups has a variable number of entries, must not define new 1543 // fields in the structure. Remaining fields can be referenced using 1544 // SMBIOS_TABLE_TYPE9_EXTENDED structure 1545 // 1546 } SMBIOS_TABLE_TYPE9; 1547 1548 /// 1549 /// Extended structure for System Slots (Type 9) 1550 /// 1551 typedef struct { 1552 // 1553 // Add for smbios 3.4 1554 // 1555 UINT8 SlotInformation; 1556 UINT8 SlotPhysicalWidth; 1557 UINT16 SlotPitch; 1558 // 1559 // Add for smbios 3.5 1560 // 1561 UINT8 SlotHeight; ///< The enumeration value from MISC_SLOT_HEIGHT. 1562 } SMBIOS_TABLE_TYPE9_EXTENDED; 1563 1564 /// 1565 /// On Board Devices Information - Device Types. 1566 /// 1567 typedef enum { 1568 OnBoardDeviceTypeOther = 0x01, 1569 OnBoardDeviceTypeUnknown = 0x02, 1570 OnBoardDeviceTypeVideo = 0x03, 1571 OnBoardDeviceTypeScsiController = 0x04, 1572 OnBoardDeviceTypeEthernet = 0x05, 1573 OnBoardDeviceTypeTokenRing = 0x06, 1574 OnBoardDeviceTypeSound = 0x07, 1575 OnBoardDeviceTypePATAController = 0x08, 1576 OnBoardDeviceTypeSATAController = 0x09, 1577 OnBoardDeviceTypeSASController = 0x0A 1578 } MISC_ONBOARD_DEVICE_TYPE; 1579 1580 /// 1581 /// Device Item Entry 1582 /// 1583 typedef struct { 1584 UINT8 DeviceType; ///< Bit [6:0] - enumeration type of device from MISC_ONBOARD_DEVICE_TYPE. 1585 ///< Bit 7 - 1 : device enabled, 0 : device disabled. 1586 SMBIOS_TABLE_STRING DescriptionString; 1587 } DEVICE_STRUCT; 1588 1589 /// 1590 /// On Board Devices Information (Type 10, obsolete). 1591 /// 1592 /// Note: This structure is obsolete starting with version 2.6 specification; the Onboard Devices Extended 1593 /// Information (Type 41) structure should be used instead . BIOS providers can choose to implement both 1594 /// types to allow existing SMBIOS browsers to properly display the system's onboard devices information. 1595 /// The information in this structure defines the attributes of devices that are onboard (soldered onto) 1596 /// a system element, usually the baseboard. In general, an entry in this table implies that the BIOS 1597 /// has some level of control over the enabling of the associated device for use by the system. 1598 /// 1599 typedef struct { 1600 SMBIOS_STRUCTURE Hdr; 1601 DEVICE_STRUCT Device[1]; 1602 } SMBIOS_TABLE_TYPE10; 1603 1604 /// 1605 /// OEM Strings (Type 11). 1606 /// This structure contains free form strings defined by the OEM. Examples of this are: 1607 /// Part Numbers for Reference Documents for the system, contact information for the manufacturer, etc. 1608 /// 1609 typedef struct { 1610 SMBIOS_STRUCTURE Hdr; 1611 UINT8 StringCount; 1612 } SMBIOS_TABLE_TYPE11; 1613 1614 /// 1615 /// System Configuration Options (Type 12). 1616 /// 1617 /// This structure contains information required to configure the base board's Jumpers and Switches. 1618 /// 1619 typedef struct { 1620 SMBIOS_STRUCTURE Hdr; 1621 UINT8 StringCount; 1622 } SMBIOS_TABLE_TYPE12; 1623 1624 /// 1625 /// BIOS Language Information (Type 13). 1626 /// 1627 /// The information in this structure defines the installable language attributes of the BIOS. 1628 /// 1629 typedef struct { 1630 SMBIOS_STRUCTURE Hdr; 1631 UINT8 InstallableLanguages; 1632 UINT8 Flags; 1633 UINT8 Reserved[15]; 1634 SMBIOS_TABLE_STRING CurrentLanguages; 1635 } SMBIOS_TABLE_TYPE13; 1636 1637 /// 1638 /// Group Item Entry 1639 /// 1640 typedef struct { 1641 UINT8 ItemType; 1642 UINT16 ItemHandle; 1643 } GROUP_STRUCT; 1644 1645 /// 1646 /// Group Associations (Type 14). 1647 /// 1648 /// The Group Associations structure is provided for OEMs who want to specify 1649 /// the arrangement or hierarchy of certain components (including other Group Associations) 1650 /// within the system. 1651 /// 1652 typedef struct { 1653 SMBIOS_STRUCTURE Hdr; 1654 SMBIOS_TABLE_STRING GroupName; 1655 GROUP_STRUCT Group[1]; 1656 } SMBIOS_TABLE_TYPE14; 1657 1658 /// 1659 /// System Event Log - Event Log Types. 1660 /// 1661 typedef enum { 1662 EventLogTypeReserved = 0x00, 1663 EventLogTypeSingleBitECC = 0x01, 1664 EventLogTypeMultiBitECC = 0x02, 1665 EventLogTypeParityMemErr = 0x03, 1666 EventLogTypeBusTimeOut = 0x04, 1667 EventLogTypeIOChannelCheck = 0x05, 1668 EventLogTypeSoftwareNMI = 0x06, 1669 EventLogTypePOSTMemResize = 0x07, 1670 EventLogTypePOSTErr = 0x08, 1671 EventLogTypePCIParityErr = 0x09, 1672 EventLogTypePCISystemErr = 0x0A, 1673 EventLogTypeCPUFailure = 0x0B, 1674 EventLogTypeEISATimeOut = 0x0C, 1675 EventLogTypeMemLogDisabled = 0x0D, 1676 EventLogTypeLoggingDisabled = 0x0E, 1677 EventLogTypeSysLimitExce = 0x10, 1678 EventLogTypeAsyncHWTimer = 0x11, 1679 EventLogTypeSysConfigInfo = 0x12, 1680 EventLogTypeHDInfo = 0x13, 1681 EventLogTypeSysReconfig = 0x14, 1682 EventLogTypeUncorrectCPUErr = 0x15, 1683 EventLogTypeAreaResetAndClr = 0x16, 1684 EventLogTypeSystemBoot = 0x17, 1685 EventLogTypeUnused = 0x18, ///< 0x18 - 0x7F 1686 EventLogTypeAvailForSys = 0x80, ///< 0x80 - 0xFE 1687 EventLogTypeEndOfLog = 0xFF 1688 } EVENT_LOG_TYPE_DATA; 1689 1690 /// 1691 /// System Event Log - Variable Data Format Types. 1692 /// 1693 typedef enum { 1694 EventLogVariableNone = 0x00, 1695 EventLogVariableHandle = 0x01, 1696 EventLogVariableMutilEvent = 0x02, 1697 EventLogVariableMutilEventHandle = 0x03, 1698 EventLogVariablePOSTResultBitmap = 0x04, 1699 EventLogVariableSysManagementType = 0x05, 1700 EventLogVariableMutliEventSysManagmentType = 0x06, 1701 EventLogVariableUnused = 0x07, 1702 EventLogVariableOEMAssigned = 0x80 1703 } EVENT_LOG_VARIABLE_DATA; 1704 1705 /// 1706 /// Event Log Type Descriptors 1707 /// 1708 typedef struct { 1709 UINT8 LogType; ///< The enumeration value from EVENT_LOG_TYPE_DATA. 1710 UINT8 DataFormatType; 1711 } EVENT_LOG_TYPE; 1712 1713 /// 1714 /// System Event Log (Type 15). 1715 /// 1716 /// The presence of this structure within the SMBIOS data returned for a system indicates 1717 /// that the system supports an event log. An event log is a fixed-length area within a 1718 /// non-volatile storage element, starting with a fixed-length (and vendor-specific) header 1719 /// record, followed by one or more variable-length log records. 1720 /// 1721 typedef struct { 1722 SMBIOS_STRUCTURE Hdr; 1723 UINT16 LogAreaLength; 1724 UINT16 LogHeaderStartOffset; 1725 UINT16 LogDataStartOffset; 1726 UINT8 AccessMethod; 1727 UINT8 LogStatus; 1728 UINT32 LogChangeToken; 1729 UINT32 AccessMethodAddress; 1730 UINT8 LogHeaderFormat; 1731 UINT8 NumberOfSupportedLogTypeDescriptors; 1732 UINT8 LengthOfLogTypeDescriptor; 1733 EVENT_LOG_TYPE EventLogTypeDescriptors[1]; 1734 } SMBIOS_TABLE_TYPE15; 1735 1736 /// 1737 /// Physical Memory Array - Location. 1738 /// 1739 typedef enum { 1740 MemoryArrayLocationOther = 0x01, 1741 MemoryArrayLocationUnknown = 0x02, 1742 MemoryArrayLocationSystemBoard = 0x03, 1743 MemoryArrayLocationIsaAddonCard = 0x04, 1744 MemoryArrayLocationEisaAddonCard = 0x05, 1745 MemoryArrayLocationPciAddonCard = 0x06, 1746 MemoryArrayLocationMcaAddonCard = 0x07, 1747 MemoryArrayLocationPcmciaAddonCard = 0x08, 1748 MemoryArrayLocationProprietaryAddonCard = 0x09, 1749 MemoryArrayLocationNuBus = 0x0A, 1750 MemoryArrayLocationPc98C20AddonCard = 0xA0, 1751 MemoryArrayLocationPc98C24AddonCard = 0xA1, 1752 MemoryArrayLocationPc98EAddonCard = 0xA2, 1753 MemoryArrayLocationPc98LocalBusAddonCard = 0xA3, 1754 MemoryArrayLocationCXLAddonCard = 0xA4 1755 } MEMORY_ARRAY_LOCATION; 1756 1757 /// 1758 /// Physical Memory Array - Use. 1759 /// 1760 typedef enum { 1761 MemoryArrayUseOther = 0x01, 1762 MemoryArrayUseUnknown = 0x02, 1763 MemoryArrayUseSystemMemory = 0x03, 1764 MemoryArrayUseVideoMemory = 0x04, 1765 MemoryArrayUseFlashMemory = 0x05, 1766 MemoryArrayUseNonVolatileRam = 0x06, 1767 MemoryArrayUseCacheMemory = 0x07 1768 } MEMORY_ARRAY_USE; 1769 1770 /// 1771 /// Physical Memory Array - Error Correction Types. 1772 /// 1773 typedef enum { 1774 MemoryErrorCorrectionOther = 0x01, 1775 MemoryErrorCorrectionUnknown = 0x02, 1776 MemoryErrorCorrectionNone = 0x03, 1777 MemoryErrorCorrectionParity = 0x04, 1778 MemoryErrorCorrectionSingleBitEcc = 0x05, 1779 MemoryErrorCorrectionMultiBitEcc = 0x06, 1780 MemoryErrorCorrectionCrc = 0x07 1781 } MEMORY_ERROR_CORRECTION; 1782 1783 /// 1784 /// Physical Memory Array (Type 16). 1785 /// 1786 /// This structure describes a collection of memory devices that operate 1787 /// together to form a memory address space. 1788 /// 1789 typedef struct { 1790 SMBIOS_STRUCTURE Hdr; 1791 UINT8 Location; ///< The enumeration value from MEMORY_ARRAY_LOCATION. 1792 UINT8 Use; ///< The enumeration value from MEMORY_ARRAY_USE. 1793 UINT8 MemoryErrorCorrection; ///< The enumeration value from MEMORY_ERROR_CORRECTION. 1794 UINT32 MaximumCapacity; 1795 UINT16 MemoryErrorInformationHandle; 1796 UINT16 NumberOfMemoryDevices; 1797 // 1798 // Add for smbios 2.7 1799 // 1800 UINT64 ExtendedMaximumCapacity; 1801 } SMBIOS_TABLE_TYPE16; 1802 1803 /// 1804 /// Memory Device - Form Factor. 1805 /// 1806 typedef enum { 1807 MemoryFormFactorOther = 0x01, 1808 MemoryFormFactorUnknown = 0x02, 1809 MemoryFormFactorSimm = 0x03, 1810 MemoryFormFactorSip = 0x04, 1811 MemoryFormFactorChip = 0x05, 1812 MemoryFormFactorDip = 0x06, 1813 MemoryFormFactorZip = 0x07, 1814 MemoryFormFactorProprietaryCard = 0x08, 1815 MemoryFormFactorDimm = 0x09, 1816 MemoryFormFactorTsop = 0x0A, 1817 MemoryFormFactorRowOfChips = 0x0B, 1818 MemoryFormFactorRimm = 0x0C, 1819 MemoryFormFactorSodimm = 0x0D, 1820 MemoryFormFactorSrimm = 0x0E, 1821 MemoryFormFactorFbDimm = 0x0F, 1822 MemoryFormFactorDie = 0x10 1823 } MEMORY_FORM_FACTOR; 1824 1825 /// 1826 /// Memory Device - Type 1827 /// 1828 typedef enum { 1829 MemoryTypeOther = 0x01, 1830 MemoryTypeUnknown = 0x02, 1831 MemoryTypeDram = 0x03, 1832 MemoryTypeEdram = 0x04, 1833 MemoryTypeVram = 0x05, 1834 MemoryTypeSram = 0x06, 1835 MemoryTypeRam = 0x07, 1836 MemoryTypeRom = 0x08, 1837 MemoryTypeFlash = 0x09, 1838 MemoryTypeEeprom = 0x0A, 1839 MemoryTypeFeprom = 0x0B, 1840 MemoryTypeEprom = 0x0C, 1841 MemoryTypeCdram = 0x0D, 1842 MemoryType3Dram = 0x0E, 1843 MemoryTypeSdram = 0x0F, 1844 MemoryTypeSgram = 0x10, 1845 MemoryTypeRdram = 0x11, 1846 MemoryTypeDdr = 0x12, 1847 MemoryTypeDdr2 = 0x13, 1848 MemoryTypeDdr2FbDimm = 0x14, 1849 MemoryTypeDdr3 = 0x18, 1850 MemoryTypeFbd2 = 0x19, 1851 MemoryTypeDdr4 = 0x1A, 1852 MemoryTypeLpddr = 0x1B, 1853 MemoryTypeLpddr2 = 0x1C, 1854 MemoryTypeLpddr3 = 0x1D, 1855 MemoryTypeLpddr4 = 0x1E, 1856 MemoryTypeLogicalNonVolatileDevice = 0x1F, 1857 MemoryTypeHBM = 0x20, 1858 MemoryTypeHBM2 = 0x21, 1859 MemoryTypeDdr5 = 0x22, 1860 MemoryTypeLpddr5 = 0x23, 1861 MemoryTypeHBM3 = 0x24 1862 } MEMORY_DEVICE_TYPE; 1863 1864 /// 1865 /// Memory Device - Type Detail 1866 /// 1867 typedef struct { 1868 UINT16 Reserved : 1; 1869 UINT16 Other : 1; 1870 UINT16 Unknown : 1; 1871 UINT16 FastPaged : 1; 1872 UINT16 StaticColumn : 1; 1873 UINT16 PseudoStatic : 1; 1874 UINT16 Rambus : 1; 1875 UINT16 Synchronous : 1; 1876 UINT16 Cmos : 1; 1877 UINT16 Edo : 1; 1878 UINT16 WindowDram : 1; 1879 UINT16 CacheDram : 1; 1880 UINT16 Nonvolatile : 1; 1881 UINT16 Registered : 1; 1882 UINT16 Unbuffered : 1; 1883 UINT16 LrDimm : 1; 1884 } MEMORY_DEVICE_TYPE_DETAIL; 1885 1886 /// 1887 /// Memory Device - Memory Technology 1888 /// 1889 typedef enum { 1890 MemoryTechnologyOther = 0x01, 1891 MemoryTechnologyUnknown = 0x02, 1892 MemoryTechnologyDram = 0x03, 1893 MemoryTechnologyNvdimmN = 0x04, 1894 MemoryTechnologyNvdimmF = 0x05, 1895 MemoryTechnologyNvdimmP = 0x06, 1896 // 1897 // This definition is updated to represent Intel 1898 // Optane DC Persistent Memory in SMBIOS spec 3.4.0 1899 // 1900 MemoryTechnologyIntelOptanePersistentMemory = 0x07 1901 } MEMORY_DEVICE_TECHNOLOGY; 1902 1903 /// 1904 /// Memory Device - Memory Operating Mode Capability 1905 /// 1906 typedef union { 1907 /// 1908 /// Individual bit fields 1909 /// 1910 struct { 1911 UINT16 Reserved : 1; ///< Set to 0. 1912 UINT16 Other : 1; 1913 UINT16 Unknown : 1; 1914 UINT16 VolatileMemory : 1; 1915 UINT16 ByteAccessiblePersistentMemory : 1; 1916 UINT16 BlockAccessiblePersistentMemory : 1; 1917 UINT16 Reserved2 : 10; ///< Set to 0. 1918 } Bits; 1919 /// 1920 /// All bit fields as a 16-bit value 1921 /// 1922 UINT16 Uint16; 1923 } MEMORY_DEVICE_OPERATING_MODE_CAPABILITY; 1924 1925 /// 1926 /// Memory Device (Type 17). 1927 /// 1928 /// This structure describes a single memory device that is part of 1929 /// a larger Physical Memory Array (Type 16). 1930 /// Note: If a system includes memory-device sockets, the SMBIOS implementation 1931 /// includes a Memory Device structure instance for each slot, whether or not the 1932 /// socket is currently populated. 1933 /// 1934 typedef struct { 1935 SMBIOS_STRUCTURE Hdr; 1936 UINT16 MemoryArrayHandle; 1937 UINT16 MemoryErrorInformationHandle; 1938 UINT16 TotalWidth; 1939 UINT16 DataWidth; 1940 UINT16 Size; 1941 UINT8 FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR. 1942 UINT8 DeviceSet; 1943 SMBIOS_TABLE_STRING DeviceLocator; 1944 SMBIOS_TABLE_STRING BankLocator; 1945 UINT8 MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE. 1946 MEMORY_DEVICE_TYPE_DETAIL TypeDetail; 1947 UINT16 Speed; 1948 SMBIOS_TABLE_STRING Manufacturer; 1949 SMBIOS_TABLE_STRING SerialNumber; 1950 SMBIOS_TABLE_STRING AssetTag; 1951 SMBIOS_TABLE_STRING PartNumber; 1952 // 1953 // Add for smbios 2.6 1954 // 1955 UINT8 Attributes; 1956 // 1957 // Add for smbios 2.7 1958 // 1959 UINT32 ExtendedSize; 1960 // 1961 // Keep using name "ConfiguredMemoryClockSpeed" for compatibility 1962 // although this field is renamed from "Configured Memory Clock Speed" 1963 // to "Configured Memory Speed" in smbios 3.2.0. 1964 // 1965 UINT16 ConfiguredMemoryClockSpeed; 1966 // 1967 // Add for smbios 2.8.0 1968 // 1969 UINT16 MinimumVoltage; 1970 UINT16 MaximumVoltage; 1971 UINT16 ConfiguredVoltage; 1972 // 1973 // Add for smbios 3.2.0 1974 // 1975 UINT8 MemoryTechnology; ///< The enumeration value from MEMORY_DEVICE_TECHNOLOGY 1976 MEMORY_DEVICE_OPERATING_MODE_CAPABILITY MemoryOperatingModeCapability; 1977 SMBIOS_TABLE_STRING FirmwareVersion; 1978 UINT16 ModuleManufacturerID; 1979 UINT16 ModuleProductID; 1980 UINT16 MemorySubsystemControllerManufacturerID; 1981 UINT16 MemorySubsystemControllerProductID; 1982 UINT64 NonVolatileSize; 1983 UINT64 VolatileSize; 1984 UINT64 CacheSize; 1985 UINT64 LogicalSize; 1986 // 1987 // Add for smbios 3.3.0 1988 // 1989 UINT32 ExtendedSpeed; 1990 UINT32 ExtendedConfiguredMemorySpeed; 1991 } SMBIOS_TABLE_TYPE17; 1992 1993 /// 1994 /// 32-bit Memory Error Information - Error Type. 1995 /// 1996 typedef enum { 1997 MemoryErrorOther = 0x01, 1998 MemoryErrorUnknown = 0x02, 1999 MemoryErrorOk = 0x03, 2000 MemoryErrorBadRead = 0x04, 2001 MemoryErrorParity = 0x05, 2002 MemoryErrorSigleBit = 0x06, 2003 MemoryErrorDoubleBit = 0x07, 2004 MemoryErrorMultiBit = 0x08, 2005 MemoryErrorNibble = 0x09, 2006 MemoryErrorChecksum = 0x0A, 2007 MemoryErrorCrc = 0x0B, 2008 MemoryErrorCorrectSingleBit = 0x0C, 2009 MemoryErrorCorrected = 0x0D, 2010 MemoryErrorUnCorrectable = 0x0E 2011 } MEMORY_ERROR_TYPE; 2012 2013 /// 2014 /// 32-bit Memory Error Information - Error Granularity. 2015 /// 2016 typedef enum { 2017 MemoryGranularityOther = 0x01, 2018 MemoryGranularityOtherUnknown = 0x02, 2019 MemoryGranularityDeviceLevel = 0x03, 2020 MemoryGranularityMemPartitionLevel = 0x04 2021 } MEMORY_ERROR_GRANULARITY; 2022 2023 /// 2024 /// 32-bit Memory Error Information - Error Operation. 2025 /// 2026 typedef enum { 2027 MemoryErrorOperationOther = 0x01, 2028 MemoryErrorOperationUnknown = 0x02, 2029 MemoryErrorOperationRead = 0x03, 2030 MemoryErrorOperationWrite = 0x04, 2031 MemoryErrorOperationPartialWrite = 0x05 2032 } MEMORY_ERROR_OPERATION; 2033 2034 /// 2035 /// 32-bit Memory Error Information (Type 18). 2036 /// 2037 /// This structure identifies the specifics of an error that might be detected 2038 /// within a Physical Memory Array. 2039 /// 2040 typedef struct { 2041 SMBIOS_STRUCTURE Hdr; 2042 UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE. 2043 UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY. 2044 UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION. 2045 UINT32 VendorSyndrome; 2046 UINT32 MemoryArrayErrorAddress; 2047 UINT32 DeviceErrorAddress; 2048 UINT32 ErrorResolution; 2049 } SMBIOS_TABLE_TYPE18; 2050 2051 /// 2052 /// Memory Array Mapped Address (Type 19). 2053 /// 2054 /// This structure provides the address mapping for a Physical Memory Array. 2055 /// One structure is present for each contiguous address range described. 2056 /// 2057 typedef struct { 2058 SMBIOS_STRUCTURE Hdr; 2059 UINT32 StartingAddress; 2060 UINT32 EndingAddress; 2061 UINT16 MemoryArrayHandle; 2062 UINT8 PartitionWidth; 2063 // 2064 // Add for smbios 2.7 2065 // 2066 UINT64 ExtendedStartingAddress; 2067 UINT64 ExtendedEndingAddress; 2068 } SMBIOS_TABLE_TYPE19; 2069 2070 /// 2071 /// Memory Device Mapped Address (Type 20). 2072 /// 2073 /// This structure maps memory address space usually to a device-level granularity. 2074 /// One structure is present for each contiguous address range described. 2075 /// 2076 typedef struct { 2077 SMBIOS_STRUCTURE Hdr; 2078 UINT32 StartingAddress; 2079 UINT32 EndingAddress; 2080 UINT16 MemoryDeviceHandle; 2081 UINT16 MemoryArrayMappedAddressHandle; 2082 UINT8 PartitionRowPosition; 2083 UINT8 InterleavePosition; 2084 UINT8 InterleavedDataDepth; 2085 // 2086 // Add for smbios 2.7 2087 // 2088 UINT64 ExtendedStartingAddress; 2089 UINT64 ExtendedEndingAddress; 2090 } SMBIOS_TABLE_TYPE20; 2091 2092 /// 2093 /// Built-in Pointing Device - Type 2094 /// 2095 typedef enum { 2096 PointingDeviceTypeOther = 0x01, 2097 PointingDeviceTypeUnknown = 0x02, 2098 PointingDeviceTypeMouse = 0x03, 2099 PointingDeviceTypeTrackBall = 0x04, 2100 PointingDeviceTypeTrackPoint = 0x05, 2101 PointingDeviceTypeGlidePoint = 0x06, 2102 PointingDeviceTouchPad = 0x07, 2103 PointingDeviceTouchScreen = 0x08, 2104 PointingDeviceOpticalSensor = 0x09 2105 } BUILTIN_POINTING_DEVICE_TYPE; 2106 2107 /// 2108 /// Built-in Pointing Device - Interface. 2109 /// 2110 typedef enum { 2111 PointingDeviceInterfaceOther = 0x01, 2112 PointingDeviceInterfaceUnknown = 0x02, 2113 PointingDeviceInterfaceSerial = 0x03, 2114 PointingDeviceInterfacePs2 = 0x04, 2115 PointingDeviceInterfaceInfrared = 0x05, 2116 PointingDeviceInterfaceHpHil = 0x06, 2117 PointingDeviceInterfaceBusMouse = 0x07, 2118 PointingDeviceInterfaceADB = 0x08, 2119 PointingDeviceInterfaceBusMouseDB9 = 0xA0, 2120 PointingDeviceInterfaceBusMouseMicroDin = 0xA1, 2121 PointingDeviceInterfaceUsb = 0xA2, 2122 PointingDeviceInterfaceI2c = 0xA3, 2123 PointingDeviceInterfaceSpi = 0xA4 2124 } BUILTIN_POINTING_DEVICE_INTERFACE; 2125 2126 /// 2127 /// Built-in Pointing Device (Type 21). 2128 /// 2129 /// This structure describes the attributes of the built-in pointing device for the 2130 /// system. The presence of this structure does not imply that the built-in 2131 /// pointing device is active for the system's use! 2132 /// 2133 typedef struct { 2134 SMBIOS_STRUCTURE Hdr; 2135 UINT8 Type; ///< The enumeration value from BUILTIN_POINTING_DEVICE_TYPE. 2136 UINT8 Interface; ///< The enumeration value from BUILTIN_POINTING_DEVICE_INTERFACE. 2137 UINT8 NumberOfButtons; 2138 } SMBIOS_TABLE_TYPE21; 2139 2140 /// 2141 /// Portable Battery - Device Chemistry 2142 /// 2143 typedef enum { 2144 PortableBatteryDeviceChemistryOther = 0x01, 2145 PortableBatteryDeviceChemistryUnknown = 0x02, 2146 PortableBatteryDeviceChemistryLeadAcid = 0x03, 2147 PortableBatteryDeviceChemistryNickelCadmium = 0x04, 2148 PortableBatteryDeviceChemistryNickelMetalHydride = 0x05, 2149 PortableBatteryDeviceChemistryLithiumIon = 0x06, 2150 PortableBatteryDeviceChemistryZincAir = 0x07, 2151 PortableBatteryDeviceChemistryLithiumPolymer = 0x08 2152 } PORTABLE_BATTERY_DEVICE_CHEMISTRY; 2153 2154 /// 2155 /// Portable Battery (Type 22). 2156 /// 2157 /// This structure describes the attributes of the portable battery(s) for the system. 2158 /// The structure contains the static attributes for the group. Each structure describes 2159 /// a single battery pack's attributes. 2160 /// 2161 typedef struct { 2162 SMBIOS_STRUCTURE Hdr; 2163 SMBIOS_TABLE_STRING Location; 2164 SMBIOS_TABLE_STRING Manufacturer; 2165 SMBIOS_TABLE_STRING ManufactureDate; 2166 SMBIOS_TABLE_STRING SerialNumber; 2167 SMBIOS_TABLE_STRING DeviceName; 2168 UINT8 DeviceChemistry; ///< The enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY. 2169 UINT16 DeviceCapacity; 2170 UINT16 DesignVoltage; 2171 SMBIOS_TABLE_STRING SBDSVersionNumber; 2172 UINT8 MaximumErrorInBatteryData; 2173 UINT16 SBDSSerialNumber; 2174 UINT16 SBDSManufactureDate; 2175 SMBIOS_TABLE_STRING SBDSDeviceChemistry; 2176 UINT8 DesignCapacityMultiplier; 2177 UINT32 OEMSpecific; 2178 } SMBIOS_TABLE_TYPE22; 2179 2180 /// 2181 /// System Reset (Type 23) 2182 /// 2183 /// This structure describes whether Automatic System Reset functions enabled (Status). 2184 /// If the system has a watchdog Timer and the timer is not reset (Timer Reset) 2185 /// before the Interval elapses, an automatic system reset will occur. The system will re-boot 2186 /// according to the Boot Option. This function may repeat until the Limit is reached, at which time 2187 /// the system will re-boot according to the Boot Option at Limit. 2188 /// 2189 typedef struct { 2190 SMBIOS_STRUCTURE Hdr; 2191 UINT8 Capabilities; 2192 UINT16 ResetCount; 2193 UINT16 ResetLimit; 2194 UINT16 TimerInterval; 2195 UINT16 Timeout; 2196 } SMBIOS_TABLE_TYPE23; 2197 2198 /// 2199 /// Hardware Security (Type 24). 2200 /// 2201 /// This structure describes the system-wide hardware security settings. 2202 /// 2203 typedef struct { 2204 SMBIOS_STRUCTURE Hdr; 2205 UINT8 HardwareSecuritySettings; 2206 } SMBIOS_TABLE_TYPE24; 2207 2208 /// 2209 /// System Power Controls (Type 25). 2210 /// 2211 /// This structure describes the attributes for controlling the main power supply to the system. 2212 /// Software that interprets this structure uses the month, day, hour, minute, and second values 2213 /// to determine the number of seconds until the next power-on of the system. The presence of 2214 /// this structure implies that a timed power-on facility is available for the system. 2215 /// 2216 typedef struct { 2217 SMBIOS_STRUCTURE Hdr; 2218 UINT8 NextScheduledPowerOnMonth; 2219 UINT8 NextScheduledPowerOnDayOfMonth; 2220 UINT8 NextScheduledPowerOnHour; 2221 UINT8 NextScheduledPowerOnMinute; 2222 UINT8 NextScheduledPowerOnSecond; 2223 } SMBIOS_TABLE_TYPE25; 2224 2225 /// 2226 /// Voltage Probe - Location and Status. 2227 /// 2228 typedef struct { 2229 UINT8 VoltageProbeSite : 5; 2230 UINT8 VoltageProbeStatus : 3; 2231 } MISC_VOLTAGE_PROBE_LOCATION; 2232 2233 /// 2234 /// Voltage Probe (Type 26) 2235 /// 2236 /// This describes the attributes for a voltage probe in the system. 2237 /// Each structure describes a single voltage probe. 2238 /// 2239 typedef struct { 2240 SMBIOS_STRUCTURE Hdr; 2241 SMBIOS_TABLE_STRING Description; 2242 MISC_VOLTAGE_PROBE_LOCATION LocationAndStatus; 2243 UINT16 MaximumValue; 2244 UINT16 MinimumValue; 2245 UINT16 Resolution; 2246 UINT16 Tolerance; 2247 UINT16 Accuracy; 2248 UINT32 OEMDefined; 2249 UINT16 NominalValue; 2250 } SMBIOS_TABLE_TYPE26; 2251 2252 /// 2253 /// Cooling Device - Device Type and Status. 2254 /// 2255 typedef struct { 2256 UINT8 CoolingDevice : 5; 2257 UINT8 CoolingDeviceStatus : 3; 2258 } MISC_COOLING_DEVICE_TYPE; 2259 2260 /// 2261 /// Cooling Device (Type 27) 2262 /// 2263 /// This structure describes the attributes for a cooling device in the system. 2264 /// Each structure describes a single cooling device. 2265 /// 2266 typedef struct { 2267 SMBIOS_STRUCTURE Hdr; 2268 UINT16 TemperatureProbeHandle; 2269 MISC_COOLING_DEVICE_TYPE DeviceTypeAndStatus; 2270 UINT8 CoolingUnitGroup; 2271 UINT32 OEMDefined; 2272 UINT16 NominalSpeed; 2273 // 2274 // Add for smbios 2.7 2275 // 2276 SMBIOS_TABLE_STRING Description; 2277 } SMBIOS_TABLE_TYPE27; 2278 2279 /// 2280 /// Temperature Probe - Location and Status. 2281 /// 2282 typedef struct { 2283 UINT8 TemperatureProbeSite : 5; 2284 UINT8 TemperatureProbeStatus : 3; 2285 } MISC_TEMPERATURE_PROBE_LOCATION; 2286 2287 /// 2288 /// Temperature Probe (Type 28). 2289 /// 2290 /// This structure describes the attributes for a temperature probe in the system. 2291 /// Each structure describes a single temperature probe. 2292 /// 2293 typedef struct { 2294 SMBIOS_STRUCTURE Hdr; 2295 SMBIOS_TABLE_STRING Description; 2296 MISC_TEMPERATURE_PROBE_LOCATION LocationAndStatus; 2297 UINT16 MaximumValue; 2298 UINT16 MinimumValue; 2299 UINT16 Resolution; 2300 UINT16 Tolerance; 2301 UINT16 Accuracy; 2302 UINT32 OEMDefined; 2303 UINT16 NominalValue; 2304 } SMBIOS_TABLE_TYPE28; 2305 2306 /// 2307 /// Electrical Current Probe - Location and Status. 2308 /// 2309 typedef struct { 2310 UINT8 ElectricalCurrentProbeSite : 5; 2311 UINT8 ElectricalCurrentProbeStatus : 3; 2312 } MISC_ELECTRICAL_CURRENT_PROBE_LOCATION; 2313 2314 /// 2315 /// Electrical Current Probe (Type 29). 2316 /// 2317 /// This structure describes the attributes for an electrical current probe in the system. 2318 /// Each structure describes a single electrical current probe. 2319 /// 2320 typedef struct { 2321 SMBIOS_STRUCTURE Hdr; 2322 SMBIOS_TABLE_STRING Description; 2323 MISC_ELECTRICAL_CURRENT_PROBE_LOCATION LocationAndStatus; 2324 UINT16 MaximumValue; 2325 UINT16 MinimumValue; 2326 UINT16 Resolution; 2327 UINT16 Tolerance; 2328 UINT16 Accuracy; 2329 UINT32 OEMDefined; 2330 UINT16 NominalValue; 2331 } SMBIOS_TABLE_TYPE29; 2332 2333 /// 2334 /// Out-of-Band Remote Access (Type 30). 2335 /// 2336 /// This structure describes the attributes and policy settings of a hardware facility 2337 /// that may be used to gain remote access to a hardware system when the operating system 2338 /// is not available due to power-down status, hardware failures, or boot failures. 2339 /// 2340 typedef struct { 2341 SMBIOS_STRUCTURE Hdr; 2342 SMBIOS_TABLE_STRING ManufacturerName; 2343 UINT8 Connections; 2344 } SMBIOS_TABLE_TYPE30; 2345 2346 /// 2347 /// Boot Integrity Services (BIS) Entry Point (Type 31). 2348 /// 2349 /// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS). 2350 /// 2351 typedef struct { 2352 SMBIOS_STRUCTURE Hdr; 2353 UINT8 Checksum; 2354 UINT8 Reserved1; 2355 UINT16 Reserved2; 2356 UINT32 BisEntry16; 2357 UINT32 BisEntry32; 2358 UINT64 Reserved3; 2359 UINT32 Reserved4; 2360 } SMBIOS_TABLE_TYPE31; 2361 2362 /// 2363 /// System Boot Information - System Boot Status. 2364 /// 2365 typedef enum { 2366 BootInformationStatusNoError = 0x00, 2367 BootInformationStatusNoBootableMedia = 0x01, 2368 BootInformationStatusNormalOSFailedLoading = 0x02, 2369 BootInformationStatusFirmwareDetectedFailure = 0x03, 2370 BootInformationStatusOSDetectedFailure = 0x04, 2371 BootInformationStatusUserRequestedBoot = 0x05, 2372 BootInformationStatusSystemSecurityViolation = 0x06, 2373 BootInformationStatusPreviousRequestedImage = 0x07, 2374 BootInformationStatusWatchdogTimerExpired = 0x08, 2375 BootInformationStatusStartReserved = 0x09, 2376 BootInformationStatusStartOemSpecific = 0x80, 2377 BootInformationStatusStartProductSpecific = 0xC0 2378 } MISC_BOOT_INFORMATION_STATUS_DATA_TYPE; 2379 2380 /// 2381 /// System Boot Information (Type 32). 2382 /// 2383 /// The client system firmware, e.g. BIOS, communicates the System Boot Status to the 2384 /// client's Pre-boot Execution Environment (PXE) boot image or OS-present management 2385 /// application via this structure. When used in the PXE environment, for example, 2386 /// this code identifies the reason the PXE was initiated and can be used by boot-image 2387 /// software to further automate an enterprise's PXE sessions. For example, an enterprise 2388 /// could choose to automatically download a hardware-diagnostic image to a client whose 2389 /// reason code indicated either a firmware- or operating system-detected hardware failure. 2390 /// 2391 typedef struct { 2392 SMBIOS_STRUCTURE Hdr; 2393 UINT8 Reserved[6]; 2394 UINT8 BootStatus; ///< The enumeration value from MISC_BOOT_INFORMATION_STATUS_DATA_TYPE. 2395 } SMBIOS_TABLE_TYPE32; 2396 2397 /// 2398 /// 64-bit Memory Error Information (Type 33). 2399 /// 2400 /// This structure describes an error within a Physical Memory Array, 2401 /// when the error address is above 4G (0xFFFFFFFF). 2402 /// 2403 typedef struct { 2404 SMBIOS_STRUCTURE Hdr; 2405 UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE. 2406 UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY. 2407 UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION. 2408 UINT32 VendorSyndrome; 2409 UINT64 MemoryArrayErrorAddress; 2410 UINT64 DeviceErrorAddress; 2411 UINT32 ErrorResolution; 2412 } SMBIOS_TABLE_TYPE33; 2413 2414 /// 2415 /// Management Device - Type. 2416 /// 2417 typedef enum { 2418 ManagementDeviceTypeOther = 0x01, 2419 ManagementDeviceTypeUnknown = 0x02, 2420 ManagementDeviceTypeLm75 = 0x03, 2421 ManagementDeviceTypeLm78 = 0x04, 2422 ManagementDeviceTypeLm79 = 0x05, 2423 ManagementDeviceTypeLm80 = 0x06, 2424 ManagementDeviceTypeLm81 = 0x07, 2425 ManagementDeviceTypeAdm9240 = 0x08, 2426 ManagementDeviceTypeDs1780 = 0x09, 2427 ManagementDeviceTypeMaxim1617 = 0x0A, 2428 ManagementDeviceTypeGl518Sm = 0x0B, 2429 ManagementDeviceTypeW83781D = 0x0C, 2430 ManagementDeviceTypeHt82H791 = 0x0D 2431 } MISC_MANAGEMENT_DEVICE_TYPE; 2432 2433 /// 2434 /// Management Device - Address Type. 2435 /// 2436 typedef enum { 2437 ManagementDeviceAddressTypeOther = 0x01, 2438 ManagementDeviceAddressTypeUnknown = 0x02, 2439 ManagementDeviceAddressTypeIOPort = 0x03, 2440 ManagementDeviceAddressTypeMemory = 0x04, 2441 ManagementDeviceAddressTypeSmbus = 0x05 2442 } MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE; 2443 2444 /// 2445 /// Management Device (Type 34). 2446 /// 2447 /// The information in this structure defines the attributes of a Management Device. 2448 /// A Management Device might control one or more fans or voltage, current, or temperature 2449 /// probes as defined by one or more Management Device Component structures. 2450 /// 2451 typedef struct { 2452 SMBIOS_STRUCTURE Hdr; 2453 SMBIOS_TABLE_STRING Description; 2454 UINT8 Type; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_TYPE. 2455 UINT32 Address; 2456 UINT8 AddressType; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE. 2457 } SMBIOS_TABLE_TYPE34; 2458 2459 /// 2460 /// Management Device Component (Type 35) 2461 /// 2462 /// This structure associates a cooling device or environmental probe with structures 2463 /// that define the controlling hardware device and (optionally) the component's thresholds. 2464 /// 2465 typedef struct { 2466 SMBIOS_STRUCTURE Hdr; 2467 SMBIOS_TABLE_STRING Description; 2468 UINT16 ManagementDeviceHandle; 2469 UINT16 ComponentHandle; 2470 UINT16 ThresholdHandle; 2471 } SMBIOS_TABLE_TYPE35; 2472 2473 /// 2474 /// Management Device Threshold Data (Type 36). 2475 /// 2476 /// The information in this structure defines threshold information for 2477 /// a component (probe or cooling-unit) contained within a Management Device. 2478 /// 2479 typedef struct { 2480 SMBIOS_STRUCTURE Hdr; 2481 UINT16 LowerThresholdNonCritical; 2482 UINT16 UpperThresholdNonCritical; 2483 UINT16 LowerThresholdCritical; 2484 UINT16 UpperThresholdCritical; 2485 UINT16 LowerThresholdNonRecoverable; 2486 UINT16 UpperThresholdNonRecoverable; 2487 } SMBIOS_TABLE_TYPE36; 2488 2489 /// 2490 /// Memory Channel Entry. 2491 /// 2492 typedef struct { 2493 UINT8 DeviceLoad; 2494 UINT16 DeviceHandle; 2495 } MEMORY_DEVICE; 2496 2497 /// 2498 /// Memory Channel - Channel Type. 2499 /// 2500 typedef enum { 2501 MemoryChannelTypeOther = 0x01, 2502 MemoryChannelTypeUnknown = 0x02, 2503 MemoryChannelTypeRambus = 0x03, 2504 MemoryChannelTypeSyncLink = 0x04 2505 } MEMORY_CHANNEL_TYPE; 2506 2507 /// 2508 /// Memory Channel (Type 37) 2509 /// 2510 /// The information in this structure provides the correlation between a Memory Channel 2511 /// and its associated Memory Devices. Each device presents one or more loads to the channel. 2512 /// The sum of all device loads cannot exceed the channel's defined maximum. 2513 /// 2514 typedef struct { 2515 SMBIOS_STRUCTURE Hdr; 2516 UINT8 ChannelType; 2517 UINT8 MaximumChannelLoad; 2518 UINT8 MemoryDeviceCount; 2519 MEMORY_DEVICE MemoryDevice[1]; 2520 } SMBIOS_TABLE_TYPE37; 2521 2522 /// 2523 /// IPMI Device Information - BMC Interface Type 2524 /// 2525 typedef enum { 2526 IPMIDeviceInfoInterfaceTypeUnknown = 0x00, 2527 IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< The Keyboard Controller Style. 2528 IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< The Server Management Interface Chip. 2529 IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< The Block Transfer 2530 IPMIDeviceInfoInterfaceTypeSSIF = 0x04 ///< SMBus System Interface 2531 } BMC_INTERFACE_TYPE; 2532 2533 /// 2534 /// IPMI Device Information (Type 38). 2535 /// 2536 /// The information in this structure defines the attributes of an 2537 /// Intelligent Platform Management Interface (IPMI) Baseboard Management Controller (BMC). 2538 /// 2539 /// The Type 42 structure can also be used to describe a physical management controller 2540 /// host interface and one or more protocols that share that interface. If IPMI is not 2541 /// shared with other protocols, either the Type 38 or Type 42 structures can be used. 2542 /// Providing Type 38 is recommended for backward compatibility. 2543 /// 2544 typedef struct { 2545 SMBIOS_STRUCTURE Hdr; 2546 UINT8 InterfaceType; ///< The enumeration value from BMC_INTERFACE_TYPE. 2547 UINT8 IPMISpecificationRevision; 2548 UINT8 I2CSlaveAddress; 2549 UINT8 NVStorageDeviceAddress; 2550 UINT64 BaseAddress; 2551 UINT8 BaseAddressModifier_InterruptInfo; 2552 UINT8 InterruptNumber; 2553 } SMBIOS_TABLE_TYPE38; 2554 2555 /// 2556 /// System Power Supply - Power Supply Characteristics. 2557 /// 2558 typedef struct { 2559 UINT16 PowerSupplyHotReplaceable : 1; 2560 UINT16 PowerSupplyPresent : 1; 2561 UINT16 PowerSupplyUnplugged : 1; 2562 UINT16 InputVoltageRangeSwitch : 4; 2563 UINT16 PowerSupplyStatus : 3; 2564 UINT16 PowerSupplyType : 4; 2565 UINT16 Reserved : 2; 2566 } SYS_POWER_SUPPLY_CHARACTERISTICS; 2567 2568 /// 2569 /// System Power Supply (Type 39). 2570 /// 2571 /// This structure identifies attributes of a system power supply. One instance 2572 /// of this record is present for each possible power supply in a system. 2573 /// 2574 typedef struct { 2575 SMBIOS_STRUCTURE Hdr; 2576 UINT8 PowerUnitGroup; 2577 SMBIOS_TABLE_STRING Location; 2578 SMBIOS_TABLE_STRING DeviceName; 2579 SMBIOS_TABLE_STRING Manufacturer; 2580 SMBIOS_TABLE_STRING SerialNumber; 2581 SMBIOS_TABLE_STRING AssetTagNumber; 2582 SMBIOS_TABLE_STRING ModelPartNumber; 2583 SMBIOS_TABLE_STRING RevisionLevel; 2584 UINT16 MaxPowerCapacity; 2585 SYS_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics; 2586 UINT16 InputVoltageProbeHandle; 2587 UINT16 CoolingDeviceHandle; 2588 UINT16 InputCurrentProbeHandle; 2589 } SMBIOS_TABLE_TYPE39; 2590 2591 /// 2592 /// Additional Information Entry Format. 2593 /// 2594 typedef struct { 2595 UINT8 EntryLength; 2596 UINT16 ReferencedHandle; 2597 UINT8 ReferencedOffset; 2598 SMBIOS_TABLE_STRING EntryString; 2599 UINT8 Value[1]; 2600 } ADDITIONAL_INFORMATION_ENTRY; 2601 2602 /// 2603 /// Additional Information (Type 40). 2604 /// 2605 /// This structure is intended to provide additional information for handling unspecified 2606 /// enumerated values and interim field updates in another structure. 2607 /// 2608 typedef struct { 2609 SMBIOS_STRUCTURE Hdr; 2610 UINT8 NumberOfAdditionalInformationEntries; 2611 ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1]; 2612 } SMBIOS_TABLE_TYPE40; 2613 2614 /// 2615 /// Onboard Devices Extended Information - Onboard Device Types. 2616 /// 2617 typedef enum { 2618 OnBoardDeviceExtendedTypeOther = 0x01, 2619 OnBoardDeviceExtendedTypeUnknown = 0x02, 2620 OnBoardDeviceExtendedTypeVideo = 0x03, 2621 OnBoardDeviceExtendedTypeScsiController = 0x04, 2622 OnBoardDeviceExtendedTypeEthernet = 0x05, 2623 OnBoardDeviceExtendedTypeTokenRing = 0x06, 2624 OnBoardDeviceExtendedTypeSound = 0x07, 2625 OnBoardDeviceExtendedTypePATAController = 0x08, 2626 OnBoardDeviceExtendedTypeSATAController = 0x09, 2627 OnBoardDeviceExtendedTypeSASController = 0x0A, 2628 OnBoardDeviceExtendedTypeWirelessLAN = 0x0B, 2629 OnBoardDeviceExtendedTypeBluetooth = 0x0C, 2630 OnBoardDeviceExtendedTypeWWAN = 0x0D, 2631 OnBoardDeviceExtendedTypeeMMC = 0x0E, 2632 OnBoardDeviceExtendedTypeNvme = 0x0F, 2633 OnBoardDeviceExtendedTypeUfc = 0x10 2634 } ONBOARD_DEVICE_EXTENDED_INFO_TYPE; 2635 2636 /// 2637 /// Onboard Devices Extended Information (Type 41). 2638 /// 2639 /// The information in this structure defines the attributes of devices that 2640 /// are onboard (soldered onto) a system element, usually the baseboard. 2641 /// In general, an entry in this table implies that the BIOS has some level of 2642 /// control over the enabling of the associated device for use by the system. 2643 /// 2644 typedef struct { 2645 SMBIOS_STRUCTURE Hdr; 2646 SMBIOS_TABLE_STRING ReferenceDesignation; 2647 UINT8 DeviceType; ///< The enumeration value from ONBOARD_DEVICE_EXTENDED_INFO_TYPE 2648 UINT8 DeviceTypeInstance; 2649 UINT16 SegmentGroupNum; 2650 UINT8 BusNum; 2651 UINT8 DevFuncNum; 2652 } SMBIOS_TABLE_TYPE41; 2653 2654 /// 2655 /// Management Controller Host Interface - Protocol Record Data Format. 2656 /// 2657 typedef struct { 2658 UINT8 ProtocolType; 2659 UINT8 ProtocolTypeDataLen; 2660 UINT8 ProtocolTypeData[1]; 2661 } MC_HOST_INTERFACE_PROTOCOL_RECORD; 2662 2663 /// 2664 /// Management Controller Host Interface - Interface Types. 2665 /// 00h - 3Fh: MCTP Host Interfaces 2666 /// 2667 typedef enum { 2668 MCHostInterfaceTypeNetworkHostInterface = 0x40, 2669 MCHostInterfaceTypeOemDefined = 0xF0 2670 } MC_HOST_INTERFACE_TYPE; 2671 2672 /// 2673 /// Management Controller Host Interface - Protocol Types. 2674 /// 2675 typedef enum { 2676 MCHostInterfaceProtocolTypeIPMI = 0x02, 2677 MCHostInterfaceProtocolTypeMCTP = 0x03, 2678 MCHostInterfaceProtocolTypeRedfishOverIP = 0x04, 2679 MCHostInterfaceProtocolTypeOemDefined = 0xF0 2680 } MC_HOST_INTERFACE_PROTOCOL_TYPE; 2681 2682 /// 2683 /// Management Controller Host Interface (Type 42). 2684 /// 2685 /// The information in this structure defines the attributes of a Management 2686 /// Controller Host Interface that is not discoverable by "Plug and Play" mechanisms. 2687 /// 2688 /// Type 42 should be used for management controller host interfaces that use protocols 2689 /// other than IPMI or that use multiple protocols on a single host interface type. 2690 /// 2691 /// This structure should also be provided if IPMI is shared with other protocols 2692 /// over the same interface hardware. If IPMI is not shared with other protocols, 2693 /// either the Type 38 or Type 42 structures can be used. Providing Type 38 is 2694 /// recommended for backward compatibility. The structures are not required to 2695 /// be mutually exclusive. Type 38 and Type 42 structures may be implemented 2696 /// simultaneously to provide backward compatibility with IPMI applications or drivers 2697 /// that do not yet recognize the Type 42 structure. 2698 /// 2699 typedef struct { 2700 SMBIOS_STRUCTURE Hdr; 2701 UINT8 InterfaceType; ///< The enumeration value from MC_HOST_INTERFACE_TYPE 2702 UINT8 InterfaceTypeSpecificDataLength; 2703 UINT8 InterfaceTypeSpecificData[4]; ///< This field has a minimum of four bytes 2704 } SMBIOS_TABLE_TYPE42; 2705 2706 /// 2707 /// Processor Specific Block - Processor Architecture Type 2708 /// 2709 typedef enum { 2710 ProcessorSpecificBlockArchTypeReserved = 0x00, 2711 ProcessorSpecificBlockArchTypeIa32 = 0x01, 2712 ProcessorSpecificBlockArchTypeX64 = 0x02, 2713 ProcessorSpecificBlockArchTypeItanium = 0x03, 2714 ProcessorSpecificBlockArchTypeAarch32 = 0x04, 2715 ProcessorSpecificBlockArchTypeAarch64 = 0x05, 2716 ProcessorSpecificBlockArchTypeRiscVRV32 = 0x06, 2717 ProcessorSpecificBlockArchTypeRiscVRV64 = 0x07, 2718 ProcessorSpecificBlockArchTypeRiscVRV128 = 0x08, 2719 ProcessorSpecificBlockArchTypeLoongArch32 = 0x09, 2720 ProcessorSpecificBlockArchTypeLoongArch64 = 0x0A 2721 } PROCESSOR_SPECIFIC_BLOCK_ARCH_TYPE; 2722 2723 /// 2724 /// Processor Specific Block is the standard container of processor-specific data. 2725 /// 2726 typedef struct { 2727 UINT8 Length; 2728 UINT8 ProcessorArchType; 2729 /// 2730 /// Below followed by Processor-specific data 2731 /// 2732 /// 2733 } PROCESSOR_SPECIFIC_BLOCK; 2734 2735 /// 2736 /// Processor Additional Information(Type 44). 2737 /// 2738 /// The information in this structure defines the processor additional information in case 2739 /// SMBIOS type 4 is not sufficient to describe processor characteristics. 2740 /// The SMBIOS type 44 structure has a reference handle field to link back to the related 2741 /// SMBIOS type 4 structure. There may be multiple SMBIOS type 44 structures linked to the 2742 /// same SMBIOS type 4 structure. For example, when cores are not identical in a processor, 2743 /// SMBIOS type 44 structures describe different core-specific information. 2744 /// 2745 /// SMBIOS type 44 defines the standard header for the processor-specific block, while the 2746 /// contents of processor-specific data are maintained by processor 2747 /// architecture workgroups or vendors in separate documents. 2748 /// 2749 typedef struct { 2750 SMBIOS_STRUCTURE Hdr; 2751 SMBIOS_HANDLE RefHandle; ///< This field refer to associated SMBIOS type 4 2752 /// 2753 /// Below followed by Processor-specific block 2754 /// 2755 PROCESSOR_SPECIFIC_BLOCK ProcessorSpecificBlock; 2756 } SMBIOS_TABLE_TYPE44; 2757 2758 /// 2759 /// TPM Device (Type 43). 2760 /// 2761 typedef struct { 2762 SMBIOS_STRUCTURE Hdr; 2763 UINT8 VendorID[4]; 2764 UINT8 MajorSpecVersion; 2765 UINT8 MinorSpecVersion; 2766 UINT32 FirmwareVersion1; 2767 UINT32 FirmwareVersion2; 2768 SMBIOS_TABLE_STRING Description; 2769 UINT64 Characteristics; 2770 UINT32 OemDefined; 2771 } SMBIOS_TABLE_TYPE43; 2772 2773 /// 2774 /// Firmware Inventory Version Format Type (Type 45). 2775 /// 2776 typedef enum { 2777 VersionFormatTypeFreeForm = 0x00, 2778 VersionFormatTypeMajorMinor = 0x01, 2779 VersionFormatType32BitHex = 0x02, 2780 VersionFormatType64BitHex = 0x03, 2781 VersionFormatTypeReserved = 0x04, /// 0x04 - 0x7F are reserved 2782 VersionFormatTypeOem = 0x80 /// 0x80 - 0xFF are BIOS Vendor/OEM-specific 2783 } FIRMWARE_INVENTORY_VERSION_FORMAT_TYPE; 2784 2785 /// 2786 /// Firmware Inventory Firmware Id Format Type (Type 45). 2787 /// 2788 typedef enum { 2789 FirmwareIdFormatTypeFreeForm = 0x00, 2790 FirmwareIdFormatTypeUuid = 0x01, 2791 FirmwareIdFormatTypeReserved = 0x04, /// 0x04 - 0x7F are reserved 2792 InventoryFirmwareIdFormatTypeOem = 0x80 /// 0x80 - 0xFF are BIOS Vendor/OEM-specific 2793 } FIRMWARE_INVENTORY_FIRMWARE_ID_FORMAT_TYPE; 2794 2795 /// 2796 /// Firmware Inventory Firmware Characteristics (Type 45). 2797 /// 2798 typedef struct { 2799 UINT16 Updatable : 1; 2800 UINT16 WriteProtected : 1; 2801 UINT16 Reserved : 14; 2802 } FIRMWARE_CHARACTERISTICS; 2803 2804 /// 2805 /// Firmware Inventory State Information (Type 45). 2806 /// 2807 typedef enum { 2808 FirmwareInventoryStateOther = 0x01, 2809 FirmwareInventoryStateUnknown = 0x02, 2810 FirmwareInventoryStateDisabled = 0x03, 2811 FirmwareInventoryStateEnabled = 0x04, 2812 FirmwareInventoryStateAbsent = 0x05, 2813 FirmwareInventoryStateStandbyOffline = 0x06, 2814 FirmwareInventoryStateStandbySpare = 0x07, 2815 FirmwareInventoryStateUnavailableOffline = 0x08 2816 } FIRMWARE_INVENTORY_STATE; 2817 2818 /// 2819 /// Firmware Inventory Information (Type 45) 2820 /// 2821 /// The information in this structure defines an inventory of firmware 2822 /// components in the system. This can include firmware components such as 2823 /// BIOS, BMC, as well as firmware for other devices in the system. 2824 /// The information can be used by software to display the firmware inventory 2825 /// in a uniform manner. It can also be used by a management controller, 2826 /// such as a BMC, for remote system management. 2827 /// This structure is not intended to replace other standard programmatic 2828 /// interfaces for firmware updates. 2829 /// One Type 45 structure is provided for each firmware component. 2830 /// 2831 typedef struct { 2832 SMBIOS_STRUCTURE Hdr; 2833 SMBIOS_TABLE_STRING FirmwareComponentName; 2834 SMBIOS_TABLE_STRING FirmwareVersion; 2835 UINT8 FirmwareVersionFormat; ///< The enumeration value from FIRMWARE_INVENTORY_VERSION_FORMAT_TYPE 2836 SMBIOS_TABLE_STRING FirmwareId; 2837 UINT8 FirmwareIdFormat; ///< The enumeration value from FIRMWARE_INVENTORY_FIRMWARE_ID_FORMAT_TYPE. 2838 SMBIOS_TABLE_STRING ReleaseDate; 2839 SMBIOS_TABLE_STRING Manufacturer; 2840 SMBIOS_TABLE_STRING LowestSupportedVersion; 2841 UINT64 ImageSize; 2842 FIRMWARE_CHARACTERISTICS Characteristics; 2843 UINT8 State; ///< The enumeration value from FIRMWARE_INVENTORY_STATE. 2844 UINT8 AssociatedComponentCount; 2845 /// 2846 /// zero or n-number of handles depends on AssociatedComponentCount 2847 /// handles are of type SMBIOS_HANDLE 2848 /// 2849 } SMBIOS_TABLE_TYPE45; 2850 2851 /// 2852 /// String Property IDs (Type 46). 2853 /// 2854 typedef enum { 2855 StringPropertyIdNone = 0x0000, 2856 StringPropertyIdDevicePath = 0x0001, 2857 StringPropertyIdReserved = 0x0002, /// Reserved 0x0002 - 0x7FFF 2858 StringPropertyIdBiosVendor = 0x8000, /// BIOS vendor 0x8000 - 0xBFFF 2859 StringPropertyIdOem = 0xC000 /// OEM range 0xC000 - 0xFFFF 2860 } STRING_PROPERTY_ID; 2861 2862 /// 2863 /// This structure defines a string property for another structure. 2864 /// This allows adding string properties that are common to several structures 2865 /// without having to modify the definitions of these structures. 2866 /// Multiple type 46 structures can add string properties to the same 2867 /// parent structure. 2868 /// 2869 typedef struct { 2870 SMBIOS_STRUCTURE Hdr; 2871 UINT16 StringPropertyId; ///< The enumeration value from STRING_PROPERTY_ID. 2872 SMBIOS_TABLE_STRING StringPropertyValue; 2873 SMBIOS_HANDLE ParentHandle; 2874 } SMBIOS_TABLE_TYPE46; 2875 2876 /// 2877 /// Inactive (Type 126) 2878 /// 2879 typedef struct { 2880 SMBIOS_STRUCTURE Hdr; 2881 } SMBIOS_TABLE_TYPE126; 2882 2883 /// 2884 /// End-of-Table (Type 127) 2885 /// 2886 typedef struct { 2887 SMBIOS_STRUCTURE Hdr; 2888 } SMBIOS_TABLE_TYPE127; 2889 2890 /// 2891 /// Union of all the possible SMBIOS record types. 2892 /// 2893 typedef union { 2894 SMBIOS_STRUCTURE *Hdr; 2895 SMBIOS_TABLE_TYPE0 *Type0; 2896 SMBIOS_TABLE_TYPE1 *Type1; 2897 SMBIOS_TABLE_TYPE2 *Type2; 2898 SMBIOS_TABLE_TYPE3 *Type3; 2899 SMBIOS_TABLE_TYPE4 *Type4; 2900 SMBIOS_TABLE_TYPE5 *Type5; 2901 SMBIOS_TABLE_TYPE6 *Type6; 2902 SMBIOS_TABLE_TYPE7 *Type7; 2903 SMBIOS_TABLE_TYPE8 *Type8; 2904 SMBIOS_TABLE_TYPE9 *Type9; 2905 SMBIOS_TABLE_TYPE10 *Type10; 2906 SMBIOS_TABLE_TYPE11 *Type11; 2907 SMBIOS_TABLE_TYPE12 *Type12; 2908 SMBIOS_TABLE_TYPE13 *Type13; 2909 SMBIOS_TABLE_TYPE14 *Type14; 2910 SMBIOS_TABLE_TYPE15 *Type15; 2911 SMBIOS_TABLE_TYPE16 *Type16; 2912 SMBIOS_TABLE_TYPE17 *Type17; 2913 SMBIOS_TABLE_TYPE18 *Type18; 2914 SMBIOS_TABLE_TYPE19 *Type19; 2915 SMBIOS_TABLE_TYPE20 *Type20; 2916 SMBIOS_TABLE_TYPE21 *Type21; 2917 SMBIOS_TABLE_TYPE22 *Type22; 2918 SMBIOS_TABLE_TYPE23 *Type23; 2919 SMBIOS_TABLE_TYPE24 *Type24; 2920 SMBIOS_TABLE_TYPE25 *Type25; 2921 SMBIOS_TABLE_TYPE26 *Type26; 2922 SMBIOS_TABLE_TYPE27 *Type27; 2923 SMBIOS_TABLE_TYPE28 *Type28; 2924 SMBIOS_TABLE_TYPE29 *Type29; 2925 SMBIOS_TABLE_TYPE30 *Type30; 2926 SMBIOS_TABLE_TYPE31 *Type31; 2927 SMBIOS_TABLE_TYPE32 *Type32; 2928 SMBIOS_TABLE_TYPE33 *Type33; 2929 SMBIOS_TABLE_TYPE34 *Type34; 2930 SMBIOS_TABLE_TYPE35 *Type35; 2931 SMBIOS_TABLE_TYPE36 *Type36; 2932 SMBIOS_TABLE_TYPE37 *Type37; 2933 SMBIOS_TABLE_TYPE38 *Type38; 2934 SMBIOS_TABLE_TYPE39 *Type39; 2935 SMBIOS_TABLE_TYPE40 *Type40; 2936 SMBIOS_TABLE_TYPE41 *Type41; 2937 SMBIOS_TABLE_TYPE42 *Type42; 2938 SMBIOS_TABLE_TYPE43 *Type43; 2939 SMBIOS_TABLE_TYPE44 *Type44; 2940 SMBIOS_TABLE_TYPE45 *Type45; 2941 SMBIOS_TABLE_TYPE46 *Type46; 2942 SMBIOS_TABLE_TYPE126 *Type126; 2943 SMBIOS_TABLE_TYPE127 *Type127; 2944 UINT8 *Raw; 2945 } SMBIOS_STRUCTURE_POINTER; 2946 2947 #pragma pack() 2948 2949 #endif 2950