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