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