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