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