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