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