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