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