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