]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/IndustryStandard/SmBios.h
b7c54f2fac12193e7a0c52110896923be1dd74ce
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / SmBios.h
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