]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/IndustryStandard/SmBios.h
MdePkg/Include: Smbios Specification 3.5.0 changes
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / SmBios.h
1 /** @file
2 Industry Standard Definitions of SMBIOS Table Specification v3.5.0.
3
4 Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
5 (C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP<BR>
6 (C) Copyright 2015 - 2019 Hewlett Packard Enterprise Development LP<BR>
7 Copyright (c) 2022, AMD Incorporated. All rights reserved.<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10 **/
11
12 #ifndef __SMBIOS_STANDARD_H__
13 #define __SMBIOS_STANDARD_H__
14
15 ///
16 /// Reference SMBIOS 2.6, chapter 3.1.2.
17 /// For v2.1 and later, handle values in the range 0FF00h to 0FFFFh are reserved for
18 /// use by this specification.
19 ///
20 #define SMBIOS_HANDLE_RESERVED_BEGIN 0xFF00
21
22 ///
23 /// Reference SMBIOS 2.7, chapter 6.1.2.
24 /// The UEFI Platform Initialization Specification reserves handle number FFFEh for its
25 /// EFI_SMBIOS_PROTOCOL.Add() function to mean "assign an unused handle number automatically."
26 /// This number is not used for any other purpose by the SMBIOS specification.
27 ///
28 #define SMBIOS_HANDLE_PI_RESERVED 0xFFFE
29
30 ///
31 /// Reference SMBIOS 2.6, chapter 3.1.3.
32 /// Each text string is limited to 64 significant characters due to system MIF limitations.
33 /// Reference SMBIOS 2.7, chapter 6.1.3.
34 /// It will have no limit on the length of each individual text string.
35 ///
36 #define SMBIOS_STRING_MAX_LENGTH 64
37
38 //
39 // The length of the entire structure table (including all strings) must be reported
40 // in the Structure Table Length field of the SMBIOS Structure Table Entry Point,
41 // which is a WORD field limited to 65,535 bytes.
42 //
43 #define SMBIOS_TABLE_MAX_LENGTH 0xFFFF
44
45 //
46 // For SMBIOS 3.0, Structure table maximum size in Entry Point structure is DWORD field limited to 0xFFFFFFFF bytes.
47 //
48 #define SMBIOS_3_0_TABLE_MAX_LENGTH 0xFFFFFFFF
49
50 //
51 // SMBIOS type macros which is according to SMBIOS 3.3.0 specification.
52 //
53 #define SMBIOS_TYPE_BIOS_INFORMATION 0
54 #define SMBIOS_TYPE_SYSTEM_INFORMATION 1
55 #define SMBIOS_TYPE_BASEBOARD_INFORMATION 2
56 #define SMBIOS_TYPE_SYSTEM_ENCLOSURE 3
57 #define SMBIOS_TYPE_PROCESSOR_INFORMATION 4
58 #define SMBIOS_TYPE_MEMORY_CONTROLLER_INFORMATION 5
59 #define SMBIOS_TYPE_MEMORY_MODULE_INFORMATON 6
60 #define SMBIOS_TYPE_CACHE_INFORMATION 7
61 #define SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION 8
62 #define SMBIOS_TYPE_SYSTEM_SLOTS 9
63 #define SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION 10
64 #define SMBIOS_TYPE_OEM_STRINGS 11
65 #define SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS 12
66 #define SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION 13
67 #define SMBIOS_TYPE_GROUP_ASSOCIATIONS 14
68 #define SMBIOS_TYPE_SYSTEM_EVENT_LOG 15
69 #define SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY 16
70 #define SMBIOS_TYPE_MEMORY_DEVICE 17
71 #define SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION 18
72 #define SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS 19
73 #define SMBIOS_TYPE_MEMORY_DEVICE_MAPPED_ADDRESS 20
74 #define SMBIOS_TYPE_BUILT_IN_POINTING_DEVICE 21
75 #define SMBIOS_TYPE_PORTABLE_BATTERY 22
76 #define SMBIOS_TYPE_SYSTEM_RESET 23
77 #define SMBIOS_TYPE_HARDWARE_SECURITY 24
78 #define SMBIOS_TYPE_SYSTEM_POWER_CONTROLS 25
79 #define SMBIOS_TYPE_VOLTAGE_PROBE 26
80 #define SMBIOS_TYPE_COOLING_DEVICE 27
81 #define SMBIOS_TYPE_TEMPERATURE_PROBE 28
82 #define SMBIOS_TYPE_ELECTRICAL_CURRENT_PROBE 29
83 #define SMBIOS_TYPE_OUT_OF_BAND_REMOTE_ACCESS 30
84 #define SMBIOS_TYPE_BOOT_INTEGRITY_SERVICE 31
85 #define SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION 32
86 #define SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION 33
87 #define SMBIOS_TYPE_MANAGEMENT_DEVICE 34
88 #define SMBIOS_TYPE_MANAGEMENT_DEVICE_COMPONENT 35
89 #define SMBIOS_TYPE_MANAGEMENT_DEVICE_THRESHOLD_DATA 36
90 #define SMBIOS_TYPE_MEMORY_CHANNEL 37
91 #define SMBIOS_TYPE_IPMI_DEVICE_INFORMATION 38
92 #define SMBIOS_TYPE_SYSTEM_POWER_SUPPLY 39
93 #define SMBIOS_TYPE_ADDITIONAL_INFORMATION 40
94 #define SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION 41
95 #define SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE 42
96 #define SMBIOS_TYPE_TPM_DEVICE 43
97 #define SMBIOS_TYPE_PROCESSOR_ADDITIONAL_INFORMATION 44
98 #define SMBIOS_TYPE_FIRMWARE_INVENTORY_INFORMATION 45
99 #define SMBIOS_TYPE_STRING_PROPERTY_INFORMATION 46
100
101 ///
102 /// Inactive type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.43.
103 /// Upper-level software that interprets the SMBIOS structure-table should bypass an
104 /// Inactive structure just like a structure type that the software does not recognize.
105 ///
106 #define SMBIOS_TYPE_INACTIVE 0x007E
107
108 ///
109 /// End-of-table type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.44.
110 /// The end-of-table indicator is used in the last physical structure in a table
111 ///
112 #define SMBIOS_TYPE_END_OF_TABLE 0x007F
113
114 #define SMBIOS_OEM_BEGIN 128
115 #define SMBIOS_OEM_END 255
116
117 ///
118 /// Types 0 through 127 (7Fh) are reserved for and defined by this
119 /// specification. Types 128 through 256 (80h to FFh) are available for system- and OEM-specific information.
120 ///
121 typedef UINT8 SMBIOS_TYPE;
122
123 ///
124 /// Specifies the structure's handle, a unique 16-bit number in the range 0 to 0FFFEh (for version
125 /// 2.0) or 0 to 0FEFFh (for version 2.1 and later). The handle can be used with the Get SMBIOS
126 /// Structure function to retrieve a specific structure; the handle numbers are not required to be
127 /// contiguous. For v2.1 and later, handle values in the range 0FF00h to 0FFFFh are reserved for
128 /// use by this specification.
129 /// If the system configuration changes, a previously assigned handle might no longer exist.
130 /// However once a handle has been assigned by the BIOS, the BIOS cannot re-assign that handle
131 /// number to another structure.
132 ///
133 typedef UINT16 SMBIOS_HANDLE;
134
135 ///
136 /// Smbios Table Entry Point Structure.
137 ///
138 #pragma pack(1)
139 typedef struct {
140 UINT8 AnchorString[4];
141 UINT8 EntryPointStructureChecksum;
142 UINT8 EntryPointLength;
143 UINT8 MajorVersion;
144 UINT8 MinorVersion;
145 UINT16 MaxStructureSize;
146 UINT8 EntryPointRevision;
147 UINT8 FormattedArea[5];
148 UINT8 IntermediateAnchorString[5];
149 UINT8 IntermediateChecksum;
150 UINT16 TableLength;
151 UINT32 TableAddress;
152 UINT16 NumberOfSmbiosStructures;
153 UINT8 SmbiosBcdRevision;
154 } SMBIOS_TABLE_ENTRY_POINT;
155
156 typedef struct {
157 UINT8 AnchorString[5];
158 UINT8 EntryPointStructureChecksum;
159 UINT8 EntryPointLength;
160 UINT8 MajorVersion;
161 UINT8 MinorVersion;
162 UINT8 DocRev;
163 UINT8 EntryPointRevision;
164 UINT8 Reserved;
165 UINT32 TableMaximumSize;
166 UINT64 TableAddress;
167 } SMBIOS_TABLE_3_0_ENTRY_POINT;
168
169 ///
170 /// The Smbios structure header.
171 ///
172 typedef struct {
173 SMBIOS_TYPE Type;
174 UINT8 Length;
175 SMBIOS_HANDLE Handle;
176 } SMBIOS_STRUCTURE;
177
178 ///
179 /// Text strings associated with a given SMBIOS structure are returned in the dmiStrucBuffer, appended directly after
180 /// the formatted portion of the structure. This method of returning string information eliminates the need for
181 /// application software to deal with pointers embedded in the SMBIOS structure. Each string is terminated with a null
182 /// (00h) BYTE and the set of strings is terminated with an additional null (00h) BYTE. When the formatted portion of
183 /// a SMBIOS structure references a string, it does so by specifying a non-zero string number within the structure's
184 /// string-set. For example, if a string field contains 02h, it references the second string following the formatted portion
185 /// of the SMBIOS structure. If a string field references no string, a null (0) is placed in that string field. If the
186 /// formatted portion of the structure contains string-reference fields and all the string fields are set to 0 (no string
187 /// references), the formatted section of the structure is followed by two null (00h) BYTES.
188 ///
189 typedef UINT8 SMBIOS_TABLE_STRING;
190
191 ///
192 /// BIOS Characteristics
193 /// Defines which functions the BIOS supports. PCI, PCMCIA, Flash, etc.
194 ///
195 typedef struct {
196 UINT32 Reserved : 2; ///< Bits 0-1.
197 UINT32 Unknown : 1;
198 UINT32 BiosCharacteristicsNotSupported : 1;
199 UINT32 IsaIsSupported : 1;
200 UINT32 McaIsSupported : 1;
201 UINT32 EisaIsSupported : 1;
202 UINT32 PciIsSupported : 1;
203 UINT32 PcmciaIsSupported : 1;
204 UINT32 PlugAndPlayIsSupported : 1;
205 UINT32 ApmIsSupported : 1;
206 UINT32 BiosIsUpgradable : 1;
207 UINT32 BiosShadowingAllowed : 1;
208 UINT32 VlVesaIsSupported : 1;
209 UINT32 EscdSupportIsAvailable : 1;
210 UINT32 BootFromCdIsSupported : 1;
211 UINT32 SelectableBootIsSupported : 1;
212 UINT32 RomBiosIsSocketed : 1;
213 UINT32 BootFromPcmciaIsSupported : 1;
214 UINT32 EDDSpecificationIsSupported : 1;
215 UINT32 JapaneseNecFloppyIsSupported : 1;
216 UINT32 JapaneseToshibaFloppyIsSupported : 1;
217 UINT32 Floppy525_360IsSupported : 1;
218 UINT32 Floppy525_12IsSupported : 1;
219 UINT32 Floppy35_720IsSupported : 1;
220 UINT32 Floppy35_288IsSupported : 1;
221 UINT32 PrintScreenIsSupported : 1;
222 UINT32 Keyboard8042IsSupported : 1;
223 UINT32 SerialIsSupported : 1;
224 UINT32 PrinterIsSupported : 1;
225 UINT32 CgaMonoIsSupported : 1;
226 UINT32 NecPc98 : 1;
227 UINT32 ReservedForVendor : 32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor
228 ///< and bits 48-63 reserved for System Vendor.
229 } MISC_BIOS_CHARACTERISTICS;
230
231 ///
232 /// BIOS Characteristics Extension Byte 1.
233 /// This information, available for SMBIOS version 2.1 and later, appears at offset 12h
234 /// within the BIOS Information structure.
235 ///
236 typedef struct {
237 UINT8 AcpiIsSupported : 1;
238 UINT8 UsbLegacyIsSupported : 1;
239 UINT8 AgpIsSupported : 1;
240 UINT8 I2OBootIsSupported : 1;
241 UINT8 Ls120BootIsSupported : 1;
242 UINT8 AtapiZipDriveBootIsSupported : 1;
243 UINT8 Boot1394IsSupported : 1;
244 UINT8 SmartBatteryIsSupported : 1;
245 } MBCE_BIOS_RESERVED;
246
247 ///
248 /// BIOS Characteristics Extension Byte 2.
249 /// This information, available for SMBIOS version 2.3 and later, appears at offset 13h
250 /// within the BIOS Information structure.
251 ///
252 typedef struct {
253 UINT8 BiosBootSpecIsSupported : 1;
254 UINT8 FunctionKeyNetworkBootIsSupported : 1;
255 UINT8 TargetContentDistributionEnabled : 1;
256 UINT8 UefiSpecificationSupported : 1;
257 UINT8 VirtualMachineSupported : 1;
258 UINT8 ManufacturingModeSupported : 1;
259 UINT8 ManufacturingModeEnabled : 1;
260 UINT8 ExtensionByte2Reserved : 1;
261 } MBCE_SYSTEM_RESERVED;
262
263 ///
264 /// BIOS Characteristics Extension Bytes.
265 ///
266 typedef struct {
267 MBCE_BIOS_RESERVED BiosReserved;
268 MBCE_SYSTEM_RESERVED SystemReserved;
269 } MISC_BIOS_CHARACTERISTICS_EXTENSION;
270
271 ///
272 /// Extended BIOS ROM size.
273 ///
274 typedef struct {
275 UINT16 Size : 14;
276 UINT16 Unit : 2;
277 } EXTENDED_BIOS_ROM_SIZE;
278
279 ///
280 /// BIOS Information (Type 0).
281 ///
282 typedef struct {
283 SMBIOS_STRUCTURE Hdr;
284 SMBIOS_TABLE_STRING Vendor;
285 SMBIOS_TABLE_STRING BiosVersion;
286 UINT16 BiosSegment;
287 SMBIOS_TABLE_STRING BiosReleaseDate;
288 UINT8 BiosSize;
289 MISC_BIOS_CHARACTERISTICS BiosCharacteristics;
290 UINT8 BIOSCharacteristicsExtensionBytes[2];
291 UINT8 SystemBiosMajorRelease;
292 UINT8 SystemBiosMinorRelease;
293 UINT8 EmbeddedControllerFirmwareMajorRelease;
294 UINT8 EmbeddedControllerFirmwareMinorRelease;
295 //
296 // Add for smbios 3.1.0
297 //
298 EXTENDED_BIOS_ROM_SIZE ExtendedBiosSize;
299 } SMBIOS_TABLE_TYPE0;
300
301 ///
302 /// System Wake-up Type.
303 ///
304 typedef enum {
305 SystemWakeupTypeReserved = 0x00,
306 SystemWakeupTypeOther = 0x01,
307 SystemWakeupTypeUnknown = 0x02,
308 SystemWakeupTypeApmTimer = 0x03,
309 SystemWakeupTypeModemRing = 0x04,
310 SystemWakeupTypeLanRemote = 0x05,
311 SystemWakeupTypePowerSwitch = 0x06,
312 SystemWakeupTypePciPme = 0x07,
313 SystemWakeupTypeAcPowerRestored = 0x08
314 } MISC_SYSTEM_WAKEUP_TYPE;
315
316 ///
317 /// System Information (Type 1).
318 ///
319 /// The information in this structure defines attributes of the overall system and is
320 /// intended to be associated with the Component ID group of the system's MIF.
321 /// An SMBIOS implementation is associated with a single system instance and contains
322 /// one and only one System Information (Type 1) structure.
323 ///
324 typedef struct {
325 SMBIOS_STRUCTURE Hdr;
326 SMBIOS_TABLE_STRING Manufacturer;
327 SMBIOS_TABLE_STRING ProductName;
328 SMBIOS_TABLE_STRING Version;
329 SMBIOS_TABLE_STRING SerialNumber;
330 GUID Uuid;
331 UINT8 WakeUpType; ///< The enumeration value from MISC_SYSTEM_WAKEUP_TYPE.
332 SMBIOS_TABLE_STRING SKUNumber;
333 SMBIOS_TABLE_STRING Family;
334 } SMBIOS_TABLE_TYPE1;
335
336 ///
337 /// Base Board - Feature Flags.
338 ///
339 typedef struct {
340 UINT8 Motherboard : 1;
341 UINT8 RequiresDaughterCard : 1;
342 UINT8 Removable : 1;
343 UINT8 Replaceable : 1;
344 UINT8 HotSwappable : 1;
345 UINT8 Reserved : 3;
346 } BASE_BOARD_FEATURE_FLAGS;
347
348 ///
349 /// Base Board - Board Type.
350 ///
351 typedef enum {
352 BaseBoardTypeUnknown = 0x1,
353 BaseBoardTypeOther = 0x2,
354 BaseBoardTypeServerBlade = 0x3,
355 BaseBoardTypeConnectivitySwitch = 0x4,
356 BaseBoardTypeSystemManagementModule = 0x5,
357 BaseBoardTypeProcessorModule = 0x6,
358 BaseBoardTypeIOModule = 0x7,
359 BaseBoardTypeMemoryModule = 0x8,
360 BaseBoardTypeDaughterBoard = 0x9,
361 BaseBoardTypeMotherBoard = 0xA,
362 BaseBoardTypeProcessorMemoryModule = 0xB,
363 BaseBoardTypeProcessorIOModule = 0xC,
364 BaseBoardTypeInterconnectBoard = 0xD
365 } BASE_BOARD_TYPE;
366
367 ///
368 /// Base Board (or Module) Information (Type 2).
369 ///
370 /// The information in this structure defines attributes of a system baseboard -
371 /// for example a motherboard, planar, or server blade or other standard system module.
372 ///
373 typedef struct {
374 SMBIOS_STRUCTURE Hdr;
375 SMBIOS_TABLE_STRING Manufacturer;
376 SMBIOS_TABLE_STRING ProductName;
377 SMBIOS_TABLE_STRING Version;
378 SMBIOS_TABLE_STRING SerialNumber;
379 SMBIOS_TABLE_STRING AssetTag;
380 BASE_BOARD_FEATURE_FLAGS FeatureFlag;
381 SMBIOS_TABLE_STRING LocationInChassis;
382 UINT16 ChassisHandle;
383 UINT8 BoardType; ///< The enumeration value from BASE_BOARD_TYPE.
384 UINT8 NumberOfContainedObjectHandles;
385 UINT16 ContainedObjectHandles[1];
386 } SMBIOS_TABLE_TYPE2;
387
388 ///
389 /// System Enclosure or Chassis Types
390 ///
391 typedef enum {
392 MiscChassisTypeOther = 0x01,
393 MiscChassisTypeUnknown = 0x02,
394 MiscChassisTypeDeskTop = 0x03,
395 MiscChassisTypeLowProfileDesktop = 0x04,
396 MiscChassisTypePizzaBox = 0x05,
397 MiscChassisTypeMiniTower = 0x06,
398 MiscChassisTypeTower = 0x07,
399 MiscChassisTypePortable = 0x08,
400 MiscChassisTypeLapTop = 0x09,
401 MiscChassisTypeNotebook = 0x0A,
402 MiscChassisTypeHandHeld = 0x0B,
403 MiscChassisTypeDockingStation = 0x0C,
404 MiscChassisTypeAllInOne = 0x0D,
405 MiscChassisTypeSubNotebook = 0x0E,
406 MiscChassisTypeSpaceSaving = 0x0F,
407 MiscChassisTypeLunchBox = 0x10,
408 MiscChassisTypeMainServerChassis = 0x11,
409 MiscChassisTypeExpansionChassis = 0x12,
410 MiscChassisTypeSubChassis = 0x13,
411 MiscChassisTypeBusExpansionChassis = 0x14,
412 MiscChassisTypePeripheralChassis = 0x15,
413 MiscChassisTypeRaidChassis = 0x16,
414 MiscChassisTypeRackMountChassis = 0x17,
415 MiscChassisTypeSealedCasePc = 0x18,
416 MiscChassisMultiSystemChassis = 0x19,
417 MiscChassisCompactPCI = 0x1A,
418 MiscChassisAdvancedTCA = 0x1B,
419 MiscChassisBlade = 0x1C,
420 MiscChassisBladeEnclosure = 0x1D,
421 MiscChassisTablet = 0x1E,
422 MiscChassisConvertible = 0x1F,
423 MiscChassisDetachable = 0x20,
424 MiscChassisIoTGateway = 0x21,
425 MiscChassisEmbeddedPc = 0x22,
426 MiscChassisMiniPc = 0x23,
427 MiscChassisStickPc = 0x24
428 } MISC_CHASSIS_TYPE;
429
430 ///
431 /// System Enclosure or Chassis States .
432 ///
433 typedef enum {
434 ChassisStateOther = 0x01,
435 ChassisStateUnknown = 0x02,
436 ChassisStateSafe = 0x03,
437 ChassisStateWarning = 0x04,
438 ChassisStateCritical = 0x05,
439 ChassisStateNonRecoverable = 0x06
440 } MISC_CHASSIS_STATE;
441
442 ///
443 /// System Enclosure or Chassis Security Status.
444 ///
445 typedef enum {
446 ChassisSecurityStatusOther = 0x01,
447 ChassisSecurityStatusUnknown = 0x02,
448 ChassisSecurityStatusNone = 0x03,
449 ChassisSecurityStatusExternalInterfaceLockedOut = 0x04,
450 ChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05
451 } MISC_CHASSIS_SECURITY_STATE;
452
453 ///
454 /// Contained Element record
455 ///
456 typedef struct {
457 UINT8 ContainedElementType;
458 UINT8 ContainedElementMinimum;
459 UINT8 ContainedElementMaximum;
460 } CONTAINED_ELEMENT;
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 ProcessorFamilyRiscvRV32 = 0x0200,
738 ProcessorFamilyRiscVRV64 = 0x0201,
739 ProcessorFamilyRiscVRV128 = 0x0202
740 } PROCESSOR_FAMILY2_DATA;
741
742 ///
743 /// Processor Information - Voltage.
744 ///
745 typedef struct {
746 UINT8 ProcessorVoltageCapability5V : 1;
747 UINT8 ProcessorVoltageCapability3_3V : 1;
748 UINT8 ProcessorVoltageCapability2_9V : 1;
749 UINT8 ProcessorVoltageCapabilityReserved : 1; ///< Bit 3, must be zero.
750 UINT8 ProcessorVoltageReserved : 3; ///< Bits 4-6, must be zero.
751 UINT8 ProcessorVoltageIndicateLegacy : 1;
752 } PROCESSOR_VOLTAGE;
753
754 ///
755 /// Processor Information - Processor Upgrade.
756 ///
757 typedef enum {
758 ProcessorUpgradeOther = 0x01,
759 ProcessorUpgradeUnknown = 0x02,
760 ProcessorUpgradeDaughterBoard = 0x03,
761 ProcessorUpgradeZIFSocket = 0x04,
762 ProcessorUpgradePiggyBack = 0x05, ///< Replaceable.
763 ProcessorUpgradeNone = 0x06,
764 ProcessorUpgradeLIFSocket = 0x07,
765 ProcessorUpgradeSlot1 = 0x08,
766 ProcessorUpgradeSlot2 = 0x09,
767 ProcessorUpgrade370PinSocket = 0x0A,
768 ProcessorUpgradeSlotA = 0x0B,
769 ProcessorUpgradeSlotM = 0x0C,
770 ProcessorUpgradeSocket423 = 0x0D,
771 ProcessorUpgradeSocketA = 0x0E, ///< Socket 462.
772 ProcessorUpgradeSocket478 = 0x0F,
773 ProcessorUpgradeSocket754 = 0x10,
774 ProcessorUpgradeSocket940 = 0x11,
775 ProcessorUpgradeSocket939 = 0x12,
776 ProcessorUpgradeSocketmPGA604 = 0x13,
777 ProcessorUpgradeSocketLGA771 = 0x14,
778 ProcessorUpgradeSocketLGA775 = 0x15,
779 ProcessorUpgradeSocketS1 = 0x16,
780 ProcessorUpgradeAM2 = 0x17,
781 ProcessorUpgradeF1207 = 0x18,
782 ProcessorSocketLGA1366 = 0x19,
783 ProcessorUpgradeSocketG34 = 0x1A,
784 ProcessorUpgradeSocketAM3 = 0x1B,
785 ProcessorUpgradeSocketC32 = 0x1C,
786 ProcessorUpgradeSocketLGA1156 = 0x1D,
787 ProcessorUpgradeSocketLGA1567 = 0x1E,
788 ProcessorUpgradeSocketPGA988A = 0x1F,
789 ProcessorUpgradeSocketBGA1288 = 0x20,
790 ProcessorUpgradeSocketrPGA988B = 0x21,
791 ProcessorUpgradeSocketBGA1023 = 0x22,
792 ProcessorUpgradeSocketBGA1224 = 0x23,
793 ProcessorUpgradeSocketLGA1155 = 0x24, ///< SMBIOS spec 2.8.0 updated the name
794 ProcessorUpgradeSocketLGA1356 = 0x25,
795 ProcessorUpgradeSocketLGA2011 = 0x26,
796 ProcessorUpgradeSocketFS1 = 0x27,
797 ProcessorUpgradeSocketFS2 = 0x28,
798 ProcessorUpgradeSocketFM1 = 0x29,
799 ProcessorUpgradeSocketFM2 = 0x2A,
800 ProcessorUpgradeSocketLGA2011_3 = 0x2B,
801 ProcessorUpgradeSocketLGA1356_3 = 0x2C,
802 ProcessorUpgradeSocketLGA1150 = 0x2D,
803 ProcessorUpgradeSocketBGA1168 = 0x2E,
804 ProcessorUpgradeSocketBGA1234 = 0x2F,
805 ProcessorUpgradeSocketBGA1364 = 0x30,
806 ProcessorUpgradeSocketAM4 = 0x31,
807 ProcessorUpgradeSocketLGA1151 = 0x32,
808 ProcessorUpgradeSocketBGA1356 = 0x33,
809 ProcessorUpgradeSocketBGA1440 = 0x34,
810 ProcessorUpgradeSocketBGA1515 = 0x35,
811 ProcessorUpgradeSocketLGA3647_1 = 0x36,
812 ProcessorUpgradeSocketSP3 = 0x37,
813 ProcessorUpgradeSocketSP3r2 = 0x38,
814 ProcessorUpgradeSocketLGA2066 = 0x39,
815 ProcessorUpgradeSocketBGA1392 = 0x3A,
816 ProcessorUpgradeSocketBGA1510 = 0x3B,
817 ProcessorUpgradeSocketBGA1528 = 0x3C,
818 ProcessorUpgradeSocketLGA4189 = 0x3D,
819 ProcessorUpgradeSocketLGA1200 = 0x3E,
820 ProcessorUpgradeSocketLGA4677 = 0x3F
821 } PROCESSOR_UPGRADE;
822
823 ///
824 /// Processor ID Field Description
825 ///
826 typedef struct {
827 UINT32 ProcessorSteppingId : 4;
828 UINT32 ProcessorModel : 4;
829 UINT32 ProcessorFamily : 4;
830 UINT32 ProcessorType : 2;
831 UINT32 ProcessorReserved1 : 2;
832 UINT32 ProcessorXModel : 4;
833 UINT32 ProcessorXFamily : 8;
834 UINT32 ProcessorReserved2 : 4;
835 } PROCESSOR_SIGNATURE;
836
837 typedef struct {
838 UINT32 ProcessorFpu : 1;
839 UINT32 ProcessorVme : 1;
840 UINT32 ProcessorDe : 1;
841 UINT32 ProcessorPse : 1;
842 UINT32 ProcessorTsc : 1;
843 UINT32 ProcessorMsr : 1;
844 UINT32 ProcessorPae : 1;
845 UINT32 ProcessorMce : 1;
846 UINT32 ProcessorCx8 : 1;
847 UINT32 ProcessorApic : 1;
848 UINT32 ProcessorReserved1 : 1;
849 UINT32 ProcessorSep : 1;
850 UINT32 ProcessorMtrr : 1;
851 UINT32 ProcessorPge : 1;
852 UINT32 ProcessorMca : 1;
853 UINT32 ProcessorCmov : 1;
854 UINT32 ProcessorPat : 1;
855 UINT32 ProcessorPse36 : 1;
856 UINT32 ProcessorPsn : 1;
857 UINT32 ProcessorClfsh : 1;
858 UINT32 ProcessorReserved2 : 1;
859 UINT32 ProcessorDs : 1;
860 UINT32 ProcessorAcpi : 1;
861 UINT32 ProcessorMmx : 1;
862 UINT32 ProcessorFxsr : 1;
863 UINT32 ProcessorSse : 1;
864 UINT32 ProcessorSse2 : 1;
865 UINT32 ProcessorSs : 1;
866 UINT32 ProcessorReserved3 : 1;
867 UINT32 ProcessorTm : 1;
868 UINT32 ProcessorReserved4 : 2;
869 } PROCESSOR_FEATURE_FLAGS;
870
871 typedef struct {
872 UINT16 ProcessorReserved1 : 1;
873 UINT16 ProcessorUnknown : 1;
874 UINT16 Processor64BitCapable : 1;
875 UINT16 ProcessorMultiCore : 1;
876 UINT16 ProcessorHardwareThread : 1;
877 UINT16 ProcessorExecuteProtection : 1;
878 UINT16 ProcessorEnhancedVirtualization : 1;
879 UINT16 ProcessorPowerPerformanceCtrl : 1;
880 UINT16 Processor128BitCapable : 1;
881 UINT16 ProcessorArm64SocId : 1;
882 UINT16 ProcessorReserved2 : 6;
883 } PROCESSOR_CHARACTERISTIC_FLAGS;
884
885 ///
886 /// Processor Information - Status
887 ///
888 typedef union {
889 struct {
890 UINT8 CpuStatus : 3; ///< Indicates the status of the processor.
891 UINT8 Reserved1 : 3; ///< Reserved for future use. Must be set to zero.
892 UINT8 SocketPopulated : 1; ///< Indicates if the processor socket is populated or not.
893 UINT8 Reserved2 : 1; ///< Reserved for future use. Must be set to zero.
894 } Bits;
895 UINT8 Data;
896 } PROCESSOR_STATUS_DATA;
897
898 typedef struct {
899 PROCESSOR_SIGNATURE Signature;
900 PROCESSOR_FEATURE_FLAGS FeatureFlags;
901 } PROCESSOR_ID_DATA;
902
903 ///
904 /// Processor Information (Type 4).
905 ///
906 /// The information in this structure defines the attributes of a single processor;
907 /// a separate structure instance is provided for each system processor socket/slot.
908 /// For example, a system with an IntelDX2 processor would have a single
909 /// structure instance, while a system with an IntelSX2 processor would have a structure
910 /// to describe the main CPU, and a second structure to describe the 80487 co-processor.
911 ///
912 typedef struct {
913 SMBIOS_STRUCTURE Hdr;
914 SMBIOS_TABLE_STRING Socket;
915 UINT8 ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA.
916 UINT8 ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA.
917 SMBIOS_TABLE_STRING ProcessorManufacturer;
918 PROCESSOR_ID_DATA ProcessorId;
919 SMBIOS_TABLE_STRING ProcessorVersion;
920 PROCESSOR_VOLTAGE Voltage;
921 UINT16 ExternalClock;
922 UINT16 MaxSpeed;
923 UINT16 CurrentSpeed;
924 UINT8 Status;
925 UINT8 ProcessorUpgrade; ///< The enumeration value from PROCESSOR_UPGRADE.
926 UINT16 L1CacheHandle;
927 UINT16 L2CacheHandle;
928 UINT16 L3CacheHandle;
929 SMBIOS_TABLE_STRING SerialNumber;
930 SMBIOS_TABLE_STRING AssetTag;
931 SMBIOS_TABLE_STRING PartNumber;
932 //
933 // Add for smbios 2.5
934 //
935 UINT8 CoreCount;
936 UINT8 EnabledCoreCount;
937 UINT8 ThreadCount;
938 UINT16 ProcessorCharacteristics;
939 //
940 // Add for smbios 2.6
941 //
942 UINT16 ProcessorFamily2;
943 //
944 // Add for smbios 3.0
945 //
946 UINT16 CoreCount2;
947 UINT16 EnabledCoreCount2;
948 UINT16 ThreadCount2;
949 } SMBIOS_TABLE_TYPE4;
950
951 ///
952 /// Memory Controller Error Detecting Method.
953 ///
954 typedef enum {
955 ErrorDetectingMethodOther = 0x01,
956 ErrorDetectingMethodUnknown = 0x02,
957 ErrorDetectingMethodNone = 0x03,
958 ErrorDetectingMethodParity = 0x04,
959 ErrorDetectingMethod32Ecc = 0x05,
960 ErrorDetectingMethod64Ecc = 0x06,
961 ErrorDetectingMethod128Ecc = 0x07,
962 ErrorDetectingMethodCrc = 0x08
963 } MEMORY_ERROR_DETECT_METHOD;
964
965 ///
966 /// Memory Controller Error Correcting Capability.
967 ///
968 typedef struct {
969 UINT8 Other : 1;
970 UINT8 Unknown : 1;
971 UINT8 None : 1;
972 UINT8 SingleBitErrorCorrect : 1;
973 UINT8 DoubleBitErrorCorrect : 1;
974 UINT8 ErrorScrubbing : 1;
975 UINT8 Reserved : 2;
976 } MEMORY_ERROR_CORRECT_CAPABILITY;
977
978 ///
979 /// Memory Controller Information - Interleave Support.
980 ///
981 typedef enum {
982 MemoryInterleaveOther = 0x01,
983 MemoryInterleaveUnknown = 0x02,
984 MemoryInterleaveOneWay = 0x03,
985 MemoryInterleaveTwoWay = 0x04,
986 MemoryInterleaveFourWay = 0x05,
987 MemoryInterleaveEightWay = 0x06,
988 MemoryInterleaveSixteenWay = 0x07
989 } MEMORY_SUPPORT_INTERLEAVE_TYPE;
990
991 ///
992 /// Memory Controller Information - Memory Speeds.
993 ///
994 typedef struct {
995 UINT16 Other : 1;
996 UINT16 Unknown : 1;
997 UINT16 SeventyNs : 1;
998 UINT16 SixtyNs : 1;
999 UINT16 FiftyNs : 1;
1000 UINT16 Reserved : 11;
1001 } MEMORY_SPEED_TYPE;
1002
1003 ///
1004 /// Memory Controller Information (Type 5, Obsolete).
1005 ///
1006 /// The information in this structure defines the attributes of the system's memory controller(s)
1007 /// and the supported attributes of any memory-modules present in the sockets controlled by
1008 /// this controller.
1009 /// Note: This structure, and its companion Memory Module Information (Type 6, Obsolete),
1010 /// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16)
1011 /// and Memory Device (Type 17) structures should be used instead. BIOS providers might
1012 /// choose to implement both memory description types to allow existing DMI browsers
1013 /// to properly display the system's memory attributes.
1014 ///
1015 typedef struct {
1016 SMBIOS_STRUCTURE Hdr;
1017 UINT8 ErrDetectMethod; ///< The enumeration value from MEMORY_ERROR_DETECT_METHOD.
1018 MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability;
1019 UINT8 SupportInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE.
1020 UINT8 CurrentInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE .
1021 UINT8 MaxMemoryModuleSize;
1022 MEMORY_SPEED_TYPE SupportSpeed;
1023 UINT16 SupportMemoryType;
1024 UINT8 MemoryModuleVoltage;
1025 UINT8 AssociatedMemorySlotNum;
1026 UINT16 MemoryModuleConfigHandles[1];
1027 } SMBIOS_TABLE_TYPE5;
1028
1029 ///
1030 /// Memory Module Information - Memory Types
1031 ///
1032 typedef struct {
1033 UINT16 Other : 1;
1034 UINT16 Unknown : 1;
1035 UINT16 Standard : 1;
1036 UINT16 FastPageMode : 1;
1037 UINT16 Edo : 1;
1038 UINT16 Parity : 1;
1039 UINT16 Ecc : 1;
1040 UINT16 Simm : 1;
1041 UINT16 Dimm : 1;
1042 UINT16 BurstEdo : 1;
1043 UINT16 Sdram : 1;
1044 UINT16 Reserved : 5;
1045 } MEMORY_CURRENT_TYPE;
1046
1047 ///
1048 /// Memory Module Information - Memory Size.
1049 ///
1050 typedef struct {
1051 UINT8 InstalledOrEnabledSize : 7; ///< Size (n), where 2**n is the size in MB.
1052 UINT8 SingleOrDoubleBank : 1;
1053 } MEMORY_INSTALLED_ENABLED_SIZE;
1054
1055 ///
1056 /// Memory Module Information (Type 6, Obsolete)
1057 ///
1058 /// One Memory Module Information structure is included for each memory-module socket
1059 /// in the system. The structure describes the speed, type, size, and error status
1060 /// of each system memory module. The supported attributes of each module are described
1061 /// by the "owning" Memory Controller Information structure.
1062 /// Note: This structure, and its companion Memory Controller Information (Type 5, Obsolete),
1063 /// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16)
1064 /// and Memory Device (Type 17) structures should be used instead.
1065 ///
1066 typedef struct {
1067 SMBIOS_STRUCTURE Hdr;
1068 SMBIOS_TABLE_STRING SocketDesignation;
1069 UINT8 BankConnections;
1070 UINT8 CurrentSpeed;
1071 MEMORY_CURRENT_TYPE CurrentMemoryType;
1072 MEMORY_INSTALLED_ENABLED_SIZE InstalledSize;
1073 MEMORY_INSTALLED_ENABLED_SIZE EnabledSize;
1074 UINT8 ErrorStatus;
1075 } SMBIOS_TABLE_TYPE6;
1076
1077 ///
1078 /// Cache Information - SRAM Type.
1079 ///
1080 typedef struct {
1081 UINT16 Other : 1;
1082 UINT16 Unknown : 1;
1083 UINT16 NonBurst : 1;
1084 UINT16 Burst : 1;
1085 UINT16 PipelineBurst : 1;
1086 UINT16 Synchronous : 1;
1087 UINT16 Asynchronous : 1;
1088 UINT16 Reserved : 9;
1089 } CACHE_SRAM_TYPE_DATA;
1090
1091 ///
1092 /// Cache Information - Error Correction Type.
1093 ///
1094 typedef enum {
1095 CacheErrorOther = 0x01,
1096 CacheErrorUnknown = 0x02,
1097 CacheErrorNone = 0x03,
1098 CacheErrorParity = 0x04,
1099 CacheErrorSingleBit = 0x05, ///< ECC
1100 CacheErrorMultiBit = 0x06 ///< ECC
1101 } CACHE_ERROR_TYPE_DATA;
1102
1103 ///
1104 /// Cache Information - System Cache Type.
1105 ///
1106 typedef enum {
1107 CacheTypeOther = 0x01,
1108 CacheTypeUnknown = 0x02,
1109 CacheTypeInstruction = 0x03,
1110 CacheTypeData = 0x04,
1111 CacheTypeUnified = 0x05
1112 } CACHE_TYPE_DATA;
1113
1114 ///
1115 /// Cache Information - Associativity.
1116 ///
1117 typedef enum {
1118 CacheAssociativityOther = 0x01,
1119 CacheAssociativityUnknown = 0x02,
1120 CacheAssociativityDirectMapped = 0x03,
1121 CacheAssociativity2Way = 0x04,
1122 CacheAssociativity4Way = 0x05,
1123 CacheAssociativityFully = 0x06,
1124 CacheAssociativity8Way = 0x07,
1125 CacheAssociativity16Way = 0x08,
1126 CacheAssociativity12Way = 0x09,
1127 CacheAssociativity24Way = 0x0A,
1128 CacheAssociativity32Way = 0x0B,
1129 CacheAssociativity48Way = 0x0C,
1130 CacheAssociativity64Way = 0x0D,
1131 CacheAssociativity20Way = 0x0E
1132 } CACHE_ASSOCIATIVITY_DATA;
1133
1134 ///
1135 /// Cache Information (Type 7).
1136 ///
1137 /// The information in this structure defines the attributes of CPU cache device in the system.
1138 /// One structure is specified for each such device, whether the device is internal to
1139 /// or external to the CPU module. Cache modules can be associated with a processor structure
1140 /// in one or two ways, depending on the SMBIOS version.
1141 ///
1142 typedef struct {
1143 SMBIOS_STRUCTURE Hdr;
1144 SMBIOS_TABLE_STRING SocketDesignation;
1145 UINT16 CacheConfiguration;
1146 UINT16 MaximumCacheSize;
1147 UINT16 InstalledSize;
1148 CACHE_SRAM_TYPE_DATA SupportedSRAMType;
1149 CACHE_SRAM_TYPE_DATA CurrentSRAMType;
1150 UINT8 CacheSpeed;
1151 UINT8 ErrorCorrectionType; ///< The enumeration value from CACHE_ERROR_TYPE_DATA.
1152 UINT8 SystemCacheType; ///< The enumeration value from CACHE_TYPE_DATA.
1153 UINT8 Associativity; ///< The enumeration value from CACHE_ASSOCIATIVITY_DATA.
1154 //
1155 // Add for smbios 3.1.0
1156 //
1157 UINT32 MaximumCacheSize2;
1158 UINT32 InstalledSize2;
1159 } SMBIOS_TABLE_TYPE7;
1160
1161 ///
1162 /// Port Connector Information - Connector Types.
1163 ///
1164 typedef enum {
1165 PortConnectorTypeNone = 0x00,
1166 PortConnectorTypeCentronics = 0x01,
1167 PortConnectorTypeMiniCentronics = 0x02,
1168 PortConnectorTypeProprietary = 0x03,
1169 PortConnectorTypeDB25Male = 0x04,
1170 PortConnectorTypeDB25Female = 0x05,
1171 PortConnectorTypeDB15Male = 0x06,
1172 PortConnectorTypeDB15Female = 0x07,
1173 PortConnectorTypeDB9Male = 0x08,
1174 PortConnectorTypeDB9Female = 0x09,
1175 PortConnectorTypeRJ11 = 0x0A,
1176 PortConnectorTypeRJ45 = 0x0B,
1177 PortConnectorType50PinMiniScsi = 0x0C,
1178 PortConnectorTypeMiniDin = 0x0D,
1179 PortConnectorTypeMicroDin = 0x0E,
1180 PortConnectorTypePS2 = 0x0F,
1181 PortConnectorTypeInfrared = 0x10,
1182 PortConnectorTypeHpHil = 0x11,
1183 PortConnectorTypeUsb = 0x12,
1184 PortConnectorTypeSsaScsi = 0x13,
1185 PortConnectorTypeCircularDin8Male = 0x14,
1186 PortConnectorTypeCircularDin8Female = 0x15,
1187 PortConnectorTypeOnboardIde = 0x16,
1188 PortConnectorTypeOnboardFloppy = 0x17,
1189 PortConnectorType9PinDualInline = 0x18,
1190 PortConnectorType25PinDualInline = 0x19,
1191 PortConnectorType50PinDualInline = 0x1A,
1192 PortConnectorType68PinDualInline = 0x1B,
1193 PortConnectorTypeOnboardSoundInput = 0x1C,
1194 PortConnectorTypeMiniCentronicsType14 = 0x1D,
1195 PortConnectorTypeMiniCentronicsType26 = 0x1E,
1196 PortConnectorTypeHeadPhoneMiniJack = 0x1F,
1197 PortConnectorTypeBNC = 0x20,
1198 PortConnectorType1394 = 0x21,
1199 PortConnectorTypeSasSata = 0x22,
1200 PortConnectorTypeUsbTypeC = 0x23,
1201 PortConnectorTypePC98 = 0xA0,
1202 PortConnectorTypePC98Hireso = 0xA1,
1203 PortConnectorTypePCH98 = 0xA2,
1204 PortConnectorTypePC98Note = 0xA3,
1205 PortConnectorTypePC98Full = 0xA4,
1206 PortConnectorTypeOther = 0xFF
1207 } MISC_PORT_CONNECTOR_TYPE;
1208
1209 ///
1210 /// Port Connector Information - Port Types
1211 ///
1212 typedef enum {
1213 PortTypeNone = 0x00,
1214 PortTypeParallelXtAtCompatible = 0x01,
1215 PortTypeParallelPortPs2 = 0x02,
1216 PortTypeParallelPortEcp = 0x03,
1217 PortTypeParallelPortEpp = 0x04,
1218 PortTypeParallelPortEcpEpp = 0x05,
1219 PortTypeSerialXtAtCompatible = 0x06,
1220 PortTypeSerial16450Compatible = 0x07,
1221 PortTypeSerial16550Compatible = 0x08,
1222 PortTypeSerial16550ACompatible = 0x09,
1223 PortTypeScsi = 0x0A,
1224 PortTypeMidi = 0x0B,
1225 PortTypeJoyStick = 0x0C,
1226 PortTypeKeyboard = 0x0D,
1227 PortTypeMouse = 0x0E,
1228 PortTypeSsaScsi = 0x0F,
1229 PortTypeUsb = 0x10,
1230 PortTypeFireWire = 0x11,
1231 PortTypePcmciaTypeI = 0x12,
1232 PortTypePcmciaTypeII = 0x13,
1233 PortTypePcmciaTypeIII = 0x14,
1234 PortTypeCardBus = 0x15,
1235 PortTypeAccessBusPort = 0x16,
1236 PortTypeScsiII = 0x17,
1237 PortTypeScsiWide = 0x18,
1238 PortTypePC98 = 0x19,
1239 PortTypePC98Hireso = 0x1A,
1240 PortTypePCH98 = 0x1B,
1241 PortTypeVideoPort = 0x1C,
1242 PortTypeAudioPort = 0x1D,
1243 PortTypeModemPort = 0x1E,
1244 PortTypeNetworkPort = 0x1F,
1245 PortTypeSata = 0x20,
1246 PortTypeSas = 0x21,
1247 PortTypeMfdp = 0x22, ///< Multi-Function Display Port
1248 PortTypeThunderbolt = 0x23,
1249 PortType8251Compatible = 0xA0,
1250 PortType8251FifoCompatible = 0xA1,
1251 PortTypeOther = 0xFF
1252 } MISC_PORT_TYPE;
1253
1254 ///
1255 /// Port Connector Information (Type 8).
1256 ///
1257 /// The information in this structure defines the attributes of a system port connector,
1258 /// e.g. parallel, serial, keyboard, or mouse ports. The port's type and connector information
1259 /// are provided. One structure is present for each port provided by the system.
1260 ///
1261 typedef struct {
1262 SMBIOS_STRUCTURE Hdr;
1263 SMBIOS_TABLE_STRING InternalReferenceDesignator;
1264 UINT8 InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1265 SMBIOS_TABLE_STRING ExternalReferenceDesignator;
1266 UINT8 ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
1267 UINT8 PortType; ///< The enumeration value from MISC_PORT_TYPE.
1268 } SMBIOS_TABLE_TYPE8;
1269
1270 ///
1271 /// System Slots - Slot Type
1272 ///
1273 typedef enum {
1274 SlotTypeOther = 0x01,
1275 SlotTypeUnknown = 0x02,
1276 SlotTypeIsa = 0x03,
1277 SlotTypeMca = 0x04,
1278 SlotTypeEisa = 0x05,
1279 SlotTypePci = 0x06,
1280 SlotTypePcmcia = 0x07,
1281 SlotTypeVlVesa = 0x08,
1282 SlotTypeProprietary = 0x09,
1283 SlotTypeProcessorCardSlot = 0x0A,
1284 SlotTypeProprietaryMemoryCardSlot = 0x0B,
1285 SlotTypeIORiserCardSlot = 0x0C,
1286 SlotTypeNuBus = 0x0D,
1287 SlotTypePci66MhzCapable = 0x0E,
1288 SlotTypeAgp = 0x0F,
1289 SlotTypeApg2X = 0x10,
1290 SlotTypeAgp4X = 0x11,
1291 SlotTypePciX = 0x12,
1292 SlotTypeAgp8X = 0x13,
1293 SlotTypeM2Socket1_DP = 0x14,
1294 SlotTypeM2Socket1_SD = 0x15,
1295 SlotTypeM2Socket2 = 0x16,
1296 SlotTypeM2Socket3 = 0x17,
1297 SlotTypeMxmTypeI = 0x18,
1298 SlotTypeMxmTypeII = 0x19,
1299 SlotTypeMxmTypeIIIStandard = 0x1A,
1300 SlotTypeMxmTypeIIIHe = 0x1B,
1301 SlotTypeMxmTypeIV = 0x1C,
1302 SlotTypeMxm30TypeA = 0x1D,
1303 SlotTypeMxm30TypeB = 0x1E,
1304 SlotTypePciExpressGen2Sff_8639 = 0x1F,
1305 SlotTypePciExpressGen3Sff_8639 = 0x20,
1306 SlotTypePciExpressMini52pinWithBSKO = 0x21, ///< PCI Express Mini 52-pin (CEM spec. 2.0) with bottom-side keep-outs.
1307 SlotTypePciExpressMini52pinWithoutBSKO = 0x22, ///< PCI Express Mini 52-pin (CEM spec. 2.0) without bottom-side keep-outs.
1308 SlotTypePciExpressMini76pin = 0x23, ///< PCI Express Mini 76-pin (CEM spec. 2.0) Corresponds to Display-Mini card.
1309 SlotTypeCXLFlexbus10 = 0x30,
1310 SlotTypePC98C20 = 0xA0,
1311 SlotTypePC98C24 = 0xA1,
1312 SlotTypePC98E = 0xA2,
1313 SlotTypePC98LocalBus = 0xA3,
1314 SlotTypePC98Card = 0xA4,
1315 SlotTypePciExpress = 0xA5,
1316 SlotTypePciExpressX1 = 0xA6,
1317 SlotTypePciExpressX2 = 0xA7,
1318 SlotTypePciExpressX4 = 0xA8,
1319 SlotTypePciExpressX8 = 0xA9,
1320 SlotTypePciExpressX16 = 0xAA,
1321 SlotTypePciExpressGen2 = 0xAB,
1322 SlotTypePciExpressGen2X1 = 0xAC,
1323 SlotTypePciExpressGen2X2 = 0xAD,
1324 SlotTypePciExpressGen2X4 = 0xAE,
1325 SlotTypePciExpressGen2X8 = 0xAF,
1326 SlotTypePciExpressGen2X16 = 0xB0,
1327 SlotTypePciExpressGen3 = 0xB1,
1328 SlotTypePciExpressGen3X1 = 0xB2,
1329 SlotTypePciExpressGen3X2 = 0xB3,
1330 SlotTypePciExpressGen3X4 = 0xB4,
1331 SlotTypePciExpressGen3X8 = 0xB5,
1332 SlotTypePciExpressGen3X16 = 0xB6,
1333 SlotTypePciExpressGen4 = 0xB8,
1334 SlotTypePciExpressGen4X1 = 0xB9,
1335 SlotTypePciExpressGen4X2 = 0xBA,
1336 SlotTypePciExpressGen4X4 = 0xBB,
1337 SlotTypePciExpressGen4X8 = 0xBC,
1338 SlotTypePciExpressGen4X16 = 0xBD
1339 } MISC_SLOT_TYPE;
1340
1341 ///
1342 /// System Slots - Slot Data Bus Width.
1343 ///
1344 typedef enum {
1345 SlotDataBusWidthOther = 0x01,
1346 SlotDataBusWidthUnknown = 0x02,
1347 SlotDataBusWidth8Bit = 0x03,
1348 SlotDataBusWidth16Bit = 0x04,
1349 SlotDataBusWidth32Bit = 0x05,
1350 SlotDataBusWidth64Bit = 0x06,
1351 SlotDataBusWidth128Bit = 0x07,
1352 SlotDataBusWidth1X = 0x08, ///< Or X1
1353 SlotDataBusWidth2X = 0x09, ///< Or X2
1354 SlotDataBusWidth4X = 0x0A, ///< Or X4
1355 SlotDataBusWidth8X = 0x0B, ///< Or X8
1356 SlotDataBusWidth12X = 0x0C, ///< Or X12
1357 SlotDataBusWidth16X = 0x0D, ///< Or X16
1358 SlotDataBusWidth32X = 0x0E ///< Or X32
1359 } MISC_SLOT_DATA_BUS_WIDTH;
1360
1361 ///
1362 /// System Slots - Current Usage.
1363 ///
1364 typedef enum {
1365 SlotUsageOther = 0x01,
1366 SlotUsageUnknown = 0x02,
1367 SlotUsageAvailable = 0x03,
1368 SlotUsageInUse = 0x04,
1369 SlotUsageUnavailable = 0x05
1370 } MISC_SLOT_USAGE;
1371
1372 ///
1373 /// System Slots - Slot Length.
1374 ///
1375 typedef enum {
1376 SlotLengthOther = 0x01,
1377 SlotLengthUnknown = 0x02,
1378 SlotLengthShort = 0x03,
1379 SlotLengthLong = 0x04
1380 } MISC_SLOT_LENGTH;
1381
1382 ///
1383 /// System Slots - Slot Characteristics 1.
1384 ///
1385 typedef struct {
1386 UINT8 CharacteristicsUnknown : 1;
1387 UINT8 Provides50Volts : 1;
1388 UINT8 Provides33Volts : 1;
1389 UINT8 SharedSlot : 1;
1390 UINT8 PcCard16Supported : 1;
1391 UINT8 CardBusSupported : 1;
1392 UINT8 ZoomVideoSupported : 1;
1393 UINT8 ModemRingResumeSupported : 1;
1394 } MISC_SLOT_CHARACTERISTICS1;
1395 ///
1396 /// System Slots - Slot Characteristics 2.
1397 ///
1398 typedef struct {
1399 UINT8 PmeSignalSupported : 1;
1400 UINT8 HotPlugDevicesSupported : 1;
1401 UINT8 SmbusSignalSupported : 1;
1402 UINT8 BifurcationSupported : 1;
1403 UINT8 AsyncSurpriseRemoval : 1;
1404 UINT8 FlexbusSlotCxl10Capable : 1;
1405 UINT8 FlexbusSlotCxl20Capable : 1;
1406 UINT8 Reserved : 1; ///< Set to 0.
1407 } MISC_SLOT_CHARACTERISTICS2;
1408
1409 ///
1410 /// System Slots - Slot Height
1411 ///
1412 typedef enum {
1413 SlotHeightNone = 0x00,
1414 SlotHeightOther = 0x01,
1415 SlotHeightUnknown = 0x02,
1416 SlotHeightFullHeight = 0x03,
1417 SlotHeightLowProfile = 0x04
1418 } MISC_SLOT_HEIGHT;
1419
1420 ///
1421 /// System Slots - Peer Segment/Bus/Device/Function/Width Groups
1422 ///
1423 typedef struct {
1424 UINT16 SegmentGroupNum;
1425 UINT8 BusNum;
1426 UINT8 DevFuncNum;
1427 UINT8 DataBusWidth;
1428 } MISC_SLOT_PEER_GROUP;
1429
1430 ///
1431 /// System Slots (Type 9)
1432 ///
1433 /// The information in this structure defines the attributes of a system slot.
1434 /// One structure is provided for each slot in the system.
1435 ///
1436 ///
1437 typedef struct {
1438 SMBIOS_STRUCTURE Hdr;
1439 SMBIOS_TABLE_STRING SlotDesignation;
1440 UINT8 SlotType; ///< The enumeration value from MISC_SLOT_TYPE.
1441 UINT8 SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH.
1442 UINT8 CurrentUsage; ///< The enumeration value from MISC_SLOT_USAGE.
1443 UINT8 SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH.
1444 UINT16 SlotID;
1445 MISC_SLOT_CHARACTERISTICS1 SlotCharacteristics1;
1446 MISC_SLOT_CHARACTERISTICS2 SlotCharacteristics2;
1447 //
1448 // Add for smbios 2.6
1449 //
1450 UINT16 SegmentGroupNum;
1451 UINT8 BusNum;
1452 UINT8 DevFuncNum;
1453 //
1454 // Add for smbios 3.2
1455 //
1456 UINT8 DataBusWidth;
1457 UINT8 PeerGroupingCount;
1458 MISC_SLOT_PEER_GROUP PeerGroups[1];
1459 //
1460 // Add for smbios 3.4
1461 //
1462 UINT8 SlotInformation;
1463 UINT8 SlotPhysicalWidth;
1464 UINT16 SlotPitch;
1465 //
1466 // Add for smbios 3.5
1467 //
1468 UINT8 SlotHeight; ///< The enumeration value from MISC_SLOT_HEIGHT.
1469 } SMBIOS_TABLE_TYPE9;
1470
1471 ///
1472 /// On Board Devices Information - Device Types.
1473 ///
1474 typedef enum {
1475 OnBoardDeviceTypeOther = 0x01,
1476 OnBoardDeviceTypeUnknown = 0x02,
1477 OnBoardDeviceTypeVideo = 0x03,
1478 OnBoardDeviceTypeScsiController = 0x04,
1479 OnBoardDeviceTypeEthernet = 0x05,
1480 OnBoardDeviceTypeTokenRing = 0x06,
1481 OnBoardDeviceTypeSound = 0x07,
1482 OnBoardDeviceTypePATAController = 0x08,
1483 OnBoardDeviceTypeSATAController = 0x09,
1484 OnBoardDeviceTypeSASController = 0x0A
1485 } MISC_ONBOARD_DEVICE_TYPE;
1486
1487 ///
1488 /// Device Item Entry
1489 ///
1490 typedef struct {
1491 UINT8 DeviceType; ///< Bit [6:0] - enumeration type of device from MISC_ONBOARD_DEVICE_TYPE.
1492 ///< Bit 7 - 1 : device enabled, 0 : device disabled.
1493 SMBIOS_TABLE_STRING DescriptionString;
1494 } DEVICE_STRUCT;
1495
1496 ///
1497 /// On Board Devices Information (Type 10, obsolete).
1498 ///
1499 /// Note: This structure is obsolete starting with version 2.6 specification; the Onboard Devices Extended
1500 /// Information (Type 41) structure should be used instead . BIOS providers can choose to implement both
1501 /// types to allow existing SMBIOS browsers to properly display the system's onboard devices information.
1502 /// The information in this structure defines the attributes of devices that are onboard (soldered onto)
1503 /// a system element, usually the baseboard. In general, an entry in this table implies that the BIOS
1504 /// has some level of control over the enabling of the associated device for use by the system.
1505 ///
1506 typedef struct {
1507 SMBIOS_STRUCTURE Hdr;
1508 DEVICE_STRUCT Device[1];
1509 } SMBIOS_TABLE_TYPE10;
1510
1511 ///
1512 /// OEM Strings (Type 11).
1513 /// This structure contains free form strings defined by the OEM. Examples of this are:
1514 /// Part Numbers for Reference Documents for the system, contact information for the manufacturer, etc.
1515 ///
1516 typedef struct {
1517 SMBIOS_STRUCTURE Hdr;
1518 UINT8 StringCount;
1519 } SMBIOS_TABLE_TYPE11;
1520
1521 ///
1522 /// System Configuration Options (Type 12).
1523 ///
1524 /// This structure contains information required to configure the base board's Jumpers and Switches.
1525 ///
1526 typedef struct {
1527 SMBIOS_STRUCTURE Hdr;
1528 UINT8 StringCount;
1529 } SMBIOS_TABLE_TYPE12;
1530
1531 ///
1532 /// BIOS Language Information (Type 13).
1533 ///
1534 /// The information in this structure defines the installable language attributes of the BIOS.
1535 ///
1536 typedef struct {
1537 SMBIOS_STRUCTURE Hdr;
1538 UINT8 InstallableLanguages;
1539 UINT8 Flags;
1540 UINT8 Reserved[15];
1541 SMBIOS_TABLE_STRING CurrentLanguages;
1542 } SMBIOS_TABLE_TYPE13;
1543
1544 ///
1545 /// Group Item Entry
1546 ///
1547 typedef struct {
1548 UINT8 ItemType;
1549 UINT16 ItemHandle;
1550 } GROUP_STRUCT;
1551
1552 ///
1553 /// Group Associations (Type 14).
1554 ///
1555 /// The Group Associations structure is provided for OEMs who want to specify
1556 /// the arrangement or hierarchy of certain components (including other Group Associations)
1557 /// within the system.
1558 ///
1559 typedef struct {
1560 SMBIOS_STRUCTURE Hdr;
1561 SMBIOS_TABLE_STRING GroupName;
1562 GROUP_STRUCT Group[1];
1563 } SMBIOS_TABLE_TYPE14;
1564
1565 ///
1566 /// System Event Log - Event Log Types.
1567 ///
1568 typedef enum {
1569 EventLogTypeReserved = 0x00,
1570 EventLogTypeSingleBitECC = 0x01,
1571 EventLogTypeMultiBitECC = 0x02,
1572 EventLogTypeParityMemErr = 0x03,
1573 EventLogTypeBusTimeOut = 0x04,
1574 EventLogTypeIOChannelCheck = 0x05,
1575 EventLogTypeSoftwareNMI = 0x06,
1576 EventLogTypePOSTMemResize = 0x07,
1577 EventLogTypePOSTErr = 0x08,
1578 EventLogTypePCIParityErr = 0x09,
1579 EventLogTypePCISystemErr = 0x0A,
1580 EventLogTypeCPUFailure = 0x0B,
1581 EventLogTypeEISATimeOut = 0x0C,
1582 EventLogTypeMemLogDisabled = 0x0D,
1583 EventLogTypeLoggingDisabled = 0x0E,
1584 EventLogTypeSysLimitExce = 0x10,
1585 EventLogTypeAsyncHWTimer = 0x11,
1586 EventLogTypeSysConfigInfo = 0x12,
1587 EventLogTypeHDInfo = 0x13,
1588 EventLogTypeSysReconfig = 0x14,
1589 EventLogTypeUncorrectCPUErr = 0x15,
1590 EventLogTypeAreaResetAndClr = 0x16,
1591 EventLogTypeSystemBoot = 0x17,
1592 EventLogTypeUnused = 0x18, ///< 0x18 - 0x7F
1593 EventLogTypeAvailForSys = 0x80, ///< 0x80 - 0xFE
1594 EventLogTypeEndOfLog = 0xFF
1595 } EVENT_LOG_TYPE_DATA;
1596
1597 ///
1598 /// System Event Log - Variable Data Format Types.
1599 ///
1600 typedef enum {
1601 EventLogVariableNone = 0x00,
1602 EventLogVariableHandle = 0x01,
1603 EventLogVariableMutilEvent = 0x02,
1604 EventLogVariableMutilEventHandle = 0x03,
1605 EventLogVariablePOSTResultBitmap = 0x04,
1606 EventLogVariableSysManagementType = 0x05,
1607 EventLogVariableMutliEventSysManagmentType = 0x06,
1608 EventLogVariableUnused = 0x07,
1609 EventLogVariableOEMAssigned = 0x80
1610 } EVENT_LOG_VARIABLE_DATA;
1611
1612 ///
1613 /// Event Log Type Descriptors
1614 ///
1615 typedef struct {
1616 UINT8 LogType; ///< The enumeration value from EVENT_LOG_TYPE_DATA.
1617 UINT8 DataFormatType;
1618 } EVENT_LOG_TYPE;
1619
1620 ///
1621 /// System Event Log (Type 15).
1622 ///
1623 /// The presence of this structure within the SMBIOS data returned for a system indicates
1624 /// that the system supports an event log. An event log is a fixed-length area within a
1625 /// non-volatile storage element, starting with a fixed-length (and vendor-specific) header
1626 /// record, followed by one or more variable-length log records.
1627 ///
1628 typedef struct {
1629 SMBIOS_STRUCTURE Hdr;
1630 UINT16 LogAreaLength;
1631 UINT16 LogHeaderStartOffset;
1632 UINT16 LogDataStartOffset;
1633 UINT8 AccessMethod;
1634 UINT8 LogStatus;
1635 UINT32 LogChangeToken;
1636 UINT32 AccessMethodAddress;
1637 UINT8 LogHeaderFormat;
1638 UINT8 NumberOfSupportedLogTypeDescriptors;
1639 UINT8 LengthOfLogTypeDescriptor;
1640 EVENT_LOG_TYPE EventLogTypeDescriptors[1];
1641 } SMBIOS_TABLE_TYPE15;
1642
1643 ///
1644 /// Physical Memory Array - Location.
1645 ///
1646 typedef enum {
1647 MemoryArrayLocationOther = 0x01,
1648 MemoryArrayLocationUnknown = 0x02,
1649 MemoryArrayLocationSystemBoard = 0x03,
1650 MemoryArrayLocationIsaAddonCard = 0x04,
1651 MemoryArrayLocationEisaAddonCard = 0x05,
1652 MemoryArrayLocationPciAddonCard = 0x06,
1653 MemoryArrayLocationMcaAddonCard = 0x07,
1654 MemoryArrayLocationPcmciaAddonCard = 0x08,
1655 MemoryArrayLocationProprietaryAddonCard = 0x09,
1656 MemoryArrayLocationNuBus = 0x0A,
1657 MemoryArrayLocationPc98C20AddonCard = 0xA0,
1658 MemoryArrayLocationPc98C24AddonCard = 0xA1,
1659 MemoryArrayLocationPc98EAddonCard = 0xA2,
1660 MemoryArrayLocationPc98LocalBusAddonCard = 0xA3,
1661 MemoryArrayLocationCXLAddonCard = 0xA4
1662 } MEMORY_ARRAY_LOCATION;
1663
1664 ///
1665 /// Physical Memory Array - Use.
1666 ///
1667 typedef enum {
1668 MemoryArrayUseOther = 0x01,
1669 MemoryArrayUseUnknown = 0x02,
1670 MemoryArrayUseSystemMemory = 0x03,
1671 MemoryArrayUseVideoMemory = 0x04,
1672 MemoryArrayUseFlashMemory = 0x05,
1673 MemoryArrayUseNonVolatileRam = 0x06,
1674 MemoryArrayUseCacheMemory = 0x07
1675 } MEMORY_ARRAY_USE;
1676
1677 ///
1678 /// Physical Memory Array - Error Correction Types.
1679 ///
1680 typedef enum {
1681 MemoryErrorCorrectionOther = 0x01,
1682 MemoryErrorCorrectionUnknown = 0x02,
1683 MemoryErrorCorrectionNone = 0x03,
1684 MemoryErrorCorrectionParity = 0x04,
1685 MemoryErrorCorrectionSingleBitEcc = 0x05,
1686 MemoryErrorCorrectionMultiBitEcc = 0x06,
1687 MemoryErrorCorrectionCrc = 0x07
1688 } MEMORY_ERROR_CORRECTION;
1689
1690 ///
1691 /// Physical Memory Array (Type 16).
1692 ///
1693 /// This structure describes a collection of memory devices that operate
1694 /// together to form a memory address space.
1695 ///
1696 typedef struct {
1697 SMBIOS_STRUCTURE Hdr;
1698 UINT8 Location; ///< The enumeration value from MEMORY_ARRAY_LOCATION.
1699 UINT8 Use; ///< The enumeration value from MEMORY_ARRAY_USE.
1700 UINT8 MemoryErrorCorrection; ///< The enumeration value from MEMORY_ERROR_CORRECTION.
1701 UINT32 MaximumCapacity;
1702 UINT16 MemoryErrorInformationHandle;
1703 UINT16 NumberOfMemoryDevices;
1704 //
1705 // Add for smbios 2.7
1706 //
1707 UINT64 ExtendedMaximumCapacity;
1708 } SMBIOS_TABLE_TYPE16;
1709
1710 ///
1711 /// Memory Device - Form Factor.
1712 ///
1713 typedef enum {
1714 MemoryFormFactorOther = 0x01,
1715 MemoryFormFactorUnknown = 0x02,
1716 MemoryFormFactorSimm = 0x03,
1717 MemoryFormFactorSip = 0x04,
1718 MemoryFormFactorChip = 0x05,
1719 MemoryFormFactorDip = 0x06,
1720 MemoryFormFactorZip = 0x07,
1721 MemoryFormFactorProprietaryCard = 0x08,
1722 MemoryFormFactorDimm = 0x09,
1723 MemoryFormFactorTsop = 0x0A,
1724 MemoryFormFactorRowOfChips = 0x0B,
1725 MemoryFormFactorRimm = 0x0C,
1726 MemoryFormFactorSodimm = 0x0D,
1727 MemoryFormFactorSrimm = 0x0E,
1728 MemoryFormFactorFbDimm = 0x0F,
1729 MemoryFormFactorDie = 0x10
1730 } MEMORY_FORM_FACTOR;
1731
1732 ///
1733 /// Memory Device - Type
1734 ///
1735 typedef enum {
1736 MemoryTypeOther = 0x01,
1737 MemoryTypeUnknown = 0x02,
1738 MemoryTypeDram = 0x03,
1739 MemoryTypeEdram = 0x04,
1740 MemoryTypeVram = 0x05,
1741 MemoryTypeSram = 0x06,
1742 MemoryTypeRam = 0x07,
1743 MemoryTypeRom = 0x08,
1744 MemoryTypeFlash = 0x09,
1745 MemoryTypeEeprom = 0x0A,
1746 MemoryTypeFeprom = 0x0B,
1747 MemoryTypeEprom = 0x0C,
1748 MemoryTypeCdram = 0x0D,
1749 MemoryType3Dram = 0x0E,
1750 MemoryTypeSdram = 0x0F,
1751 MemoryTypeSgram = 0x10,
1752 MemoryTypeRdram = 0x11,
1753 MemoryTypeDdr = 0x12,
1754 MemoryTypeDdr2 = 0x13,
1755 MemoryTypeDdr2FbDimm = 0x14,
1756 MemoryTypeDdr3 = 0x18,
1757 MemoryTypeFbd2 = 0x19,
1758 MemoryTypeDdr4 = 0x1A,
1759 MemoryTypeLpddr = 0x1B,
1760 MemoryTypeLpddr2 = 0x1C,
1761 MemoryTypeLpddr3 = 0x1D,
1762 MemoryTypeLpddr4 = 0x1E,
1763 MemoryTypeLogicalNonVolatileDevice = 0x1F,
1764 MemoryTypeHBM = 0x20,
1765 MemoryTypeHBM2 = 0x21,
1766 MemoryTypeDdr5 = 0x22,
1767 MemoryTypeLpddr5 = 0x23
1768 } MEMORY_DEVICE_TYPE;
1769
1770 ///
1771 /// Memory Device - Type Detail
1772 ///
1773 typedef struct {
1774 UINT16 Reserved : 1;
1775 UINT16 Other : 1;
1776 UINT16 Unknown : 1;
1777 UINT16 FastPaged : 1;
1778 UINT16 StaticColumn : 1;
1779 UINT16 PseudoStatic : 1;
1780 UINT16 Rambus : 1;
1781 UINT16 Synchronous : 1;
1782 UINT16 Cmos : 1;
1783 UINT16 Edo : 1;
1784 UINT16 WindowDram : 1;
1785 UINT16 CacheDram : 1;
1786 UINT16 Nonvolatile : 1;
1787 UINT16 Registered : 1;
1788 UINT16 Unbuffered : 1;
1789 UINT16 LrDimm : 1;
1790 } MEMORY_DEVICE_TYPE_DETAIL;
1791
1792 ///
1793 /// Memory Device - Memory Technology
1794 ///
1795 typedef enum {
1796 MemoryTechnologyOther = 0x01,
1797 MemoryTechnologyUnknown = 0x02,
1798 MemoryTechnologyDram = 0x03,
1799 MemoryTechnologyNvdimmN = 0x04,
1800 MemoryTechnologyNvdimmF = 0x05,
1801 MemoryTechnologyNvdimmP = 0x06,
1802 //
1803 // This definition is updated to represent Intel
1804 // Optane DC Persistent Memory in SMBIOS spec 3.4.0
1805 //
1806 MemoryTechnologyIntelOptanePersistentMemory = 0x07
1807 } MEMORY_DEVICE_TECHNOLOGY;
1808
1809 ///
1810 /// Memory Device - Memory Operating Mode Capability
1811 ///
1812 typedef union {
1813 ///
1814 /// Individual bit fields
1815 ///
1816 struct {
1817 UINT16 Reserved : 1; ///< Set to 0.
1818 UINT16 Other : 1;
1819 UINT16 Unknown : 1;
1820 UINT16 VolatileMemory : 1;
1821 UINT16 ByteAccessiblePersistentMemory : 1;
1822 UINT16 BlockAccessiblePersistentMemory : 1;
1823 UINT16 Reserved2 : 10; ///< Set to 0.
1824 } Bits;
1825 ///
1826 /// All bit fields as a 16-bit value
1827 ///
1828 UINT16 Uint16;
1829 } MEMORY_DEVICE_OPERATING_MODE_CAPABILITY;
1830
1831 ///
1832 /// Memory Device (Type 17).
1833 ///
1834 /// This structure describes a single memory device that is part of
1835 /// a larger Physical Memory Array (Type 16).
1836 /// Note: If a system includes memory-device sockets, the SMBIOS implementation
1837 /// includes a Memory Device structure instance for each slot, whether or not the
1838 /// socket is currently populated.
1839 ///
1840 typedef struct {
1841 SMBIOS_STRUCTURE Hdr;
1842 UINT16 MemoryArrayHandle;
1843 UINT16 MemoryErrorInformationHandle;
1844 UINT16 TotalWidth;
1845 UINT16 DataWidth;
1846 UINT16 Size;
1847 UINT8 FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR.
1848 UINT8 DeviceSet;
1849 SMBIOS_TABLE_STRING DeviceLocator;
1850 SMBIOS_TABLE_STRING BankLocator;
1851 UINT8 MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE.
1852 MEMORY_DEVICE_TYPE_DETAIL TypeDetail;
1853 UINT16 Speed;
1854 SMBIOS_TABLE_STRING Manufacturer;
1855 SMBIOS_TABLE_STRING SerialNumber;
1856 SMBIOS_TABLE_STRING AssetTag;
1857 SMBIOS_TABLE_STRING PartNumber;
1858 //
1859 // Add for smbios 2.6
1860 //
1861 UINT8 Attributes;
1862 //
1863 // Add for smbios 2.7
1864 //
1865 UINT32 ExtendedSize;
1866 //
1867 // Keep using name "ConfiguredMemoryClockSpeed" for compatibility
1868 // although this field is renamed from "Configured Memory Clock Speed"
1869 // to "Configured Memory Speed" in smbios 3.2.0.
1870 //
1871 UINT16 ConfiguredMemoryClockSpeed;
1872 //
1873 // Add for smbios 2.8.0
1874 //
1875 UINT16 MinimumVoltage;
1876 UINT16 MaximumVoltage;
1877 UINT16 ConfiguredVoltage;
1878 //
1879 // Add for smbios 3.2.0
1880 //
1881 UINT8 MemoryTechnology; ///< The enumeration value from MEMORY_DEVICE_TECHNOLOGY
1882 MEMORY_DEVICE_OPERATING_MODE_CAPABILITY MemoryOperatingModeCapability;
1883 SMBIOS_TABLE_STRING FirmwareVersion;
1884 UINT16 ModuleManufacturerID;
1885 UINT16 ModuleProductID;
1886 UINT16 MemorySubsystemControllerManufacturerID;
1887 UINT16 MemorySubsystemControllerProductID;
1888 UINT64 NonVolatileSize;
1889 UINT64 VolatileSize;
1890 UINT64 CacheSize;
1891 UINT64 LogicalSize;
1892 //
1893 // Add for smbios 3.3.0
1894 //
1895 UINT32 ExtendedSpeed;
1896 UINT32 ExtendedConfiguredMemorySpeed;
1897 } SMBIOS_TABLE_TYPE17;
1898
1899 ///
1900 /// 32-bit Memory Error Information - Error Type.
1901 ///
1902 typedef enum {
1903 MemoryErrorOther = 0x01,
1904 MemoryErrorUnknown = 0x02,
1905 MemoryErrorOk = 0x03,
1906 MemoryErrorBadRead = 0x04,
1907 MemoryErrorParity = 0x05,
1908 MemoryErrorSigleBit = 0x06,
1909 MemoryErrorDoubleBit = 0x07,
1910 MemoryErrorMultiBit = 0x08,
1911 MemoryErrorNibble = 0x09,
1912 MemoryErrorChecksum = 0x0A,
1913 MemoryErrorCrc = 0x0B,
1914 MemoryErrorCorrectSingleBit = 0x0C,
1915 MemoryErrorCorrected = 0x0D,
1916 MemoryErrorUnCorrectable = 0x0E
1917 } MEMORY_ERROR_TYPE;
1918
1919 ///
1920 /// 32-bit Memory Error Information - Error Granularity.
1921 ///
1922 typedef enum {
1923 MemoryGranularityOther = 0x01,
1924 MemoryGranularityOtherUnknown = 0x02,
1925 MemoryGranularityDeviceLevel = 0x03,
1926 MemoryGranularityMemPartitionLevel = 0x04
1927 } MEMORY_ERROR_GRANULARITY;
1928
1929 ///
1930 /// 32-bit Memory Error Information - Error Operation.
1931 ///
1932 typedef enum {
1933 MemoryErrorOperationOther = 0x01,
1934 MemoryErrorOperationUnknown = 0x02,
1935 MemoryErrorOperationRead = 0x03,
1936 MemoryErrorOperationWrite = 0x04,
1937 MemoryErrorOperationPartialWrite = 0x05
1938 } MEMORY_ERROR_OPERATION;
1939
1940 ///
1941 /// 32-bit Memory Error Information (Type 18).
1942 ///
1943 /// This structure identifies the specifics of an error that might be detected
1944 /// within a Physical Memory Array.
1945 ///
1946 typedef struct {
1947 SMBIOS_STRUCTURE Hdr;
1948 UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
1949 UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
1950 UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
1951 UINT32 VendorSyndrome;
1952 UINT32 MemoryArrayErrorAddress;
1953 UINT32 DeviceErrorAddress;
1954 UINT32 ErrorResolution;
1955 } SMBIOS_TABLE_TYPE18;
1956
1957 ///
1958 /// Memory Array Mapped Address (Type 19).
1959 ///
1960 /// This structure provides the address mapping for a Physical Memory Array.
1961 /// One structure is present for each contiguous address range described.
1962 ///
1963 typedef struct {
1964 SMBIOS_STRUCTURE Hdr;
1965 UINT32 StartingAddress;
1966 UINT32 EndingAddress;
1967 UINT16 MemoryArrayHandle;
1968 UINT8 PartitionWidth;
1969 //
1970 // Add for smbios 2.7
1971 //
1972 UINT64 ExtendedStartingAddress;
1973 UINT64 ExtendedEndingAddress;
1974 } SMBIOS_TABLE_TYPE19;
1975
1976 ///
1977 /// Memory Device Mapped Address (Type 20).
1978 ///
1979 /// This structure maps memory address space usually to a device-level granularity.
1980 /// One structure is present for each contiguous address range described.
1981 ///
1982 typedef struct {
1983 SMBIOS_STRUCTURE Hdr;
1984 UINT32 StartingAddress;
1985 UINT32 EndingAddress;
1986 UINT16 MemoryDeviceHandle;
1987 UINT16 MemoryArrayMappedAddressHandle;
1988 UINT8 PartitionRowPosition;
1989 UINT8 InterleavePosition;
1990 UINT8 InterleavedDataDepth;
1991 //
1992 // Add for smbios 2.7
1993 //
1994 UINT64 ExtendedStartingAddress;
1995 UINT64 ExtendedEndingAddress;
1996 } SMBIOS_TABLE_TYPE20;
1997
1998 ///
1999 /// Built-in Pointing Device - Type
2000 ///
2001 typedef enum {
2002 PointingDeviceTypeOther = 0x01,
2003 PointingDeviceTypeUnknown = 0x02,
2004 PointingDeviceTypeMouse = 0x03,
2005 PointingDeviceTypeTrackBall = 0x04,
2006 PointingDeviceTypeTrackPoint = 0x05,
2007 PointingDeviceTypeGlidePoint = 0x06,
2008 PointingDeviceTouchPad = 0x07,
2009 PointingDeviceTouchScreen = 0x08,
2010 PointingDeviceOpticalSensor = 0x09
2011 } BUILTIN_POINTING_DEVICE_TYPE;
2012
2013 ///
2014 /// Built-in Pointing Device - Interface.
2015 ///
2016 typedef enum {
2017 PointingDeviceInterfaceOther = 0x01,
2018 PointingDeviceInterfaceUnknown = 0x02,
2019 PointingDeviceInterfaceSerial = 0x03,
2020 PointingDeviceInterfacePs2 = 0x04,
2021 PointingDeviceInterfaceInfrared = 0x05,
2022 PointingDeviceInterfaceHpHil = 0x06,
2023 PointingDeviceInterfaceBusMouse = 0x07,
2024 PointingDeviceInterfaceADB = 0x08,
2025 PointingDeviceInterfaceBusMouseDB9 = 0xA0,
2026 PointingDeviceInterfaceBusMouseMicroDin = 0xA1,
2027 PointingDeviceInterfaceUsb = 0xA2,
2028 PointingDeviceInterfaceI2c = 0xA3,
2029 PointingDeviceInterfaceSpi = 0xA4
2030 } BUILTIN_POINTING_DEVICE_INTERFACE;
2031
2032 ///
2033 /// Built-in Pointing Device (Type 21).
2034 ///
2035 /// This structure describes the attributes of the built-in pointing device for the
2036 /// system. The presence of this structure does not imply that the built-in
2037 /// pointing device is active for the system's use!
2038 ///
2039 typedef struct {
2040 SMBIOS_STRUCTURE Hdr;
2041 UINT8 Type; ///< The enumeration value from BUILTIN_POINTING_DEVICE_TYPE.
2042 UINT8 Interface; ///< The enumeration value from BUILTIN_POINTING_DEVICE_INTERFACE.
2043 UINT8 NumberOfButtons;
2044 } SMBIOS_TABLE_TYPE21;
2045
2046 ///
2047 /// Portable Battery - Device Chemistry
2048 ///
2049 typedef enum {
2050 PortableBatteryDeviceChemistryOther = 0x01,
2051 PortableBatteryDeviceChemistryUnknown = 0x02,
2052 PortableBatteryDeviceChemistryLeadAcid = 0x03,
2053 PortableBatteryDeviceChemistryNickelCadmium = 0x04,
2054 PortableBatteryDeviceChemistryNickelMetalHydride = 0x05,
2055 PortableBatteryDeviceChemistryLithiumIon = 0x06,
2056 PortableBatteryDeviceChemistryZincAir = 0x07,
2057 PortableBatteryDeviceChemistryLithiumPolymer = 0x08
2058 } PORTABLE_BATTERY_DEVICE_CHEMISTRY;
2059
2060 ///
2061 /// Portable Battery (Type 22).
2062 ///
2063 /// This structure describes the attributes of the portable battery(s) for the system.
2064 /// The structure contains the static attributes for the group. Each structure describes
2065 /// a single battery pack's attributes.
2066 ///
2067 typedef struct {
2068 SMBIOS_STRUCTURE Hdr;
2069 SMBIOS_TABLE_STRING Location;
2070 SMBIOS_TABLE_STRING Manufacturer;
2071 SMBIOS_TABLE_STRING ManufactureDate;
2072 SMBIOS_TABLE_STRING SerialNumber;
2073 SMBIOS_TABLE_STRING DeviceName;
2074 UINT8 DeviceChemistry; ///< The enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY.
2075 UINT16 DeviceCapacity;
2076 UINT16 DesignVoltage;
2077 SMBIOS_TABLE_STRING SBDSVersionNumber;
2078 UINT8 MaximumErrorInBatteryData;
2079 UINT16 SBDSSerialNumber;
2080 UINT16 SBDSManufactureDate;
2081 SMBIOS_TABLE_STRING SBDSDeviceChemistry;
2082 UINT8 DesignCapacityMultiplier;
2083 UINT32 OEMSpecific;
2084 } SMBIOS_TABLE_TYPE22;
2085
2086 ///
2087 /// System Reset (Type 23)
2088 ///
2089 /// This structure describes whether Automatic System Reset functions enabled (Status).
2090 /// If the system has a watchdog Timer and the timer is not reset (Timer Reset)
2091 /// before the Interval elapses, an automatic system reset will occur. The system will re-boot
2092 /// according to the Boot Option. This function may repeat until the Limit is reached, at which time
2093 /// the system will re-boot according to the Boot Option at Limit.
2094 ///
2095 typedef struct {
2096 SMBIOS_STRUCTURE Hdr;
2097 UINT8 Capabilities;
2098 UINT16 ResetCount;
2099 UINT16 ResetLimit;
2100 UINT16 TimerInterval;
2101 UINT16 Timeout;
2102 } SMBIOS_TABLE_TYPE23;
2103
2104 ///
2105 /// Hardware Security (Type 24).
2106 ///
2107 /// This structure describes the system-wide hardware security settings.
2108 ///
2109 typedef struct {
2110 SMBIOS_STRUCTURE Hdr;
2111 UINT8 HardwareSecuritySettings;
2112 } SMBIOS_TABLE_TYPE24;
2113
2114 ///
2115 /// System Power Controls (Type 25).
2116 ///
2117 /// This structure describes the attributes for controlling the main power supply to the system.
2118 /// Software that interprets this structure uses the month, day, hour, minute, and second values
2119 /// to determine the number of seconds until the next power-on of the system. The presence of
2120 /// this structure implies that a timed power-on facility is available for the system.
2121 ///
2122 typedef struct {
2123 SMBIOS_STRUCTURE Hdr;
2124 UINT8 NextScheduledPowerOnMonth;
2125 UINT8 NextScheduledPowerOnDayOfMonth;
2126 UINT8 NextScheduledPowerOnHour;
2127 UINT8 NextScheduledPowerOnMinute;
2128 UINT8 NextScheduledPowerOnSecond;
2129 } SMBIOS_TABLE_TYPE25;
2130
2131 ///
2132 /// Voltage Probe - Location and Status.
2133 ///
2134 typedef struct {
2135 UINT8 VoltageProbeSite : 5;
2136 UINT8 VoltageProbeStatus : 3;
2137 } MISC_VOLTAGE_PROBE_LOCATION;
2138
2139 ///
2140 /// Voltage Probe (Type 26)
2141 ///
2142 /// This describes the attributes for a voltage probe in the system.
2143 /// Each structure describes a single voltage probe.
2144 ///
2145 typedef struct {
2146 SMBIOS_STRUCTURE Hdr;
2147 SMBIOS_TABLE_STRING Description;
2148 MISC_VOLTAGE_PROBE_LOCATION LocationAndStatus;
2149 UINT16 MaximumValue;
2150 UINT16 MinimumValue;
2151 UINT16 Resolution;
2152 UINT16 Tolerance;
2153 UINT16 Accuracy;
2154 UINT32 OEMDefined;
2155 UINT16 NominalValue;
2156 } SMBIOS_TABLE_TYPE26;
2157
2158 ///
2159 /// Cooling Device - Device Type and Status.
2160 ///
2161 typedef struct {
2162 UINT8 CoolingDevice : 5;
2163 UINT8 CoolingDeviceStatus : 3;
2164 } MISC_COOLING_DEVICE_TYPE;
2165
2166 ///
2167 /// Cooling Device (Type 27)
2168 ///
2169 /// This structure describes the attributes for a cooling device in the system.
2170 /// Each structure describes a single cooling device.
2171 ///
2172 typedef struct {
2173 SMBIOS_STRUCTURE Hdr;
2174 UINT16 TemperatureProbeHandle;
2175 MISC_COOLING_DEVICE_TYPE DeviceTypeAndStatus;
2176 UINT8 CoolingUnitGroup;
2177 UINT32 OEMDefined;
2178 UINT16 NominalSpeed;
2179 //
2180 // Add for smbios 2.7
2181 //
2182 SMBIOS_TABLE_STRING Description;
2183 } SMBIOS_TABLE_TYPE27;
2184
2185 ///
2186 /// Temperature Probe - Location and Status.
2187 ///
2188 typedef struct {
2189 UINT8 TemperatureProbeSite : 5;
2190 UINT8 TemperatureProbeStatus : 3;
2191 } MISC_TEMPERATURE_PROBE_LOCATION;
2192
2193 ///
2194 /// Temperature Probe (Type 28).
2195 ///
2196 /// This structure describes the attributes for a temperature probe in the system.
2197 /// Each structure describes a single temperature probe.
2198 ///
2199 typedef struct {
2200 SMBIOS_STRUCTURE Hdr;
2201 SMBIOS_TABLE_STRING Description;
2202 MISC_TEMPERATURE_PROBE_LOCATION LocationAndStatus;
2203 UINT16 MaximumValue;
2204 UINT16 MinimumValue;
2205 UINT16 Resolution;
2206 UINT16 Tolerance;
2207 UINT16 Accuracy;
2208 UINT32 OEMDefined;
2209 UINT16 NominalValue;
2210 } SMBIOS_TABLE_TYPE28;
2211
2212 ///
2213 /// Electrical Current Probe - Location and Status.
2214 ///
2215 typedef struct {
2216 UINT8 ElectricalCurrentProbeSite : 5;
2217 UINT8 ElectricalCurrentProbeStatus : 3;
2218 } MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
2219
2220 ///
2221 /// Electrical Current Probe (Type 29).
2222 ///
2223 /// This structure describes the attributes for an electrical current probe in the system.
2224 /// Each structure describes a single electrical current probe.
2225 ///
2226 typedef struct {
2227 SMBIOS_STRUCTURE Hdr;
2228 SMBIOS_TABLE_STRING Description;
2229 MISC_ELECTRICAL_CURRENT_PROBE_LOCATION LocationAndStatus;
2230 UINT16 MaximumValue;
2231 UINT16 MinimumValue;
2232 UINT16 Resolution;
2233 UINT16 Tolerance;
2234 UINT16 Accuracy;
2235 UINT32 OEMDefined;
2236 UINT16 NominalValue;
2237 } SMBIOS_TABLE_TYPE29;
2238
2239 ///
2240 /// Out-of-Band Remote Access (Type 30).
2241 ///
2242 /// This structure describes the attributes and policy settings of a hardware facility
2243 /// that may be used to gain remote access to a hardware system when the operating system
2244 /// is not available due to power-down status, hardware failures, or boot failures.
2245 ///
2246 typedef struct {
2247 SMBIOS_STRUCTURE Hdr;
2248 SMBIOS_TABLE_STRING ManufacturerName;
2249 UINT8 Connections;
2250 } SMBIOS_TABLE_TYPE30;
2251
2252 ///
2253 /// Boot Integrity Services (BIS) Entry Point (Type 31).
2254 ///
2255 /// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS).
2256 ///
2257 typedef struct {
2258 SMBIOS_STRUCTURE Hdr;
2259 UINT8 Checksum;
2260 UINT8 Reserved1;
2261 UINT16 Reserved2;
2262 UINT32 BisEntry16;
2263 UINT32 BisEntry32;
2264 UINT64 Reserved3;
2265 UINT32 Reserved4;
2266 } SMBIOS_TABLE_TYPE31;
2267
2268 ///
2269 /// System Boot Information - System Boot Status.
2270 ///
2271 typedef enum {
2272 BootInformationStatusNoError = 0x00,
2273 BootInformationStatusNoBootableMedia = 0x01,
2274 BootInformationStatusNormalOSFailedLoading = 0x02,
2275 BootInformationStatusFirmwareDetectedFailure = 0x03,
2276 BootInformationStatusOSDetectedFailure = 0x04,
2277 BootInformationStatusUserRequestedBoot = 0x05,
2278 BootInformationStatusSystemSecurityViolation = 0x06,
2279 BootInformationStatusPreviousRequestedImage = 0x07,
2280 BootInformationStatusWatchdogTimerExpired = 0x08,
2281 BootInformationStatusStartReserved = 0x09,
2282 BootInformationStatusStartOemSpecific = 0x80,
2283 BootInformationStatusStartProductSpecific = 0xC0
2284 } MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;
2285
2286 ///
2287 /// System Boot Information (Type 32).
2288 ///
2289 /// The client system firmware, e.g. BIOS, communicates the System Boot Status to the
2290 /// client's Pre-boot Execution Environment (PXE) boot image or OS-present management
2291 /// application via this structure. When used in the PXE environment, for example,
2292 /// this code identifies the reason the PXE was initiated and can be used by boot-image
2293 /// software to further automate an enterprise's PXE sessions. For example, an enterprise
2294 /// could choose to automatically download a hardware-diagnostic image to a client whose
2295 /// reason code indicated either a firmware- or operating system-detected hardware failure.
2296 ///
2297 typedef struct {
2298 SMBIOS_STRUCTURE Hdr;
2299 UINT8 Reserved[6];
2300 UINT8 BootStatus; ///< The enumeration value from MISC_BOOT_INFORMATION_STATUS_DATA_TYPE.
2301 } SMBIOS_TABLE_TYPE32;
2302
2303 ///
2304 /// 64-bit Memory Error Information (Type 33).
2305 ///
2306 /// This structure describes an error within a Physical Memory Array,
2307 /// when the error address is above 4G (0xFFFFFFFF).
2308 ///
2309 typedef struct {
2310 SMBIOS_STRUCTURE Hdr;
2311 UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
2312 UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
2313 UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
2314 UINT32 VendorSyndrome;
2315 UINT64 MemoryArrayErrorAddress;
2316 UINT64 DeviceErrorAddress;
2317 UINT32 ErrorResolution;
2318 } SMBIOS_TABLE_TYPE33;
2319
2320 ///
2321 /// Management Device - Type.
2322 ///
2323 typedef enum {
2324 ManagementDeviceTypeOther = 0x01,
2325 ManagementDeviceTypeUnknown = 0x02,
2326 ManagementDeviceTypeLm75 = 0x03,
2327 ManagementDeviceTypeLm78 = 0x04,
2328 ManagementDeviceTypeLm79 = 0x05,
2329 ManagementDeviceTypeLm80 = 0x06,
2330 ManagementDeviceTypeLm81 = 0x07,
2331 ManagementDeviceTypeAdm9240 = 0x08,
2332 ManagementDeviceTypeDs1780 = 0x09,
2333 ManagementDeviceTypeMaxim1617 = 0x0A,
2334 ManagementDeviceTypeGl518Sm = 0x0B,
2335 ManagementDeviceTypeW83781D = 0x0C,
2336 ManagementDeviceTypeHt82H791 = 0x0D
2337 } MISC_MANAGEMENT_DEVICE_TYPE;
2338
2339 ///
2340 /// Management Device - Address Type.
2341 ///
2342 typedef enum {
2343 ManagementDeviceAddressTypeOther = 0x01,
2344 ManagementDeviceAddressTypeUnknown = 0x02,
2345 ManagementDeviceAddressTypeIOPort = 0x03,
2346 ManagementDeviceAddressTypeMemory = 0x04,
2347 ManagementDeviceAddressTypeSmbus = 0x05
2348 } MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
2349
2350 ///
2351 /// Management Device (Type 34).
2352 ///
2353 /// The information in this structure defines the attributes of a Management Device.
2354 /// A Management Device might control one or more fans or voltage, current, or temperature
2355 /// probes as defined by one or more Management Device Component structures.
2356 ///
2357 typedef struct {
2358 SMBIOS_STRUCTURE Hdr;
2359 SMBIOS_TABLE_STRING Description;
2360 UINT8 Type; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_TYPE.
2361 UINT32 Address;
2362 UINT8 AddressType; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE.
2363 } SMBIOS_TABLE_TYPE34;
2364
2365 ///
2366 /// Management Device Component (Type 35)
2367 ///
2368 /// This structure associates a cooling device or environmental probe with structures
2369 /// that define the controlling hardware device and (optionally) the component's thresholds.
2370 ///
2371 typedef struct {
2372 SMBIOS_STRUCTURE Hdr;
2373 SMBIOS_TABLE_STRING Description;
2374 UINT16 ManagementDeviceHandle;
2375 UINT16 ComponentHandle;
2376 UINT16 ThresholdHandle;
2377 } SMBIOS_TABLE_TYPE35;
2378
2379 ///
2380 /// Management Device Threshold Data (Type 36).
2381 ///
2382 /// The information in this structure defines threshold information for
2383 /// a component (probe or cooling-unit) contained within a Management Device.
2384 ///
2385 typedef struct {
2386 SMBIOS_STRUCTURE Hdr;
2387 UINT16 LowerThresholdNonCritical;
2388 UINT16 UpperThresholdNonCritical;
2389 UINT16 LowerThresholdCritical;
2390 UINT16 UpperThresholdCritical;
2391 UINT16 LowerThresholdNonRecoverable;
2392 UINT16 UpperThresholdNonRecoverable;
2393 } SMBIOS_TABLE_TYPE36;
2394
2395 ///
2396 /// Memory Channel Entry.
2397 ///
2398 typedef struct {
2399 UINT8 DeviceLoad;
2400 UINT16 DeviceHandle;
2401 } MEMORY_DEVICE;
2402
2403 ///
2404 /// Memory Channel - Channel Type.
2405 ///
2406 typedef enum {
2407 MemoryChannelTypeOther = 0x01,
2408 MemoryChannelTypeUnknown = 0x02,
2409 MemoryChannelTypeRambus = 0x03,
2410 MemoryChannelTypeSyncLink = 0x04
2411 } MEMORY_CHANNEL_TYPE;
2412
2413 ///
2414 /// Memory Channel (Type 37)
2415 ///
2416 /// The information in this structure provides the correlation between a Memory Channel
2417 /// and its associated Memory Devices. Each device presents one or more loads to the channel.
2418 /// The sum of all device loads cannot exceed the channel's defined maximum.
2419 ///
2420 typedef struct {
2421 SMBIOS_STRUCTURE Hdr;
2422 UINT8 ChannelType;
2423 UINT8 MaximumChannelLoad;
2424 UINT8 MemoryDeviceCount;
2425 MEMORY_DEVICE MemoryDevice[1];
2426 } SMBIOS_TABLE_TYPE37;
2427
2428 ///
2429 /// IPMI Device Information - BMC Interface Type
2430 ///
2431 typedef enum {
2432 IPMIDeviceInfoInterfaceTypeUnknown = 0x00,
2433 IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< The Keyboard Controller Style.
2434 IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< The Server Management Interface Chip.
2435 IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< The Block Transfer
2436 IPMIDeviceInfoInterfaceTypeSSIF = 0x04 ///< SMBus System Interface
2437 } BMC_INTERFACE_TYPE;
2438
2439 ///
2440 /// IPMI Device Information (Type 38).
2441 ///
2442 /// The information in this structure defines the attributes of an
2443 /// Intelligent Platform Management Interface (IPMI) Baseboard Management Controller (BMC).
2444 ///
2445 /// The Type 42 structure can also be used to describe a physical management controller
2446 /// host interface and one or more protocols that share that interface. If IPMI is not
2447 /// shared with other protocols, either the Type 38 or Type 42 structures can be used.
2448 /// Providing Type 38 is recommended for backward compatibility.
2449 ///
2450 typedef struct {
2451 SMBIOS_STRUCTURE Hdr;
2452 UINT8 InterfaceType; ///< The enumeration value from BMC_INTERFACE_TYPE.
2453 UINT8 IPMISpecificationRevision;
2454 UINT8 I2CSlaveAddress;
2455 UINT8 NVStorageDeviceAddress;
2456 UINT64 BaseAddress;
2457 UINT8 BaseAddressModifier_InterruptInfo;
2458 UINT8 InterruptNumber;
2459 } SMBIOS_TABLE_TYPE38;
2460
2461 ///
2462 /// System Power Supply - Power Supply Characteristics.
2463 ///
2464 typedef struct {
2465 UINT16 PowerSupplyHotReplaceable : 1;
2466 UINT16 PowerSupplyPresent : 1;
2467 UINT16 PowerSupplyUnplugged : 1;
2468 UINT16 InputVoltageRangeSwitch : 4;
2469 UINT16 PowerSupplyStatus : 3;
2470 UINT16 PowerSupplyType : 4;
2471 UINT16 Reserved : 2;
2472 } SYS_POWER_SUPPLY_CHARACTERISTICS;
2473
2474 ///
2475 /// System Power Supply (Type 39).
2476 ///
2477 /// This structure identifies attributes of a system power supply. One instance
2478 /// of this record is present for each possible power supply in a system.
2479 ///
2480 typedef struct {
2481 SMBIOS_STRUCTURE Hdr;
2482 UINT8 PowerUnitGroup;
2483 SMBIOS_TABLE_STRING Location;
2484 SMBIOS_TABLE_STRING DeviceName;
2485 SMBIOS_TABLE_STRING Manufacturer;
2486 SMBIOS_TABLE_STRING SerialNumber;
2487 SMBIOS_TABLE_STRING AssetTagNumber;
2488 SMBIOS_TABLE_STRING ModelPartNumber;
2489 SMBIOS_TABLE_STRING RevisionLevel;
2490 UINT16 MaxPowerCapacity;
2491 SYS_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
2492 UINT16 InputVoltageProbeHandle;
2493 UINT16 CoolingDeviceHandle;
2494 UINT16 InputCurrentProbeHandle;
2495 } SMBIOS_TABLE_TYPE39;
2496
2497 ///
2498 /// Additional Information Entry Format.
2499 ///
2500 typedef struct {
2501 UINT8 EntryLength;
2502 UINT16 ReferencedHandle;
2503 UINT8 ReferencedOffset;
2504 SMBIOS_TABLE_STRING EntryString;
2505 UINT8 Value[1];
2506 } ADDITIONAL_INFORMATION_ENTRY;
2507
2508 ///
2509 /// Additional Information (Type 40).
2510 ///
2511 /// This structure is intended to provide additional information for handling unspecified
2512 /// enumerated values and interim field updates in another structure.
2513 ///
2514 typedef struct {
2515 SMBIOS_STRUCTURE Hdr;
2516 UINT8 NumberOfAdditionalInformationEntries;
2517 ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1];
2518 } SMBIOS_TABLE_TYPE40;
2519
2520 ///
2521 /// Onboard Devices Extended Information - Onboard Device Types.
2522 ///
2523 typedef enum {
2524 OnBoardDeviceExtendedTypeOther = 0x01,
2525 OnBoardDeviceExtendedTypeUnknown = 0x02,
2526 OnBoardDeviceExtendedTypeVideo = 0x03,
2527 OnBoardDeviceExtendedTypeScsiController = 0x04,
2528 OnBoardDeviceExtendedTypeEthernet = 0x05,
2529 OnBoardDeviceExtendedTypeTokenRing = 0x06,
2530 OnBoardDeviceExtendedTypeSound = 0x07,
2531 OnBoardDeviceExtendedTypePATAController = 0x08,
2532 OnBoardDeviceExtendedTypeSATAController = 0x09,
2533 OnBoardDeviceExtendedTypeSASController = 0x0A,
2534 OnBoardDeviceExtendedTypeWirelessLAN = 0x0B,
2535 OnBoardDeviceExtendedTypeBluetooth = 0x0C,
2536 OnBoardDeviceExtendedTypeWWAN = 0x0D,
2537 OnBoardDeviceExtendedTypeeMMC = 0x0E,
2538 OnBoardDeviceExtendedTypeNvme = 0x0F,
2539 OnBoardDeviceExtendedTypeUfc = 0x10
2540 } ONBOARD_DEVICE_EXTENDED_INFO_TYPE;
2541
2542 ///
2543 /// Onboard Devices Extended Information (Type 41).
2544 ///
2545 /// The information in this structure defines the attributes of devices that
2546 /// are onboard (soldered onto) a system element, usually the baseboard.
2547 /// In general, an entry in this table implies that the BIOS has some level of
2548 /// control over the enabling of the associated device for use by the system.
2549 ///
2550 typedef struct {
2551 SMBIOS_STRUCTURE Hdr;
2552 SMBIOS_TABLE_STRING ReferenceDesignation;
2553 UINT8 DeviceType; ///< The enumeration value from ONBOARD_DEVICE_EXTENDED_INFO_TYPE
2554 UINT8 DeviceTypeInstance;
2555 UINT16 SegmentGroupNum;
2556 UINT8 BusNum;
2557 UINT8 DevFuncNum;
2558 } SMBIOS_TABLE_TYPE41;
2559
2560 ///
2561 /// Management Controller Host Interface - Protocol Record Data Format.
2562 ///
2563 typedef struct {
2564 UINT8 ProtocolType;
2565 UINT8 ProtocolTypeDataLen;
2566 UINT8 ProtocolTypeData[1];
2567 } MC_HOST_INTERFACE_PROTOCOL_RECORD;
2568
2569 ///
2570 /// Management Controller Host Interface - Interface Types.
2571 /// 00h - 3Fh: MCTP Host Interfaces
2572 ///
2573 typedef enum {
2574 MCHostInterfaceTypeNetworkHostInterface = 0x40,
2575 MCHostInterfaceTypeOemDefined = 0xF0
2576 } MC_HOST_INTERFACE_TYPE;
2577
2578 ///
2579 /// Management Controller Host Interface - Protocol Types.
2580 ///
2581 typedef enum {
2582 MCHostInterfaceProtocolTypeIPMI = 0x02,
2583 MCHostInterfaceProtocolTypeMCTP = 0x03,
2584 MCHostInterfaceProtocolTypeRedfishOverIP = 0x04,
2585 MCHostInterfaceProtocolTypeOemDefined = 0xF0
2586 } MC_HOST_INTERFACE_PROTOCOL_TYPE;
2587
2588 ///
2589 /// Management Controller Host Interface (Type 42).
2590 ///
2591 /// The information in this structure defines the attributes of a Management
2592 /// Controller Host Interface that is not discoverable by "Plug and Play" mechanisms.
2593 ///
2594 /// Type 42 should be used for management controller host interfaces that use protocols
2595 /// other than IPMI or that use multiple protocols on a single host interface type.
2596 ///
2597 /// This structure should also be provided if IPMI is shared with other protocols
2598 /// over the same interface hardware. If IPMI is not shared with other protocols,
2599 /// either the Type 38 or Type 42 structures can be used. Providing Type 38 is
2600 /// recommended for backward compatibility. The structures are not required to
2601 /// be mutually exclusive. Type 38 and Type 42 structures may be implemented
2602 /// simultaneously to provide backward compatibility with IPMI applications or drivers
2603 /// that do not yet recognize the Type 42 structure.
2604 ///
2605 typedef struct {
2606 SMBIOS_STRUCTURE Hdr;
2607 UINT8 InterfaceType; ///< The enumeration value from MC_HOST_INTERFACE_TYPE
2608 UINT8 InterfaceTypeSpecificDataLength;
2609 UINT8 InterfaceTypeSpecificData[4]; ///< This field has a minimum of four bytes
2610 } SMBIOS_TABLE_TYPE42;
2611
2612 ///
2613 /// Processor Specific Block - Processor Architecture Type
2614 ///
2615 typedef enum {
2616 ProcessorSpecificBlockArchTypeReserved = 0x00,
2617 ProcessorSpecificBlockArchTypeIa32 = 0x01,
2618 ProcessorSpecificBlockArchTypeX64 = 0x02,
2619 ProcessorSpecificBlockArchTypeItanium = 0x03,
2620 ProcessorSpecificBlockArchTypeAarch32 = 0x04,
2621 ProcessorSpecificBlockArchTypeAarch64 = 0x05,
2622 ProcessorSpecificBlockArchTypeRiscVRV32 = 0x06,
2623 ProcessorSpecificBlockArchTypeRiscVRV64 = 0x07,
2624 ProcessorSpecificBlockArchTypeRiscVRV128 = 0x08
2625 } PROCESSOR_SPECIFIC_BLOCK_ARCH_TYPE;
2626
2627 ///
2628 /// Processor Specific Block is the standard container of processor-specific data.
2629 ///
2630 typedef struct {
2631 UINT8 Length;
2632 UINT8 ProcessorArchType;
2633 ///
2634 /// Below followed by Processor-specific data
2635 ///
2636 ///
2637 } PROCESSOR_SPECIFIC_BLOCK;
2638
2639 ///
2640 /// Processor Additional Information(Type 44).
2641 ///
2642 /// The information in this structure defines the processor additional information in case
2643 /// SMBIOS type 4 is not sufficient to describe processor characteristics.
2644 /// The SMBIOS type 44 structure has a reference handle field to link back to the related
2645 /// SMBIOS type 4 structure. There may be multiple SMBIOS type 44 structures linked to the
2646 /// same SMBIOS type 4 structure. For example, when cores are not identical in a processor,
2647 /// SMBIOS type 44 structures describe different core-specific information.
2648 ///
2649 /// SMBIOS type 44 defines the standard header for the processor-specific block, while the
2650 /// contents of processor-specific data are maintained by processor
2651 /// architecture workgroups or vendors in separate documents.
2652 ///
2653 typedef struct {
2654 SMBIOS_STRUCTURE Hdr;
2655 SMBIOS_HANDLE RefHandle; ///< This field refer to associated SMBIOS type 4
2656 ///
2657 /// Below followed by Processor-specific block
2658 ///
2659 PROCESSOR_SPECIFIC_BLOCK ProcessorSpecificBlock;
2660 } SMBIOS_TABLE_TYPE44;
2661
2662 ///
2663 /// TPM Device (Type 43).
2664 ///
2665 typedef struct {
2666 SMBIOS_STRUCTURE Hdr;
2667 UINT8 VendorID[4];
2668 UINT8 MajorSpecVersion;
2669 UINT8 MinorSpecVersion;
2670 UINT32 FirmwareVersion1;
2671 UINT32 FirmwareVersion2;
2672 SMBIOS_TABLE_STRING Description;
2673 UINT64 Characteristics;
2674 UINT32 OemDefined;
2675 } SMBIOS_TABLE_TYPE43;
2676
2677 ///
2678 /// Firmware Inventory Version Format Type (Type 45).
2679 ///
2680 typedef enum {
2681 VersionFormatTypeFreeForm = 0x00,
2682 VersionFormatTypeMajorMinor = 0x01,
2683 VersionFormatType32BitHex = 0x02,
2684 VersionFormatType64BitHex = 0x03,
2685 VersionFormatTypeReserved = 0x04, /// 0x04 - 0x7F are reserved
2686 VersionFormatTypeOem = 0x80 /// 0x80 - 0xFF are BIOS Vendor/OEM-specific
2687 } FIRMWARE_INVENTORY_VERSION_FORMAT_TYPE;
2688
2689 ///
2690 /// Firmware Inventory Firmware Id Format Type (Type 45).
2691 ///
2692 typedef enum {
2693 FirmwareIdFormatTypeFreeForm = 0x00,
2694 FirmwareIdFormatTypeUuid = 0x01,
2695 FirmwareIdFormatTypeReserved = 0x04, /// 0x04 - 0x7F are reserved
2696 InventoryFirmwareIdFormatTypeOem = 0x80 /// 0x80 - 0xFF are BIOS Vendor/OEM-specific
2697 } FIRMWARE_INVENTORY_FIRMWARE_ID_FORMAT_TYPE;
2698
2699 ///
2700 /// Firmware Inventory Firmware Characteristics (Type 45).
2701 ///
2702 typedef enum {
2703 CharacteristicsUpdatable = 0x00,
2704 CharacteristicsWriteProtected = 0x01,
2705 CharacteristicsReserved = 0x02 /// 0x02 - 0x0F are reserved
2706 } FIRMWARE_INVENTORY_CHARACTERISTICS;
2707
2708 ///
2709 /// Firmware Inventory State Information (Type 45).
2710 ///
2711 typedef enum {
2712 FirmwareInventoryStateOther = 0x01,
2713 FirmwareInventoryStateUnknown = 0x02,
2714 FirmwareInventoryStateDisabled = 0x03,
2715 FirmwareInventoryStateEnabled = 0x04,
2716 FirmwareInventoryStateAbsent = 0x05,
2717 FirmwareInventoryStateStandbyOffline = 0x06,
2718 FirmwareInventoryStateStandbySpare = 0x07,
2719 FirmwareInventoryStateUnavailableOffline = 0x08,
2720 } FIRMWARE_INVENTORY_STATE;
2721
2722 ///
2723 /// Firmware Inventory Information (Type 45)
2724 ///
2725 /// The information in this structure defines an inventory of firmware
2726 /// components in the system. This can include firmware components such as
2727 /// BIOS, BMC, as well as firmware for other devices in the system.
2728 /// The information can be used by software to display the firmware inventory
2729 /// in a uniform manner. It can also be used by a management controller,
2730 /// such as a BMC, for remote system management.
2731 /// This structure is not intended to replace other standard programmatic
2732 /// interfaces for firmware updates.
2733 /// One Type 45 structure is provided for each firmware component.
2734 ///
2735 typedef struct {
2736 SMBIOS_STRUCTURE Hdr;
2737 SMBIOS_HANDLE RefHandle;
2738
2739 UINT8 FirmwareComponentName;
2740 UINT8 FirmwareVersion;
2741 UINT8 FirmwareVersionFormat; ///< The enumeration value from FIRMWARE_INVENTORY_VERSION_FORMAT_TYPE
2742 UINT8 FirmwareId;
2743 UINT8 FirmwareIdFormat;
2744 UINT8 ReleaseDate;
2745 UINT8 Manufacturer;
2746 UINT8 LowestSupportedVersion;
2747 UINT64 ImageSize;
2748 UINT32 Characteristics;
2749 UINT8 State;
2750 UINT8 AssociatedComponentCount;
2751 ///
2752 /// zero or n-number of handles depends on AssociatedComponentCount
2753 /// handles are of type SMBIOS_HANDLE
2754 ///
2755 } SMBIOS_TABLE_TYPE45;
2756
2757 ///
2758 /// String Property IDs (Type 46).
2759 ///
2760 typedef enum {
2761 StringPropertyIdNone = 0x0000,
2762 StringPropertyIdDevicePath = 0x0001,
2763 StringPropertyIdReserved = 0x0002, /// Reserved 0x0002 - 0x7FFF
2764 StringPropertyIdBiosVendor = 0x8000, /// BIOS vendor 0x8000 - 0xBFFF
2765 StringPropertyIdOem = 0xC000 /// OEM range 0xC000 - 0xFFFF
2766 } STRING_PROPERTY_ID;
2767
2768 ///
2769 /// This structure defines a string property for another structure.
2770 /// This allows adding string properties that are common to several structures
2771 /// without having to modify the definitions of these structures.
2772 /// Multiple type 46 structures can add string properties to the same
2773 /// parent structure.
2774 ///
2775 typedef struct {
2776 SMBIOS_STRUCTURE Hdr;
2777 SMBIOS_HANDLE RefHandle;
2778 UINT16 StringPropertyId;
2779 UINT8 StringPropertyValue;
2780 SMBIOS_HANDLE ParentHandle;
2781 } SMBIOS_TABLE_TYPE46;
2782
2783 ///
2784 /// Inactive (Type 126)
2785 ///
2786 typedef struct {
2787 SMBIOS_STRUCTURE Hdr;
2788 } SMBIOS_TABLE_TYPE126;
2789
2790 ///
2791 /// End-of-Table (Type 127)
2792 ///
2793 typedef struct {
2794 SMBIOS_STRUCTURE Hdr;
2795 } SMBIOS_TABLE_TYPE127;
2796
2797 ///
2798 /// Union of all the possible SMBIOS record types.
2799 ///
2800 typedef union {
2801 SMBIOS_STRUCTURE *Hdr;
2802 SMBIOS_TABLE_TYPE0 *Type0;
2803 SMBIOS_TABLE_TYPE1 *Type1;
2804 SMBIOS_TABLE_TYPE2 *Type2;
2805 SMBIOS_TABLE_TYPE3 *Type3;
2806 SMBIOS_TABLE_TYPE4 *Type4;
2807 SMBIOS_TABLE_TYPE5 *Type5;
2808 SMBIOS_TABLE_TYPE6 *Type6;
2809 SMBIOS_TABLE_TYPE7 *Type7;
2810 SMBIOS_TABLE_TYPE8 *Type8;
2811 SMBIOS_TABLE_TYPE9 *Type9;
2812 SMBIOS_TABLE_TYPE10 *Type10;
2813 SMBIOS_TABLE_TYPE11 *Type11;
2814 SMBIOS_TABLE_TYPE12 *Type12;
2815 SMBIOS_TABLE_TYPE13 *Type13;
2816 SMBIOS_TABLE_TYPE14 *Type14;
2817 SMBIOS_TABLE_TYPE15 *Type15;
2818 SMBIOS_TABLE_TYPE16 *Type16;
2819 SMBIOS_TABLE_TYPE17 *Type17;
2820 SMBIOS_TABLE_TYPE18 *Type18;
2821 SMBIOS_TABLE_TYPE19 *Type19;
2822 SMBIOS_TABLE_TYPE20 *Type20;
2823 SMBIOS_TABLE_TYPE21 *Type21;
2824 SMBIOS_TABLE_TYPE22 *Type22;
2825 SMBIOS_TABLE_TYPE23 *Type23;
2826 SMBIOS_TABLE_TYPE24 *Type24;
2827 SMBIOS_TABLE_TYPE25 *Type25;
2828 SMBIOS_TABLE_TYPE26 *Type26;
2829 SMBIOS_TABLE_TYPE27 *Type27;
2830 SMBIOS_TABLE_TYPE28 *Type28;
2831 SMBIOS_TABLE_TYPE29 *Type29;
2832 SMBIOS_TABLE_TYPE30 *Type30;
2833 SMBIOS_TABLE_TYPE31 *Type31;
2834 SMBIOS_TABLE_TYPE32 *Type32;
2835 SMBIOS_TABLE_TYPE33 *Type33;
2836 SMBIOS_TABLE_TYPE34 *Type34;
2837 SMBIOS_TABLE_TYPE35 *Type35;
2838 SMBIOS_TABLE_TYPE36 *Type36;
2839 SMBIOS_TABLE_TYPE37 *Type37;
2840 SMBIOS_TABLE_TYPE38 *Type38;
2841 SMBIOS_TABLE_TYPE39 *Type39;
2842 SMBIOS_TABLE_TYPE40 *Type40;
2843 SMBIOS_TABLE_TYPE41 *Type41;
2844 SMBIOS_TABLE_TYPE42 *Type42;
2845 SMBIOS_TABLE_TYPE43 *Type43;
2846 SMBIOS_TABLE_TYPE44 *Type44;
2847 SMBIOS_TABLE_TYPE45 *Type45;
2848 SMBIOS_TABLE_TYPE46 *Type46;
2849 SMBIOS_TABLE_TYPE126 *Type126;
2850 SMBIOS_TABLE_TYPE127 *Type127;
2851 UINT8 *Raw;
2852 } SMBIOS_STRUCTURE_POINTER;
2853
2854 #pragma pack()
2855
2856 #endif