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