VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/MdePkg/Include/IndustryStandard/SmBios.h@ 108793

Last change on this file since 108793 was 105670, checked in by vboxsync, 8 months ago

Devices/EFI/FirmwareNew: Merge edk2-stable-202405 and make it build on aarch64, bugref:4643

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

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette