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