X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FInclude%2FIndustryStandard%2FSmBios.h;h=828ea6d753c22b6f3a12ea2321bfc6285a6f9519;hb=2f88bd3a1296c522317f1c21377876de63de5be7;hp=91e85eeee1d7fc1879d5b6c27e6d29c10c94fede;hpb=f9ed6c93af4d21052c22e8c032cb9c426f75b50c;p=mirror_edk2.git
diff --git a/MdePkg/Include/IndustryStandard/SmBios.h b/MdePkg/Include/IndustryStandard/SmBios.h
index 91e85eeee1..828ea6d753 100644
--- a/MdePkg/Include/IndustryStandard/SmBios.h
+++ b/MdePkg/Include/IndustryStandard/SmBios.h
@@ -1,14 +1,10 @@
/** @file
- Industry Standard Definitions of SMBIOS Table Specification v2.7.1
+ Industry Standard Definitions of SMBIOS Table Specification v3.3.0.
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.
+(C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP
+(C) Copyright 2015 - 2019 Hewlett Packard Enterprise Development LP
+SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -20,7 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
/// For v2.1 and later, handle values in the range 0FF00h to 0FFFFh are reserved for
/// use by this specification.
///
-#define SMBIOS_HANDLE_RESERVED_BEGIN 0xFF00
+#define SMBIOS_HANDLE_RESERVED_BEGIN 0xFF00
///
/// Reference SMBIOS 2.7, chapter 6.1.2.
@@ -28,7 +24,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
/// EFI_SMBIOS_PROTOCOL.Add() function to mean "assign an unused handle number automatically."
/// This number is not used for any other purpose by the SMBIOS specification.
///
-#define SMBIOS_HANDLE_PI_RESERVED 0xFFFE
+#define SMBIOS_HANDLE_PI_RESERVED 0xFFFE
///
/// Reference SMBIOS 2.6, chapter 3.1.3.
@@ -36,53 +32,156 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
/// Reference SMBIOS 2.7, chapter 6.1.3.
/// It will have no limit on the length of each individual text string.
///
-#define SMBIOS_STRING_MAX_LENGTH 64
+#define SMBIOS_STRING_MAX_LENGTH 64
+
+//
+// The length of the entire structure table (including all strings) must be reported
+// in the Structure Table Length field of the SMBIOS Structure Table Entry Point,
+// which is a WORD field limited to 65,535 bytes.
+//
+#define SMBIOS_TABLE_MAX_LENGTH 0xFFFF
+
+//
+// For SMBIOS 3.0, Structure table maximum size in Entry Point structure is DWORD field limited to 0xFFFFFFFF bytes.
+//
+#define SMBIOS_3_0_TABLE_MAX_LENGTH 0xFFFFFFFF
+
+//
+// SMBIOS type macros which is according to SMBIOS 3.3.0 specification.
+//
+#define SMBIOS_TYPE_BIOS_INFORMATION 0
+#define SMBIOS_TYPE_SYSTEM_INFORMATION 1
+#define SMBIOS_TYPE_BASEBOARD_INFORMATION 2
+#define SMBIOS_TYPE_SYSTEM_ENCLOSURE 3
+#define SMBIOS_TYPE_PROCESSOR_INFORMATION 4
+#define SMBIOS_TYPE_MEMORY_CONTROLLER_INFORMATION 5
+#define SMBIOS_TYPE_MEMORY_MODULE_INFORMATON 6
+#define SMBIOS_TYPE_CACHE_INFORMATION 7
+#define SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION 8
+#define SMBIOS_TYPE_SYSTEM_SLOTS 9
+#define SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION 10
+#define SMBIOS_TYPE_OEM_STRINGS 11
+#define SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS 12
+#define SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION 13
+#define SMBIOS_TYPE_GROUP_ASSOCIATIONS 14
+#define SMBIOS_TYPE_SYSTEM_EVENT_LOG 15
+#define SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY 16
+#define SMBIOS_TYPE_MEMORY_DEVICE 17
+#define SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION 18
+#define SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS 19
+#define SMBIOS_TYPE_MEMORY_DEVICE_MAPPED_ADDRESS 20
+#define SMBIOS_TYPE_BUILT_IN_POINTING_DEVICE 21
+#define SMBIOS_TYPE_PORTABLE_BATTERY 22
+#define SMBIOS_TYPE_SYSTEM_RESET 23
+#define SMBIOS_TYPE_HARDWARE_SECURITY 24
+#define SMBIOS_TYPE_SYSTEM_POWER_CONTROLS 25
+#define SMBIOS_TYPE_VOLTAGE_PROBE 26
+#define SMBIOS_TYPE_COOLING_DEVICE 27
+#define SMBIOS_TYPE_TEMPERATURE_PROBE 28
+#define SMBIOS_TYPE_ELECTRICAL_CURRENT_PROBE 29
+#define SMBIOS_TYPE_OUT_OF_BAND_REMOTE_ACCESS 30
+#define SMBIOS_TYPE_BOOT_INTEGRITY_SERVICE 31
+#define SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION 32
+#define SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION 33
+#define SMBIOS_TYPE_MANAGEMENT_DEVICE 34
+#define SMBIOS_TYPE_MANAGEMENT_DEVICE_COMPONENT 35
+#define SMBIOS_TYPE_MANAGEMENT_DEVICE_THRESHOLD_DATA 36
+#define SMBIOS_TYPE_MEMORY_CHANNEL 37
+#define SMBIOS_TYPE_IPMI_DEVICE_INFORMATION 38
+#define SMBIOS_TYPE_SYSTEM_POWER_SUPPLY 39
+#define SMBIOS_TYPE_ADDITIONAL_INFORMATION 40
+#define SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION 41
+#define SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE 42
+#define SMBIOS_TYPE_TPM_DEVICE 43
+#define SMBIOS_TYPE_PROCESSOR_ADDITIONAL_INFORMATION 44
///
/// Inactive type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.43.
-/// Upper-level software that interprets the SMBIOS structure-table should bypass an
+/// Upper-level software that interprets the SMBIOS structure-table should bypass an
/// Inactive structure just like a structure type that the software does not recognize.
///
-#define SMBIOS_TYPE_INACTIVE 0x007E
+#define SMBIOS_TYPE_INACTIVE 0x007E
///
/// End-of-table type is added from SMBIOS 2.2. Reference SMBIOS 2.6, chapter 3.3.44.
/// The end-of-table indicator is used in the last physical structure in a table
///
-#define SMBIOS_TYPE_END_OF_TABLE 0x007F
+#define SMBIOS_TYPE_END_OF_TABLE 0x007F
+
+#define SMBIOS_OEM_BEGIN 128
+#define SMBIOS_OEM_END 255
+
+///
+/// Types 0 through 127 (7Fh) are reserved for and defined by this
+/// specification. Types 128 through 256 (80h to FFh) are available for system- and OEM-specific information.
+///
+typedef UINT8 SMBIOS_TYPE;
+
+///
+/// Specifies the structure's handle, a unique 16-bit number in the range 0 to 0FFFEh (for version
+/// 2.0) or 0 to 0FEFFh (for version 2.1 and later). The handle can be used with the Get SMBIOS
+/// Structure function to retrieve a specific structure; the handle numbers are not required to be
+/// contiguous. For v2.1 and later, handle values in the range 0FF00h to 0FFFFh are reserved for
+/// use by this specification.
+/// If the system configuration changes, a previously assigned handle might no longer exist.
+/// However once a handle has been assigned by the BIOS, the BIOS cannot re-assign that handle
+/// number to another structure.
+///
+typedef UINT16 SMBIOS_HANDLE;
///
/// Smbios Table Entry Point Structure.
///
#pragma pack(1)
typedef struct {
- UINT8 AnchorString[4];
- UINT8 EntryPointStructureChecksum;
- UINT8 EntryPointLength;
- UINT8 MajorVersion;
- UINT8 MinorVersion;
- UINT16 MaxStructureSize;
- UINT8 EntryPointRevision;
- UINT8 FormattedArea[5];
- UINT8 IntermediateAnchorString[5];
- UINT8 IntermediateChecksum;
- UINT16 TableLength;
- UINT32 TableAddress;
- UINT16 NumberOfSmbiosStructures;
- UINT8 SmbiosBcdRevision;
+ UINT8 AnchorString[4];
+ UINT8 EntryPointStructureChecksum;
+ UINT8 EntryPointLength;
+ UINT8 MajorVersion;
+ UINT8 MinorVersion;
+ UINT16 MaxStructureSize;
+ UINT8 EntryPointRevision;
+ UINT8 FormattedArea[5];
+ UINT8 IntermediateAnchorString[5];
+ UINT8 IntermediateChecksum;
+ UINT16 TableLength;
+ UINT32 TableAddress;
+ UINT16 NumberOfSmbiosStructures;
+ UINT8 SmbiosBcdRevision;
} SMBIOS_TABLE_ENTRY_POINT;
+typedef struct {
+ UINT8 AnchorString[5];
+ UINT8 EntryPointStructureChecksum;
+ UINT8 EntryPointLength;
+ UINT8 MajorVersion;
+ UINT8 MinorVersion;
+ UINT8 DocRev;
+ UINT8 EntryPointRevision;
+ UINT8 Reserved;
+ UINT32 TableMaximumSize;
+ UINT64 TableAddress;
+} SMBIOS_TABLE_3_0_ENTRY_POINT;
+
///
/// The Smbios structure header.
///
typedef struct {
- UINT8 Type;
- UINT8 Length;
- UINT16 Handle;
+ SMBIOS_TYPE Type;
+ UINT8 Length;
+ SMBIOS_HANDLE Handle;
} SMBIOS_STRUCTURE;
///
-/// String Number for a Null terminated string, 00h stands for no string available.
+/// Text strings associated with a given SMBIOS structure are returned in the dmiStrucBuffer, appended directly after
+/// the formatted portion of the structure. This method of returning string information eliminates the need for
+/// application software to deal with pointers embedded in the SMBIOS structure. Each string is terminated with a null
+/// (00h) BYTE and the set of strings is terminated with an additional null (00h) BYTE. When the formatted portion of
+/// a SMBIOS structure references a string, it does so by specifying a non-zero string number within the structure's
+/// string-set. For example, if a string field contains 02h, it references the second string following the formatted portion
+/// of the SMBIOS structure. If a string field references no string, a null (0) is placed in that string field. If the
+/// formatted portion of the structure contains string-reference fields and all the string fields are set to 0 (no string
+/// references), the formatted section of the structure is followed by two null (00h) BYTES.
///
typedef UINT8 SMBIOS_TABLE_STRING;
@@ -91,39 +190,39 @@ typedef UINT8 SMBIOS_TABLE_STRING;
/// Defines which functions the BIOS supports. PCI, PCMCIA, Flash, etc.
///
typedef struct {
- UINT32 Reserved :2; ///< Bits 0-1.
- UINT32 Unknown :1;
- UINT32 BiosCharacteristicsNotSupported :1;
- UINT32 IsaIsSupported :1;
- UINT32 McaIsSupported :1;
- UINT32 EisaIsSupported :1;
- UINT32 PciIsSupported :1;
- UINT32 PcmciaIsSupported :1;
- UINT32 PlugAndPlayIsSupported :1;
- UINT32 ApmIsSupported :1;
- UINT32 BiosIsUpgradable :1;
- UINT32 BiosShadowingAllowed :1;
- UINT32 VlVesaIsSupported :1;
- UINT32 EscdSupportIsAvailable :1;
- UINT32 BootFromCdIsSupported :1;
- UINT32 SelectableBootIsSupported :1;
- UINT32 RomBiosIsSocketed :1;
- UINT32 BootFromPcmciaIsSupported :1;
- UINT32 EDDSpecificationIsSupported :1;
- UINT32 JapaneseNecFloppyIsSupported :1;
- UINT32 JapaneseToshibaFloppyIsSupported :1;
- UINT32 Floppy525_360IsSupported :1;
- UINT32 Floppy525_12IsSupported :1;
- UINT32 Floppy35_720IsSupported :1;
- UINT32 Floppy35_288IsSupported :1;
- UINT32 PrintScreenIsSupported :1;
- UINT32 Keyboard8042IsSupported :1;
- UINT32 SerialIsSupported :1;
- UINT32 PrinterIsSupported :1;
- UINT32 CgaMonoIsSupported :1;
- UINT32 NecPc98 :1;
- UINT32 ReservedForVendor :32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor
- ///< and bits 48-63 reserved for System Vendor.
+ UINT32 Reserved : 2; ///< Bits 0-1.
+ UINT32 Unknown : 1;
+ UINT32 BiosCharacteristicsNotSupported : 1;
+ UINT32 IsaIsSupported : 1;
+ UINT32 McaIsSupported : 1;
+ UINT32 EisaIsSupported : 1;
+ UINT32 PciIsSupported : 1;
+ UINT32 PcmciaIsSupported : 1;
+ UINT32 PlugAndPlayIsSupported : 1;
+ UINT32 ApmIsSupported : 1;
+ UINT32 BiosIsUpgradable : 1;
+ UINT32 BiosShadowingAllowed : 1;
+ UINT32 VlVesaIsSupported : 1;
+ UINT32 EscdSupportIsAvailable : 1;
+ UINT32 BootFromCdIsSupported : 1;
+ UINT32 SelectableBootIsSupported : 1;
+ UINT32 RomBiosIsSocketed : 1;
+ UINT32 BootFromPcmciaIsSupported : 1;
+ UINT32 EDDSpecificationIsSupported : 1;
+ UINT32 JapaneseNecFloppyIsSupported : 1;
+ UINT32 JapaneseToshibaFloppyIsSupported : 1;
+ UINT32 Floppy525_360IsSupported : 1;
+ UINT32 Floppy525_12IsSupported : 1;
+ UINT32 Floppy35_720IsSupported : 1;
+ UINT32 Floppy35_288IsSupported : 1;
+ UINT32 PrintScreenIsSupported : 1;
+ UINT32 Keyboard8042IsSupported : 1;
+ UINT32 SerialIsSupported : 1;
+ UINT32 PrinterIsSupported : 1;
+ UINT32 CgaMonoIsSupported : 1;
+ UINT32 NecPc98 : 1;
+ UINT32 ReservedForVendor : 32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor
+ ///< and bits 48-63 reserved for System Vendor.
} MISC_BIOS_CHARACTERISTICS;
///
@@ -132,14 +231,14 @@ typedef struct {
/// within the BIOS Information structure.
///
typedef struct {
- UINT8 AcpiIsSupported :1;
- UINT8 UsbLegacyIsSupported :1;
- UINT8 AgpIsSupported :1;
- UINT8 I2OBootIsSupported :1;
- UINT8 Ls120BootIsSupported :1;
- UINT8 AtapiZipDriveBootIsSupported :1;
- UINT8 Boot1394IsSupported :1;
- UINT8 SmartBatteryIsSupported :1;
+ UINT8 AcpiIsSupported : 1;
+ UINT8 UsbLegacyIsSupported : 1;
+ UINT8 AgpIsSupported : 1;
+ UINT8 I2OBootIsSupported : 1;
+ UINT8 Ls120BootIsSupported : 1;
+ UINT8 AtapiZipDriveBootIsSupported : 1;
+ UINT8 Boot1394IsSupported : 1;
+ UINT8 SmartBatteryIsSupported : 1;
} MBCE_BIOS_RESERVED;
///
@@ -148,178 +247,197 @@ typedef struct {
/// within the BIOS Information structure.
///
typedef struct {
- UINT8 BiosBootSpecIsSupported :1;
- UINT8 FunctionKeyNetworkBootIsSupported :1;
- UINT8 TargetContentDistributionEnabled :1;
- UINT8 UefiSpecificationSupported :1;
- UINT8 VirtualMachineSupported :1;
- UINT8 ExtensionByte2Reserved :3;
+ UINT8 BiosBootSpecIsSupported : 1;
+ UINT8 FunctionKeyNetworkBootIsSupported : 1;
+ UINT8 TargetContentDistributionEnabled : 1;
+ UINT8 UefiSpecificationSupported : 1;
+ UINT8 VirtualMachineSupported : 1;
+ UINT8 ExtensionByte2Reserved : 3;
} MBCE_SYSTEM_RESERVED;
///
/// BIOS Characteristics Extension Bytes.
///
typedef struct {
- MBCE_BIOS_RESERVED BiosReserved;
- MBCE_SYSTEM_RESERVED SystemReserved;
+ MBCE_BIOS_RESERVED BiosReserved;
+ MBCE_SYSTEM_RESERVED SystemReserved;
} MISC_BIOS_CHARACTERISTICS_EXTENSION;
+///
+/// Extended BIOS ROM size.
+///
+typedef struct {
+ UINT16 Size : 14;
+ UINT16 Unit : 2;
+} EXTENDED_BIOS_ROM_SIZE;
+
///
/// BIOS Information (Type 0).
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Vendor;
- SMBIOS_TABLE_STRING BiosVersion;
- UINT16 BiosSegment;
- SMBIOS_TABLE_STRING BiosReleaseDate;
- UINT8 BiosSize;
- MISC_BIOS_CHARACTERISTICS BiosCharacteristics;
- UINT8 BIOSCharacteristicsExtensionBytes[2];
- UINT8 SystemBiosMajorRelease;
- UINT8 SystemBiosMinorRelease;
- UINT8 EmbeddedControllerFirmwareMajorRelease;
- UINT8 EmbeddedControllerFirmwareMinorRelease;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Vendor;
+ SMBIOS_TABLE_STRING BiosVersion;
+ UINT16 BiosSegment;
+ SMBIOS_TABLE_STRING BiosReleaseDate;
+ UINT8 BiosSize;
+ MISC_BIOS_CHARACTERISTICS BiosCharacteristics;
+ UINT8 BIOSCharacteristicsExtensionBytes[2];
+ UINT8 SystemBiosMajorRelease;
+ UINT8 SystemBiosMinorRelease;
+ UINT8 EmbeddedControllerFirmwareMajorRelease;
+ UINT8 EmbeddedControllerFirmwareMinorRelease;
+ //
+ // Add for smbios 3.1.0
+ //
+ EXTENDED_BIOS_ROM_SIZE ExtendedBiosSize;
} SMBIOS_TABLE_TYPE0;
///
/// System Wake-up Type.
///
-typedef enum {
- SystemWakeupTypeReserved = 0x00,
- SystemWakeupTypeOther = 0x01,
- SystemWakeupTypeUnknown = 0x02,
- SystemWakeupTypeApmTimer = 0x03,
- SystemWakeupTypeModemRing = 0x04,
- SystemWakeupTypeLanRemote = 0x05,
- SystemWakeupTypePowerSwitch = 0x06,
- SystemWakeupTypePciPme = 0x07,
- SystemWakeupTypeAcPowerRestored = 0x08
+typedef enum {
+ SystemWakeupTypeReserved = 0x00,
+ SystemWakeupTypeOther = 0x01,
+ SystemWakeupTypeUnknown = 0x02,
+ SystemWakeupTypeApmTimer = 0x03,
+ SystemWakeupTypeModemRing = 0x04,
+ SystemWakeupTypeLanRemote = 0x05,
+ SystemWakeupTypePowerSwitch = 0x06,
+ SystemWakeupTypePciPme = 0x07,
+ SystemWakeupTypeAcPowerRestored = 0x08
} MISC_SYSTEM_WAKEUP_TYPE;
///
/// System Information (Type 1).
-///
-/// The information in this structure defines attributes of the overall system and is
+///
+/// The information in this structure defines attributes of the overall system and is
/// intended to be associated with the Component ID group of the system's MIF.
-/// An SMBIOS implementation is associated with a single system instance and contains
+/// An SMBIOS implementation is associated with a single system instance and contains
/// one and only one System Information (Type 1) structure.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Manufacturer;
- SMBIOS_TABLE_STRING ProductName;
- SMBIOS_TABLE_STRING Version;
- SMBIOS_TABLE_STRING SerialNumber;
- GUID Uuid;
- UINT8 WakeUpType; ///< The enumeration value from MISC_SYSTEM_WAKEUP_TYPE.
- SMBIOS_TABLE_STRING SKUNumber;
- SMBIOS_TABLE_STRING Family;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Manufacturer;
+ SMBIOS_TABLE_STRING ProductName;
+ SMBIOS_TABLE_STRING Version;
+ SMBIOS_TABLE_STRING SerialNumber;
+ GUID Uuid;
+ UINT8 WakeUpType; ///< The enumeration value from MISC_SYSTEM_WAKEUP_TYPE.
+ SMBIOS_TABLE_STRING SKUNumber;
+ SMBIOS_TABLE_STRING Family;
} SMBIOS_TABLE_TYPE1;
///
-/// Base Board - Feature Flags.
+/// Base Board - Feature Flags.
///
typedef struct {
- UINT8 Motherboard :1;
- UINT8 RequiresDaughterCard :1;
- UINT8 Removable :1;
- UINT8 Replaceable :1;
- UINT8 HotSwappable :1;
- UINT8 Reserved :3;
+ UINT8 Motherboard : 1;
+ UINT8 RequiresDaughterCard : 1;
+ UINT8 Removable : 1;
+ UINT8 Replaceable : 1;
+ UINT8 HotSwappable : 1;
+ UINT8 Reserved : 3;
} BASE_BOARD_FEATURE_FLAGS;
///
/// Base Board - Board Type.
///
-typedef enum {
- BaseBoardTypeUnknown = 0x1,
- BaseBoardTypeOther = 0x2,
- BaseBoardTypeServerBlade = 0x3,
- BaseBoardTypeConnectivitySwitch = 0x4,
- BaseBoardTypeSystemManagementModule = 0x5,
- BaseBoardTypeProcessorModule = 0x6,
- BaseBoardTypeIOModule = 0x7,
- BaseBoardTypeMemoryModule = 0x8,
- BaseBoardTypeDaughterBoard = 0x9,
- BaseBoardTypeMotherBoard = 0xA,
- BaseBoardTypeProcessorMemoryModule = 0xB,
- BaseBoardTypeProcessorIOModule = 0xC,
- BaseBoardTypeInterconnectBoard = 0xD
+typedef enum {
+ BaseBoardTypeUnknown = 0x1,
+ BaseBoardTypeOther = 0x2,
+ BaseBoardTypeServerBlade = 0x3,
+ BaseBoardTypeConnectivitySwitch = 0x4,
+ BaseBoardTypeSystemManagementModule = 0x5,
+ BaseBoardTypeProcessorModule = 0x6,
+ BaseBoardTypeIOModule = 0x7,
+ BaseBoardTypeMemoryModule = 0x8,
+ BaseBoardTypeDaughterBoard = 0x9,
+ BaseBoardTypeMotherBoard = 0xA,
+ BaseBoardTypeProcessorMemoryModule = 0xB,
+ BaseBoardTypeProcessorIOModule = 0xC,
+ BaseBoardTypeInterconnectBoard = 0xD
} BASE_BOARD_TYPE;
///
/// Base Board (or Module) Information (Type 2).
///
-/// The information in this structure defines attributes of a system baseboard -
+/// The information in this structure defines attributes of a system baseboard -
/// for example a motherboard, planar, or server blade or other standard system module.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Manufacturer;
- SMBIOS_TABLE_STRING ProductName;
- SMBIOS_TABLE_STRING Version;
- SMBIOS_TABLE_STRING SerialNumber;
- SMBIOS_TABLE_STRING AssetTag;
- BASE_BOARD_FEATURE_FLAGS FeatureFlag;
- SMBIOS_TABLE_STRING LocationInChassis;
- UINT16 ChassisHandle;
- UINT8 BoardType; ///< The enumeration value from BASE_BOARD_TYPE.
- UINT8 NumberOfContainedObjectHandles;
- UINT16 ContainedObjectHandles[1];
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Manufacturer;
+ SMBIOS_TABLE_STRING ProductName;
+ SMBIOS_TABLE_STRING Version;
+ SMBIOS_TABLE_STRING SerialNumber;
+ SMBIOS_TABLE_STRING AssetTag;
+ BASE_BOARD_FEATURE_FLAGS FeatureFlag;
+ SMBIOS_TABLE_STRING LocationInChassis;
+ UINT16 ChassisHandle;
+ UINT8 BoardType; ///< The enumeration value from BASE_BOARD_TYPE.
+ UINT8 NumberOfContainedObjectHandles;
+ UINT16 ContainedObjectHandles[1];
} SMBIOS_TABLE_TYPE2;
///
/// System Enclosure or Chassis Types
///
-typedef enum {
- MiscChassisTypeOther = 0x01,
- MiscChassisTypeUnknown = 0x02,
- MiscChassisTypeDeskTop = 0x03,
- MiscChassisTypeLowProfileDesktop = 0x04,
- MiscChassisTypePizzaBox = 0x05,
- MiscChassisTypeMiniTower = 0x06,
- MiscChassisTypeTower = 0x07,
- MiscChassisTypePortable = 0x08,
- MiscChassisTypeLapTop = 0x09,
- MiscChassisTypeNotebook = 0x0A,
- MiscChassisTypeHandHeld = 0x0B,
- MiscChassisTypeDockingStation = 0x0C,
- MiscChassisTypeAllInOne = 0x0D,
- MiscChassisTypeSubNotebook = 0x0E,
- MiscChassisTypeSpaceSaving = 0x0F,
- MiscChassisTypeLunchBox = 0x10,
- MiscChassisTypeMainServerChassis = 0x11,
- MiscChassisTypeExpansionChassis = 0x12,
- MiscChassisTypeSubChassis = 0x13,
- MiscChassisTypeBusExpansionChassis = 0x14,
- MiscChassisTypePeripheralChassis = 0x15,
- MiscChassisTypeRaidChassis = 0x16,
- MiscChassisTypeRackMountChassis = 0x17,
- MiscChassisTypeSealedCasePc = 0x18,
- MiscChassisMultiSystemChassis = 0x19,
- MiscChassisCompactPCI = 0x1A,
- MiscChassisAdvancedTCA = 0x1B,
- MiscChassisBlade = 0x1C,
- MiscChassisBladeEnclosure = 0x1D
+typedef enum {
+ MiscChassisTypeOther = 0x01,
+ MiscChassisTypeUnknown = 0x02,
+ MiscChassisTypeDeskTop = 0x03,
+ MiscChassisTypeLowProfileDesktop = 0x04,
+ MiscChassisTypePizzaBox = 0x05,
+ MiscChassisTypeMiniTower = 0x06,
+ MiscChassisTypeTower = 0x07,
+ MiscChassisTypePortable = 0x08,
+ MiscChassisTypeLapTop = 0x09,
+ MiscChassisTypeNotebook = 0x0A,
+ MiscChassisTypeHandHeld = 0x0B,
+ MiscChassisTypeDockingStation = 0x0C,
+ MiscChassisTypeAllInOne = 0x0D,
+ MiscChassisTypeSubNotebook = 0x0E,
+ MiscChassisTypeSpaceSaving = 0x0F,
+ MiscChassisTypeLunchBox = 0x10,
+ MiscChassisTypeMainServerChassis = 0x11,
+ MiscChassisTypeExpansionChassis = 0x12,
+ MiscChassisTypeSubChassis = 0x13,
+ MiscChassisTypeBusExpansionChassis = 0x14,
+ MiscChassisTypePeripheralChassis = 0x15,
+ MiscChassisTypeRaidChassis = 0x16,
+ MiscChassisTypeRackMountChassis = 0x17,
+ MiscChassisTypeSealedCasePc = 0x18,
+ MiscChassisMultiSystemChassis = 0x19,
+ MiscChassisCompactPCI = 0x1A,
+ MiscChassisAdvancedTCA = 0x1B,
+ MiscChassisBlade = 0x1C,
+ MiscChassisBladeEnclosure = 0x1D,
+ MiscChassisTablet = 0x1E,
+ MiscChassisConvertible = 0x1F,
+ MiscChassisDetachable = 0x20,
+ MiscChassisIoTGateway = 0x21,
+ MiscChassisEmbeddedPc = 0x22,
+ MiscChassisMiniPc = 0x23,
+ MiscChassisStickPc = 0x24
} MISC_CHASSIS_TYPE;
///
/// System Enclosure or Chassis States .
///
-typedef enum {
- ChassisStateOther = 0x01,
- ChassisStateUnknown = 0x02,
- ChassisStateSafe = 0x03,
- ChassisStateWarning = 0x04,
- ChassisStateCritical = 0x05,
- ChassisStateNonRecoverable = 0x06
+typedef enum {
+ ChassisStateOther = 0x01,
+ ChassisStateUnknown = 0x02,
+ ChassisStateSafe = 0x03,
+ ChassisStateWarning = 0x04,
+ ChassisStateCritical = 0x05,
+ ChassisStateNonRecoverable = 0x06
} MISC_CHASSIS_STATE;
///
/// System Enclosure or Chassis Security Status.
///
-typedef enum {
+typedef enum {
ChassisSecurityStatusOther = 0x01,
ChassisSecurityStatusUnknown = 0x02,
ChassisSecurityStatusNone = 0x03,
@@ -331,38 +449,48 @@ typedef enum {
/// Contained Element record
///
typedef struct {
- UINT8 ContainedElementType;
- UINT8 ContainedElementMinimum;
- UINT8 ContainedElementMaximum;
+ UINT8 ContainedElementType;
+ UINT8 ContainedElementMinimum;
+ UINT8 ContainedElementMaximum;
} CONTAINED_ELEMENT;
-
///
/// System Enclosure or Chassis (Type 3).
///
-/// The information in this structure defines attributes of the system's mechanical enclosure(s).
-/// For example, if a system included a separate enclosure for its peripheral devices,
+/// The information in this structure defines attributes of the system's mechanical enclosure(s).
+/// For example, if a system included a separate enclosure for its peripheral devices,
/// two structures would be returned: one for the main, system enclosure and the second for
/// the peripheral device enclosure. The additions to this structure in v2.1 of this specification
-/// support the population of the CIM_Chassis class.
-///
-typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Manufacturer;
- UINT8 Type;
- SMBIOS_TABLE_STRING Version;
- SMBIOS_TABLE_STRING SerialNumber;
- SMBIOS_TABLE_STRING AssetTag;
- UINT8 BootupState; ///< The enumeration value from MISC_CHASSIS_STATE.
- UINT8 PowerSupplyState; ///< The enumeration value from MISC_CHASSIS_STATE.
- UINT8 ThermalState; ///< The enumeration value from MISC_CHASSIS_STATE.
- UINT8 SecurityStatus; ///< The enumeration value from MISC_CHASSIS_SECURITY_STATE.
- UINT8 OemDefined[4];
- UINT8 Height;
- UINT8 NumberofPowerCords;
- UINT8 ContainedElementCount;
- UINT8 ContainedElementRecordLength;
- CONTAINED_ELEMENT ContainedElements[1];
+/// support the population of the CIM_Chassis class.
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Manufacturer;
+ UINT8 Type;
+ SMBIOS_TABLE_STRING Version;
+ SMBIOS_TABLE_STRING SerialNumber;
+ SMBIOS_TABLE_STRING AssetTag;
+ UINT8 BootupState; ///< The enumeration value from MISC_CHASSIS_STATE.
+ UINT8 PowerSupplyState; ///< The enumeration value from MISC_CHASSIS_STATE.
+ UINT8 ThermalState; ///< The enumeration value from MISC_CHASSIS_STATE.
+ UINT8 SecurityStatus; ///< The enumeration value from MISC_CHASSIS_SECURITY_STATE.
+ UINT8 OemDefined[4];
+ UINT8 Height;
+ UINT8 NumberofPowerCords;
+ UINT8 ContainedElementCount;
+ UINT8 ContainedElementRecordLength;
+ //
+ // Can have 0 to (ContainedElementCount * ContainedElementRecordLength) contained elements
+ //
+ CONTAINED_ELEMENT ContainedElements[1];
+ //
+ // Add for smbios 2.7
+ //
+ // Since ContainedElements has a variable number of entries, must not define SKUNumber in
+ // the structure. Need to reference it by starting at offset 0x15 and adding
+ // (ContainedElementCount * ContainedElementRecordLength) bytes.
+ //
+ // SMBIOS_TABLE_STRING SKUNumber;
} SMBIOS_TABLE_TYPE3;
///
@@ -381,365 +509,444 @@ typedef enum {
/// Processor Information - Processor Family.
///
typedef enum {
- ProcessorFamilyOther = 0x01,
- ProcessorFamilyUnknown = 0x02,
- ProcessorFamily8086 = 0x03,
- ProcessorFamily80286 = 0x04,
- ProcessorFamilyIntel386 = 0x05,
- ProcessorFamilyIntel486 = 0x06,
- ProcessorFamily8087 = 0x07,
- ProcessorFamily80287 = 0x08,
- ProcessorFamily80387 = 0x09,
- ProcessorFamily80487 = 0x0A,
- ProcessorFamilyPentium = 0x0B,
- ProcessorFamilyPentiumPro = 0x0C,
- ProcessorFamilyPentiumII = 0x0D,
- ProcessorFamilyPentiumMMX = 0x0E,
- ProcessorFamilyCeleron = 0x0F,
- ProcessorFamilyPentiumIIXeon = 0x10,
- ProcessorFamilyPentiumIII = 0x11,
- ProcessorFamilyM1 = 0x12,
- ProcessorFamilyM2 = 0x13,
- ProcessorFamilyIntelCeleronM = 0x14,
- ProcessorFamilyIntelPentium4Ht = 0x15,
- ProcessorFamilyAmdDuron = 0x18,
- ProcessorFamilyK5 = 0x19,
- ProcessorFamilyK6 = 0x1A,
- ProcessorFamilyK6_2 = 0x1B,
- ProcessorFamilyK6_3 = 0x1C,
- ProcessorFamilyAmdAthlon = 0x1D,
- ProcessorFamilyAmd29000 = 0x1E,
- ProcessorFamilyK6_2Plus = 0x1F,
- ProcessorFamilyPowerPC = 0x20,
- ProcessorFamilyPowerPC601 = 0x21,
- ProcessorFamilyPowerPC603 = 0x22,
- ProcessorFamilyPowerPC603Plus = 0x23,
- ProcessorFamilyPowerPC604 = 0x24,
- ProcessorFamilyPowerPC620 = 0x25,
- ProcessorFamilyPowerPCx704 = 0x26,
- ProcessorFamilyPowerPC750 = 0x27,
- ProcessorFamilyIntelCoreDuo = 0x28,
- ProcessorFamilyIntelCoreDuoMobile = 0x29,
- ProcessorFamilyIntelCoreSoloMobile = 0x2A,
- ProcessorFamilyIntelAtom = 0x2B,
- ProcessorFamilyAlpha3 = 0x30,
- ProcessorFamilyAlpha21064 = 0x31,
- ProcessorFamilyAlpha21066 = 0x32,
- ProcessorFamilyAlpha21164 = 0x33,
- ProcessorFamilyAlpha21164PC = 0x34,
- ProcessorFamilyAlpha21164a = 0x35,
- ProcessorFamilyAlpha21264 = 0x36,
- ProcessorFamilyAlpha21364 = 0x37,
- ProcessorFamilyAmdTurionIIUltraDualCoreMobileM = 0x38,
- ProcessorFamilyAmdTurionIIDualCoreMobileM = 0x39,
- ProcessorFamilyAmdAthlonIIDualCoreM = 0x3A,
- ProcessorFamilyAmdOpteron6100Series = 0x3B,
- ProcessorFamilyAmdOpteron4100Series = 0x3C,
- ProcessorFamilyAmdOpteron6200Series = 0x3D,
- ProcessorFamilyAmdOpteron4200Series = 0x3E,
- ProcessorFamilyMips = 0x40,
- ProcessorFamilyMIPSR4000 = 0x41,
- ProcessorFamilyMIPSR4200 = 0x42,
- ProcessorFamilyMIPSR4400 = 0x43,
- ProcessorFamilyMIPSR4600 = 0x44,
- ProcessorFamilyMIPSR10000 = 0x45,
- ProcessorFamilyAmdCSeries = 0x46,
- ProcessorFamilyAmdESeries = 0x47,
- ProcessorFamilyAmdSSeries = 0x48,
- ProcessorFamilyAmdGSeries = 0x49,
- ProcessorFamilySparc = 0x50,
- ProcessorFamilySuperSparc = 0x51,
- ProcessorFamilymicroSparcII = 0x52,
- ProcessorFamilymicroSparcIIep = 0x53,
- ProcessorFamilyUltraSparc = 0x54,
- ProcessorFamilyUltraSparcII = 0x55,
- ProcessorFamilyUltraSparcIIi = 0x56,
- ProcessorFamilyUltraSparcIII = 0x57,
- ProcessorFamilyUltraSparcIIIi = 0x58,
- ProcessorFamily68040 = 0x60,
- ProcessorFamily68xxx = 0x61,
- ProcessorFamily68000 = 0x62,
- ProcessorFamily68010 = 0x63,
- ProcessorFamily68020 = 0x64,
- ProcessorFamily68030 = 0x65,
- ProcessorFamilyHobbit = 0x70,
- ProcessorFamilyCrusoeTM5000 = 0x78,
- ProcessorFamilyCrusoeTM3000 = 0x79,
- ProcessorFamilyEfficeonTM8000 = 0x7A,
- ProcessorFamilyWeitek = 0x80,
- ProcessorFamilyItanium = 0x82,
- ProcessorFamilyAmdAthlon64 = 0x83,
- ProcessorFamilyAmdOpteron = 0x84,
- ProcessorFamilyAmdSempron = 0x85,
- ProcessorFamilyAmdTurion64Mobile = 0x86,
- ProcessorFamilyDualCoreAmdOpteron = 0x87,
- ProcessorFamilyAmdAthlon64X2DualCore = 0x88,
- ProcessorFamilyAmdTurion64X2Mobile = 0x89,
- ProcessorFamilyQuadCoreAmdOpteron = 0x8A,
- ProcessorFamilyThirdGenerationAmdOpteron = 0x8B,
- ProcessorFamilyAmdPhenomFxQuadCore = 0x8C,
- ProcessorFamilyAmdPhenomX4QuadCore = 0x8D,
- ProcessorFamilyAmdPhenomX2DualCore = 0x8E,
- ProcessorFamilyAmdAthlonX2DualCore = 0x8F,
- ProcessorFamilyPARISC = 0x90,
- ProcessorFamilyPaRisc8500 = 0x91,
- ProcessorFamilyPaRisc8000 = 0x92,
- ProcessorFamilyPaRisc7300LC = 0x93,
- ProcessorFamilyPaRisc7200 = 0x94,
- ProcessorFamilyPaRisc7100LC = 0x95,
- ProcessorFamilyPaRisc7100 = 0x96,
- ProcessorFamilyV30 = 0xA0,
- ProcessorFamilyQuadCoreIntelXeon3200Series = 0xA1,
- ProcessorFamilyDualCoreIntelXeon3000Series = 0xA2,
- ProcessorFamilyQuadCoreIntelXeon5300Series = 0xA3,
- ProcessorFamilyDualCoreIntelXeon5100Series = 0xA4,
- ProcessorFamilyDualCoreIntelXeon5000Series = 0xA5,
- ProcessorFamilyDualCoreIntelXeonLV = 0xA6,
- ProcessorFamilyDualCoreIntelXeonULV = 0xA7,
- ProcessorFamilyDualCoreIntelXeon7100Series = 0xA8,
- ProcessorFamilyQuadCoreIntelXeon5400Series = 0xA9,
- ProcessorFamilyQuadCoreIntelXeon = 0xAA,
- ProcessorFamilyDualCoreIntelXeon5200Series = 0xAB,
- ProcessorFamilyDualCoreIntelXeon7200Series = 0xAC,
- ProcessorFamilyQuadCoreIntelXeon7300Series = 0xAD,
- ProcessorFamilyQuadCoreIntelXeon7400Series = 0xAE,
- ProcessorFamilyMultiCoreIntelXeon7400Series = 0xAF,
- ProcessorFamilyPentiumIIIXeon = 0xB0,
- ProcessorFamilyPentiumIIISpeedStep = 0xB1,
- ProcessorFamilyPentium4 = 0xB2,
- ProcessorFamilyIntelXeon = 0xB3,
- ProcessorFamilyAS400 = 0xB4,
- ProcessorFamilyIntelXeonMP = 0xB5,
- ProcessorFamilyAMDAthlonXP = 0xB6,
- ProcessorFamilyAMDAthlonMP = 0xB7,
- ProcessorFamilyIntelItanium2 = 0xB8,
- ProcessorFamilyIntelPentiumM = 0xB9,
- ProcessorFamilyIntelCeleronD = 0xBA,
- ProcessorFamilyIntelPentiumD = 0xBB,
- ProcessorFamilyIntelPentiumEx = 0xBC,
- ProcessorFamilyIntelCoreSolo = 0xBD, ///< SMBIOS spec 2.6 correct this value
- ProcessorFamilyReserved = 0xBE,
- ProcessorFamilyIntelCore2 = 0xBF,
- ProcessorFamilyIntelCore2Solo = 0xC0,
- ProcessorFamilyIntelCore2Extreme = 0xC1,
- ProcessorFamilyIntelCore2Quad = 0xC2,
- ProcessorFamilyIntelCore2ExtremeMobile = 0xC3,
- ProcessorFamilyIntelCore2DuoMobile = 0xC4,
- ProcessorFamilyIntelCore2SoloMobile = 0xC5,
- ProcessorFamilyIntelCoreI7 = 0xC6,
- ProcessorFamilyDualCoreIntelCeleron = 0xC7,
- ProcessorFamilyIBM390 = 0xC8,
- ProcessorFamilyG4 = 0xC9,
- ProcessorFamilyG5 = 0xCA,
- ProcessorFamilyG6 = 0xCB,
- ProcessorFamilyzArchitectur = 0xCC,
- ProcessorFamilyIntelCoreI5 = 0xCD,
- ProcessorFamilyIntelCoreI3 = 0xCE,
- ProcessorFamilyViaC7M = 0xD2,
- ProcessorFamilyViaC7D = 0xD3,
- ProcessorFamilyViaC7 = 0xD4,
- ProcessorFamilyViaEden = 0xD5,
- ProcessorFamilyMultiCoreIntelXeon = 0xD6,
- ProcessorFamilyDualCoreIntelXeon3Series = 0xD7,
- ProcessorFamilyQuadCoreIntelXeon3Series = 0xD8,
- ProcessorFamilyViaNano = 0xD9,
- ProcessorFamilyDualCoreIntelXeon5Series = 0xDA,
- ProcessorFamilyQuadCoreIntelXeon5Series = 0xDB,
- ProcessorFamilyDualCoreIntelXeon7Series = 0xDD,
- ProcessorFamilyQuadCoreIntelXeon7Series = 0xDE,
- ProcessorFamilyMultiCoreIntelXeon7Series = 0xDF,
- ProcessorFamilyMultiCoreIntelXeon3400Series = 0xE0,
- ProcessorFamilyEmbeddedAmdOpteronQuadCore = 0xE6,
- ProcessorFamilyAmdPhenomTripleCore = 0xE7,
- ProcessorFamilyAmdTurionUltraDualCoreMobile = 0xE8,
- ProcessorFamilyAmdTurionDualCoreMobile = 0xE9,
- ProcessorFamilyAmdAthlonDualCore = 0xEA,
- ProcessorFamilyAmdSempronSI = 0xEB,
- ProcessorFamilyAmdPhenomII = 0xEC,
- ProcessorFamilyAmdAthlonII = 0xED,
- ProcessorFamilySixCoreAmdOpteron = 0xEE,
- ProcessorFamilyAmdSempronM = 0xEF,
- ProcessorFamilyi860 = 0xFA,
- ProcessorFamilyi960 = 0xFB,
- ProcessorFamilyIndicatorFamily2 = 0xFE,
- ProcessorFamilyReserved1 = 0xFF
+ ProcessorFamilyOther = 0x01,
+ ProcessorFamilyUnknown = 0x02,
+ ProcessorFamily8086 = 0x03,
+ ProcessorFamily80286 = 0x04,
+ ProcessorFamilyIntel386 = 0x05,
+ ProcessorFamilyIntel486 = 0x06,
+ ProcessorFamily8087 = 0x07,
+ ProcessorFamily80287 = 0x08,
+ ProcessorFamily80387 = 0x09,
+ ProcessorFamily80487 = 0x0A,
+ ProcessorFamilyPentium = 0x0B,
+ ProcessorFamilyPentiumPro = 0x0C,
+ ProcessorFamilyPentiumII = 0x0D,
+ ProcessorFamilyPentiumMMX = 0x0E,
+ ProcessorFamilyCeleron = 0x0F,
+ ProcessorFamilyPentiumIIXeon = 0x10,
+ ProcessorFamilyPentiumIII = 0x11,
+ ProcessorFamilyM1 = 0x12,
+ ProcessorFamilyM2 = 0x13,
+ ProcessorFamilyIntelCeleronM = 0x14,
+ ProcessorFamilyIntelPentium4Ht = 0x15,
+ ProcessorFamilyAmdDuron = 0x18,
+ ProcessorFamilyK5 = 0x19,
+ ProcessorFamilyK6 = 0x1A,
+ ProcessorFamilyK6_2 = 0x1B,
+ ProcessorFamilyK6_3 = 0x1C,
+ ProcessorFamilyAmdAthlon = 0x1D,
+ ProcessorFamilyAmd29000 = 0x1E,
+ ProcessorFamilyK6_2Plus = 0x1F,
+ ProcessorFamilyPowerPC = 0x20,
+ ProcessorFamilyPowerPC601 = 0x21,
+ ProcessorFamilyPowerPC603 = 0x22,
+ ProcessorFamilyPowerPC603Plus = 0x23,
+ ProcessorFamilyPowerPC604 = 0x24,
+ ProcessorFamilyPowerPC620 = 0x25,
+ ProcessorFamilyPowerPCx704 = 0x26,
+ ProcessorFamilyPowerPC750 = 0x27,
+ ProcessorFamilyIntelCoreDuo = 0x28,
+ ProcessorFamilyIntelCoreDuoMobile = 0x29,
+ ProcessorFamilyIntelCoreSoloMobile = 0x2A,
+ ProcessorFamilyIntelAtom = 0x2B,
+ ProcessorFamilyIntelCoreM = 0x2C,
+ ProcessorFamilyIntelCorem3 = 0x2D,
+ ProcessorFamilyIntelCorem5 = 0x2E,
+ ProcessorFamilyIntelCorem7 = 0x2F,
+ ProcessorFamilyAlpha = 0x30,
+ ProcessorFamilyAlpha21064 = 0x31,
+ ProcessorFamilyAlpha21066 = 0x32,
+ ProcessorFamilyAlpha21164 = 0x33,
+ ProcessorFamilyAlpha21164PC = 0x34,
+ ProcessorFamilyAlpha21164a = 0x35,
+ ProcessorFamilyAlpha21264 = 0x36,
+ ProcessorFamilyAlpha21364 = 0x37,
+ ProcessorFamilyAmdTurionIIUltraDualCoreMobileM = 0x38,
+ ProcessorFamilyAmdTurionIIDualCoreMobileM = 0x39,
+ ProcessorFamilyAmdAthlonIIDualCoreM = 0x3A,
+ ProcessorFamilyAmdOpteron6100Series = 0x3B,
+ ProcessorFamilyAmdOpteron4100Series = 0x3C,
+ ProcessorFamilyAmdOpteron6200Series = 0x3D,
+ ProcessorFamilyAmdOpteron4200Series = 0x3E,
+ ProcessorFamilyAmdFxSeries = 0x3F,
+ ProcessorFamilyMips = 0x40,
+ ProcessorFamilyMIPSR4000 = 0x41,
+ ProcessorFamilyMIPSR4200 = 0x42,
+ ProcessorFamilyMIPSR4400 = 0x43,
+ ProcessorFamilyMIPSR4600 = 0x44,
+ ProcessorFamilyMIPSR10000 = 0x45,
+ ProcessorFamilyAmdCSeries = 0x46,
+ ProcessorFamilyAmdESeries = 0x47,
+ ProcessorFamilyAmdASeries = 0x48, ///< SMBIOS spec 2.8.0 updated the name
+ ProcessorFamilyAmdGSeries = 0x49,
+ ProcessorFamilyAmdZSeries = 0x4A,
+ ProcessorFamilyAmdRSeries = 0x4B,
+ ProcessorFamilyAmdOpteron4300 = 0x4C,
+ ProcessorFamilyAmdOpteron6300 = 0x4D,
+ ProcessorFamilyAmdOpteron3300 = 0x4E,
+ ProcessorFamilyAmdFireProSeries = 0x4F,
+ ProcessorFamilySparc = 0x50,
+ ProcessorFamilySuperSparc = 0x51,
+ ProcessorFamilymicroSparcII = 0x52,
+ ProcessorFamilymicroSparcIIep = 0x53,
+ ProcessorFamilyUltraSparc = 0x54,
+ ProcessorFamilyUltraSparcII = 0x55,
+ ProcessorFamilyUltraSparcIii = 0x56,
+ ProcessorFamilyUltraSparcIII = 0x57,
+ ProcessorFamilyUltraSparcIIIi = 0x58,
+ ProcessorFamily68040 = 0x60,
+ ProcessorFamily68xxx = 0x61,
+ ProcessorFamily68000 = 0x62,
+ ProcessorFamily68010 = 0x63,
+ ProcessorFamily68020 = 0x64,
+ ProcessorFamily68030 = 0x65,
+ ProcessorFamilyAmdAthlonX4QuadCore = 0x66,
+ ProcessorFamilyAmdOpteronX1000Series = 0x67,
+ ProcessorFamilyAmdOpteronX2000Series = 0x68,
+ ProcessorFamilyAmdOpteronASeries = 0x69,
+ ProcessorFamilyAmdOpteronX3000Series = 0x6A,
+ ProcessorFamilyAmdZen = 0x6B,
+ ProcessorFamilyHobbit = 0x70,
+ ProcessorFamilyCrusoeTM5000 = 0x78,
+ ProcessorFamilyCrusoeTM3000 = 0x79,
+ ProcessorFamilyEfficeonTM8000 = 0x7A,
+ ProcessorFamilyWeitek = 0x80,
+ ProcessorFamilyItanium = 0x82,
+ ProcessorFamilyAmdAthlon64 = 0x83,
+ ProcessorFamilyAmdOpteron = 0x84,
+ ProcessorFamilyAmdSempron = 0x85,
+ ProcessorFamilyAmdTurion64Mobile = 0x86,
+ ProcessorFamilyDualCoreAmdOpteron = 0x87,
+ ProcessorFamilyAmdAthlon64X2DualCore = 0x88,
+ ProcessorFamilyAmdTurion64X2Mobile = 0x89,
+ ProcessorFamilyQuadCoreAmdOpteron = 0x8A,
+ ProcessorFamilyThirdGenerationAmdOpteron = 0x8B,
+ ProcessorFamilyAmdPhenomFxQuadCore = 0x8C,
+ ProcessorFamilyAmdPhenomX4QuadCore = 0x8D,
+ ProcessorFamilyAmdPhenomX2DualCore = 0x8E,
+ ProcessorFamilyAmdAthlonX2DualCore = 0x8F,
+ ProcessorFamilyPARISC = 0x90,
+ ProcessorFamilyPaRisc8500 = 0x91,
+ ProcessorFamilyPaRisc8000 = 0x92,
+ ProcessorFamilyPaRisc7300LC = 0x93,
+ ProcessorFamilyPaRisc7200 = 0x94,
+ ProcessorFamilyPaRisc7100LC = 0x95,
+ ProcessorFamilyPaRisc7100 = 0x96,
+ ProcessorFamilyV30 = 0xA0,
+ ProcessorFamilyQuadCoreIntelXeon3200Series = 0xA1,
+ ProcessorFamilyDualCoreIntelXeon3000Series = 0xA2,
+ ProcessorFamilyQuadCoreIntelXeon5300Series = 0xA3,
+ ProcessorFamilyDualCoreIntelXeon5100Series = 0xA4,
+ ProcessorFamilyDualCoreIntelXeon5000Series = 0xA5,
+ ProcessorFamilyDualCoreIntelXeonLV = 0xA6,
+ ProcessorFamilyDualCoreIntelXeonULV = 0xA7,
+ ProcessorFamilyDualCoreIntelXeon7100Series = 0xA8,
+ ProcessorFamilyQuadCoreIntelXeon5400Series = 0xA9,
+ ProcessorFamilyQuadCoreIntelXeon = 0xAA,
+ ProcessorFamilyDualCoreIntelXeon5200Series = 0xAB,
+ ProcessorFamilyDualCoreIntelXeon7200Series = 0xAC,
+ ProcessorFamilyQuadCoreIntelXeon7300Series = 0xAD,
+ ProcessorFamilyQuadCoreIntelXeon7400Series = 0xAE,
+ ProcessorFamilyMultiCoreIntelXeon7400Series = 0xAF,
+ ProcessorFamilyPentiumIIIXeon = 0xB0,
+ ProcessorFamilyPentiumIIISpeedStep = 0xB1,
+ ProcessorFamilyPentium4 = 0xB2,
+ ProcessorFamilyIntelXeon = 0xB3,
+ ProcessorFamilyAS400 = 0xB4,
+ ProcessorFamilyIntelXeonMP = 0xB5,
+ ProcessorFamilyAMDAthlonXP = 0xB6,
+ ProcessorFamilyAMDAthlonMP = 0xB7,
+ ProcessorFamilyIntelItanium2 = 0xB8,
+ ProcessorFamilyIntelPentiumM = 0xB9,
+ ProcessorFamilyIntelCeleronD = 0xBA,
+ ProcessorFamilyIntelPentiumD = 0xBB,
+ ProcessorFamilyIntelPentiumEx = 0xBC,
+ ProcessorFamilyIntelCoreSolo = 0xBD, ///< SMBIOS spec 2.6 updated this value
+ ProcessorFamilyReserved = 0xBE,
+ ProcessorFamilyIntelCore2 = 0xBF,
+ ProcessorFamilyIntelCore2Solo = 0xC0,
+ ProcessorFamilyIntelCore2Extreme = 0xC1,
+ ProcessorFamilyIntelCore2Quad = 0xC2,
+ ProcessorFamilyIntelCore2ExtremeMobile = 0xC3,
+ ProcessorFamilyIntelCore2DuoMobile = 0xC4,
+ ProcessorFamilyIntelCore2SoloMobile = 0xC5,
+ ProcessorFamilyIntelCoreI7 = 0xC6,
+ ProcessorFamilyDualCoreIntelCeleron = 0xC7,
+ ProcessorFamilyIBM390 = 0xC8,
+ ProcessorFamilyG4 = 0xC9,
+ ProcessorFamilyG5 = 0xCA,
+ ProcessorFamilyG6 = 0xCB,
+ ProcessorFamilyzArchitecture = 0xCC,
+ ProcessorFamilyIntelCoreI5 = 0xCD,
+ ProcessorFamilyIntelCoreI3 = 0xCE,
+ ProcessorFamilyIntelCoreI9 = 0xCF,
+ ProcessorFamilyViaC7M = 0xD2,
+ ProcessorFamilyViaC7D = 0xD3,
+ ProcessorFamilyViaC7 = 0xD4,
+ ProcessorFamilyViaEden = 0xD5,
+ ProcessorFamilyMultiCoreIntelXeon = 0xD6,
+ ProcessorFamilyDualCoreIntelXeon3Series = 0xD7,
+ ProcessorFamilyQuadCoreIntelXeon3Series = 0xD8,
+ ProcessorFamilyViaNano = 0xD9,
+ ProcessorFamilyDualCoreIntelXeon5Series = 0xDA,
+ ProcessorFamilyQuadCoreIntelXeon5Series = 0xDB,
+ ProcessorFamilyDualCoreIntelXeon7Series = 0xDD,
+ ProcessorFamilyQuadCoreIntelXeon7Series = 0xDE,
+ ProcessorFamilyMultiCoreIntelXeon7Series = 0xDF,
+ ProcessorFamilyMultiCoreIntelXeon3400Series = 0xE0,
+ ProcessorFamilyAmdOpteron3000Series = 0xE4,
+ ProcessorFamilyAmdSempronII = 0xE5,
+ ProcessorFamilyEmbeddedAmdOpteronQuadCore = 0xE6,
+ ProcessorFamilyAmdPhenomTripleCore = 0xE7,
+ ProcessorFamilyAmdTurionUltraDualCoreMobile = 0xE8,
+ ProcessorFamilyAmdTurionDualCoreMobile = 0xE9,
+ ProcessorFamilyAmdAthlonDualCore = 0xEA,
+ ProcessorFamilyAmdSempronSI = 0xEB,
+ ProcessorFamilyAmdPhenomII = 0xEC,
+ ProcessorFamilyAmdAthlonII = 0xED,
+ ProcessorFamilySixCoreAmdOpteron = 0xEE,
+ ProcessorFamilyAmdSempronM = 0xEF,
+ ProcessorFamilyi860 = 0xFA,
+ ProcessorFamilyi960 = 0xFB,
+ ProcessorFamilyIndicatorFamily2 = 0xFE,
+ ProcessorFamilyReserved1 = 0xFF
} PROCESSOR_FAMILY_DATA;
///
/// Processor Information2 - Processor Family2.
///
typedef enum {
- ProcessorFamilySH3 = 0x0104,
- ProcessorFamilySH4 = 0x0105,
- ProcessorFamilyARM = 0x0118,
- ProcessorFamilyStrongARM = 0x0119,
- ProcessorFamily6x86 = 0x012C,
- ProcessorFamilyMediaGX = 0x012D,
- ProcessorFamilyMII = 0x012E,
- ProcessorFamilyWinChip = 0x0140,
- ProcessorFamilyDSP = 0x015E,
- ProcessorFamilyVideoProcessor = 0x01F4
+ ProcessorFamilyARMv7 = 0x0100,
+ ProcessorFamilyARMv8 = 0x0101,
+ ProcessorFamilySH3 = 0x0104,
+ ProcessorFamilySH4 = 0x0105,
+ ProcessorFamilyARM = 0x0118,
+ ProcessorFamilyStrongARM = 0x0119,
+ ProcessorFamily6x86 = 0x012C,
+ ProcessorFamilyMediaGX = 0x012D,
+ ProcessorFamilyMII = 0x012E,
+ ProcessorFamilyWinChip = 0x0140,
+ ProcessorFamilyDSP = 0x015E,
+ ProcessorFamilyVideoProcessor = 0x01F4,
+ ProcessorFamilyRiscvRV32 = 0x0200,
+ ProcessorFamilyRiscVRV64 = 0x0201,
+ ProcessorFamilyRiscVRV128 = 0x0202
} PROCESSOR_FAMILY2_DATA;
///
-/// Processor Information - Voltage.
+/// Processor Information - Voltage.
///
typedef struct {
- UINT8 ProcessorVoltageCapability5V :1;
- UINT8 ProcessorVoltageCapability3_3V :1;
- UINT8 ProcessorVoltageCapability2_9V :1;
- UINT8 ProcessorVoltageCapabilityReserved :1; ///< Bit 3, must be zero.
- UINT8 ProcessorVoltageReserved :3; ///< Bits 4-6, must be zero.
- UINT8 ProcessorVoltageIndicateLegacy :1;
+ UINT8 ProcessorVoltageCapability5V : 1;
+ UINT8 ProcessorVoltageCapability3_3V : 1;
+ UINT8 ProcessorVoltageCapability2_9V : 1;
+ UINT8 ProcessorVoltageCapabilityReserved : 1; ///< Bit 3, must be zero.
+ UINT8 ProcessorVoltageReserved : 3; ///< Bits 4-6, must be zero.
+ UINT8 ProcessorVoltageIndicateLegacy : 1;
} PROCESSOR_VOLTAGE;
///
/// Processor Information - Processor Upgrade.
///
typedef enum {
- ProcessorUpgradeOther = 0x01,
- ProcessorUpgradeUnknown = 0x02,
- ProcessorUpgradeDaughterBoard = 0x03,
- ProcessorUpgradeZIFSocket = 0x04,
- ProcessorUpgradePiggyBack = 0x05, ///< Replaceable.
- ProcessorUpgradeNone = 0x06,
- ProcessorUpgradeLIFSocket = 0x07,
- ProcessorUpgradeSlot1 = 0x08,
- ProcessorUpgradeSlot2 = 0x09,
- ProcessorUpgrade370PinSocket = 0x0A,
- ProcessorUpgradeSlotA = 0x0B,
- ProcessorUpgradeSlotM = 0x0C,
- ProcessorUpgradeSocket423 = 0x0D,
- ProcessorUpgradeSocketA = 0x0E, ///< Socket 462.
- ProcessorUpgradeSocket478 = 0x0F,
- ProcessorUpgradeSocket754 = 0x10,
- ProcessorUpgradeSocket940 = 0x11,
- ProcessorUpgradeSocket939 = 0x12,
- ProcessorUpgradeSocketmPGA604 = 0x13,
- ProcessorUpgradeSocketLGA771 = 0x14,
- ProcessorUpgradeSocketLGA775 = 0x15,
- ProcessorUpgradeSocketS1 = 0x16,
- ProcessorUpgradeAM2 = 0x17,
- ProcessorUpgradeF1207 = 0x18,
- ProcessorSocketLGA1366 = 0x19,
- ProcessorUpgradeSocketG34 = 0x1A,
- ProcessorUpgradeSocketAM3 = 0x1B,
- ProcessorUpgradeSocketC32 = 0x1C,
- ProcessorUpgradeSocketLGA1156 = 0x1D,
- ProcessorUpgradeSocketLGA1567 = 0x1E,
- ProcessorUpgradeSocketPGA988A = 0x1F,
- ProcessorUpgradeSocketBGA1288 = 0x20,
- ProcessorUpgradeSocketrPGA988B = 0x21,
- ProcessorUpgradeSocketBGA1023 = 0x22,
- ProcessorUpgradeSocketBGA1224 = 0x23,
- ProcessorUpgradeSocketBGA1155 = 0x24,
- ProcessorUpgradeSocketLGA1356 = 0x25,
- ProcessorUpgradeSocketLGA2011 = 0x26,
- ProcessorUpgradeSocketFS1 = 0x27,
- ProcessorUpgradeSocketFS2 = 0x28,
- ProcessorUpgradeSocketFM1 = 0x29,
- ProcessorUpgradeSocketFM2 = 0x2A
+ ProcessorUpgradeOther = 0x01,
+ ProcessorUpgradeUnknown = 0x02,
+ ProcessorUpgradeDaughterBoard = 0x03,
+ ProcessorUpgradeZIFSocket = 0x04,
+ ProcessorUpgradePiggyBack = 0x05, ///< Replaceable.
+ ProcessorUpgradeNone = 0x06,
+ ProcessorUpgradeLIFSocket = 0x07,
+ ProcessorUpgradeSlot1 = 0x08,
+ ProcessorUpgradeSlot2 = 0x09,
+ ProcessorUpgrade370PinSocket = 0x0A,
+ ProcessorUpgradeSlotA = 0x0B,
+ ProcessorUpgradeSlotM = 0x0C,
+ ProcessorUpgradeSocket423 = 0x0D,
+ ProcessorUpgradeSocketA = 0x0E, ///< Socket 462.
+ ProcessorUpgradeSocket478 = 0x0F,
+ ProcessorUpgradeSocket754 = 0x10,
+ ProcessorUpgradeSocket940 = 0x11,
+ ProcessorUpgradeSocket939 = 0x12,
+ ProcessorUpgradeSocketmPGA604 = 0x13,
+ ProcessorUpgradeSocketLGA771 = 0x14,
+ ProcessorUpgradeSocketLGA775 = 0x15,
+ ProcessorUpgradeSocketS1 = 0x16,
+ ProcessorUpgradeAM2 = 0x17,
+ ProcessorUpgradeF1207 = 0x18,
+ ProcessorSocketLGA1366 = 0x19,
+ ProcessorUpgradeSocketG34 = 0x1A,
+ ProcessorUpgradeSocketAM3 = 0x1B,
+ ProcessorUpgradeSocketC32 = 0x1C,
+ ProcessorUpgradeSocketLGA1156 = 0x1D,
+ ProcessorUpgradeSocketLGA1567 = 0x1E,
+ ProcessorUpgradeSocketPGA988A = 0x1F,
+ ProcessorUpgradeSocketBGA1288 = 0x20,
+ ProcessorUpgradeSocketrPGA988B = 0x21,
+ ProcessorUpgradeSocketBGA1023 = 0x22,
+ ProcessorUpgradeSocketBGA1224 = 0x23,
+ ProcessorUpgradeSocketLGA1155 = 0x24, ///< SMBIOS spec 2.8.0 updated the name
+ ProcessorUpgradeSocketLGA1356 = 0x25,
+ ProcessorUpgradeSocketLGA2011 = 0x26,
+ ProcessorUpgradeSocketFS1 = 0x27,
+ ProcessorUpgradeSocketFS2 = 0x28,
+ ProcessorUpgradeSocketFM1 = 0x29,
+ ProcessorUpgradeSocketFM2 = 0x2A,
+ ProcessorUpgradeSocketLGA2011_3 = 0x2B,
+ ProcessorUpgradeSocketLGA1356_3 = 0x2C,
+ ProcessorUpgradeSocketLGA1150 = 0x2D,
+ ProcessorUpgradeSocketBGA1168 = 0x2E,
+ ProcessorUpgradeSocketBGA1234 = 0x2F,
+ ProcessorUpgradeSocketBGA1364 = 0x30,
+ ProcessorUpgradeSocketAM4 = 0x31,
+ ProcessorUpgradeSocketLGA1151 = 0x32,
+ ProcessorUpgradeSocketBGA1356 = 0x33,
+ ProcessorUpgradeSocketBGA1440 = 0x34,
+ ProcessorUpgradeSocketBGA1515 = 0x35,
+ ProcessorUpgradeSocketLGA3647_1 = 0x36,
+ ProcessorUpgradeSocketSP3 = 0x37,
+ ProcessorUpgradeSocketSP3r2 = 0x38,
+ ProcessorUpgradeSocketLGA2066 = 0x39,
+ ProcessorUpgradeSocketBGA1392 = 0x3A,
+ ProcessorUpgradeSocketBGA1510 = 0x3B,
+ ProcessorUpgradeSocketBGA1528 = 0x3C,
+ ProcessorUpgradeSocketLGA4189 = 0x3D,
+ ProcessorUpgradeSocketLGA1200 = 0x3E,
+ ProcessorUpgradeSocketLGA4677 = 0x3F
} PROCESSOR_UPGRADE;
///
/// Processor ID Field Description
///
typedef struct {
- UINT32 ProcessorSteppingId:4;
- UINT32 ProcessorModel: 4;
- UINT32 ProcessorFamily: 4;
- UINT32 ProcessorType: 2;
- UINT32 ProcessorReserved1: 2;
- UINT32 ProcessorXModel: 4;
- UINT32 ProcessorXFamily: 8;
- UINT32 ProcessorReserved2: 4;
+ UINT32 ProcessorSteppingId : 4;
+ UINT32 ProcessorModel : 4;
+ UINT32 ProcessorFamily : 4;
+ UINT32 ProcessorType : 2;
+ UINT32 ProcessorReserved1 : 2;
+ UINT32 ProcessorXModel : 4;
+ UINT32 ProcessorXFamily : 8;
+ UINT32 ProcessorReserved2 : 4;
} PROCESSOR_SIGNATURE;
typedef struct {
- UINT32 ProcessorFpu :1;
- UINT32 ProcessorVme :1;
- UINT32 ProcessorDe :1;
- UINT32 ProcessorPse :1;
- UINT32 ProcessorTsc :1;
- UINT32 ProcessorMsr :1;
- UINT32 ProcessorPae :1;
- UINT32 ProcessorMce :1;
- UINT32 ProcessorCx8 :1;
- UINT32 ProcessorApic :1;
- UINT32 ProcessorReserved1 :1;
- UINT32 ProcessorSep :1;
- UINT32 ProcessorMtrr :1;
- UINT32 ProcessorPge :1;
- UINT32 ProcessorMca :1;
- UINT32 ProcessorCmov :1;
- UINT32 ProcessorPat :1;
- UINT32 ProcessorPse36 :1;
- UINT32 ProcessorPsn :1;
- UINT32 ProcessorClfsh :1;
- UINT32 ProcessorReserved2 :1;
- UINT32 ProcessorDs :1;
- UINT32 ProcessorAcpi :1;
- UINT32 ProcessorMmx :1;
- UINT32 ProcessorFxsr :1;
- UINT32 ProcessorSse :1;
- UINT32 ProcessorSse2 :1;
- UINT32 ProcessorSs :1;
- UINT32 ProcessorReserved3 :1;
- UINT32 ProcessorTm :1;
- UINT32 ProcessorReserved4 :2;
+ UINT32 ProcessorFpu : 1;
+ UINT32 ProcessorVme : 1;
+ UINT32 ProcessorDe : 1;
+ UINT32 ProcessorPse : 1;
+ UINT32 ProcessorTsc : 1;
+ UINT32 ProcessorMsr : 1;
+ UINT32 ProcessorPae : 1;
+ UINT32 ProcessorMce : 1;
+ UINT32 ProcessorCx8 : 1;
+ UINT32 ProcessorApic : 1;
+ UINT32 ProcessorReserved1 : 1;
+ UINT32 ProcessorSep : 1;
+ UINT32 ProcessorMtrr : 1;
+ UINT32 ProcessorPge : 1;
+ UINT32 ProcessorMca : 1;
+ UINT32 ProcessorCmov : 1;
+ UINT32 ProcessorPat : 1;
+ UINT32 ProcessorPse36 : 1;
+ UINT32 ProcessorPsn : 1;
+ UINT32 ProcessorClfsh : 1;
+ UINT32 ProcessorReserved2 : 1;
+ UINT32 ProcessorDs : 1;
+ UINT32 ProcessorAcpi : 1;
+ UINT32 ProcessorMmx : 1;
+ UINT32 ProcessorFxsr : 1;
+ UINT32 ProcessorSse : 1;
+ UINT32 ProcessorSse2 : 1;
+ UINT32 ProcessorSs : 1;
+ UINT32 ProcessorReserved3 : 1;
+ UINT32 ProcessorTm : 1;
+ UINT32 ProcessorReserved4 : 2;
} PROCESSOR_FEATURE_FLAGS;
typedef struct {
- PROCESSOR_SIGNATURE Signature;
- PROCESSOR_FEATURE_FLAGS FeatureFlags;
+ UINT16 ProcessorReserved1 : 1;
+ UINT16 ProcessorUnknown : 1;
+ UINT16 Processor64BitCapable : 1;
+ UINT16 ProcessorMultiCore : 1;
+ UINT16 ProcessorHardwareThread : 1;
+ UINT16 ProcessorExecuteProtection : 1;
+ UINT16 ProcessorEnhancedVirtualization : 1;
+ UINT16 ProcessorPowerPerformanceCtrl : 1;
+ UINT16 Processor128BitCapable : 1;
+ UINT16 ProcessorArm64SocId : 1;
+ UINT16 ProcessorReserved2 : 6;
+} PROCESSOR_CHARACTERISTIC_FLAGS;
+
+///
+/// Processor Information - Status
+///
+typedef union {
+ struct {
+ UINT8 CpuStatus : 3; ///< Indicates the status of the processor.
+ UINT8 Reserved1 : 3; ///< Reserved for future use. Must be set to zero.
+ UINT8 SocketPopulated : 1; ///< Indicates if the processor socket is populated or not.
+ UINT8 Reserved2 : 1; ///< Reserved for future use. Must be set to zero.
+ } Bits;
+ UINT8 Data;
+} PROCESSOR_STATUS_DATA;
+
+typedef struct {
+ PROCESSOR_SIGNATURE Signature;
+ PROCESSOR_FEATURE_FLAGS FeatureFlags;
} PROCESSOR_ID_DATA;
///
/// Processor Information (Type 4).
///
-/// The information in this structure defines the attributes of a single processor;
-/// a separate structure instance is provided for each system processor socket/slot.
-/// For example, a system with an IntelDX2 processor would have a single
+/// The information in this structure defines the attributes of a single processor;
+/// a separate structure instance is provided for each system processor socket/slot.
+/// For example, a system with an IntelDX2 processor would have a single
/// structure instance, while a system with an IntelSX2 processor would have a structure
-/// to describe the main CPU, and a second structure to describe the 80487 co-processor.
-///
-typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Socket;
- UINT8 ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA.
- UINT8 ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA.
- SMBIOS_TABLE_STRING ProcessorManufacture;
- PROCESSOR_ID_DATA ProcessorId;
- SMBIOS_TABLE_STRING ProcessorVersion;
- PROCESSOR_VOLTAGE Voltage;
- UINT16 ExternalClock;
- UINT16 MaxSpeed;
- UINT16 CurrentSpeed;
- UINT8 Status;
- UINT8 ProcessorUpgrade; ///< The enumeration value from PROCESSOR_UPGRADE.
- UINT16 L1CacheHandle;
- UINT16 L2CacheHandle;
- UINT16 L3CacheHandle;
- SMBIOS_TABLE_STRING SerialNumber;
- SMBIOS_TABLE_STRING AssetTag;
- SMBIOS_TABLE_STRING PartNumber;
+/// to describe the main CPU, and a second structure to describe the 80487 co-processor.
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Socket;
+ UINT8 ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA.
+ UINT8 ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA.
+ SMBIOS_TABLE_STRING ProcessorManufacturer;
+ PROCESSOR_ID_DATA ProcessorId;
+ SMBIOS_TABLE_STRING ProcessorVersion;
+ PROCESSOR_VOLTAGE Voltage;
+ UINT16 ExternalClock;
+ UINT16 MaxSpeed;
+ UINT16 CurrentSpeed;
+ UINT8 Status;
+ UINT8 ProcessorUpgrade; ///< The enumeration value from PROCESSOR_UPGRADE.
+ UINT16 L1CacheHandle;
+ UINT16 L2CacheHandle;
+ UINT16 L3CacheHandle;
+ SMBIOS_TABLE_STRING SerialNumber;
+ SMBIOS_TABLE_STRING AssetTag;
+ SMBIOS_TABLE_STRING PartNumber;
//
// Add for smbios 2.5
//
- UINT8 CoreCount;
- UINT8 EnabledCoreCount;
- UINT8 ThreadCount;
- UINT16 ProcessorCharacteristics;
+ UINT8 CoreCount;
+ UINT8 EnabledCoreCount;
+ UINT8 ThreadCount;
+ UINT16 ProcessorCharacteristics;
//
// Add for smbios 2.6
//
- UINT16 ProcessorFamily2;
+ UINT16 ProcessorFamily2;
+ //
+ // Add for smbios 3.0
+ //
+ UINT16 CoreCount2;
+ UINT16 EnabledCoreCount2;
+ UINT16 ThreadCount2;
} SMBIOS_TABLE_TYPE4;
///
/// Memory Controller Error Detecting Method.
///
-typedef enum {
+typedef enum {
ErrorDetectingMethodOther = 0x01,
ErrorDetectingMethodUnknown = 0x02,
ErrorDetectingMethodNone = 0x03,
@@ -754,19 +961,19 @@ typedef enum {
/// Memory Controller Error Correcting Capability.
///
typedef struct {
- UINT8 Other :1;
- UINT8 Unknown :1;
- UINT8 None :1;
- UINT8 SingleBitErrorCorrect :1;
- UINT8 DoubleBitErrorCorrect :1;
- UINT8 ErrorScrubbing :1;
- UINT8 Reserved :2;
+ UINT8 Other : 1;
+ UINT8 Unknown : 1;
+ UINT8 None : 1;
+ UINT8 SingleBitErrorCorrect : 1;
+ UINT8 DoubleBitErrorCorrect : 1;
+ UINT8 ErrorScrubbing : 1;
+ UINT8 Reserved : 2;
} MEMORY_ERROR_CORRECT_CAPABILITY;
///
/// Memory Controller Information - Interleave Support.
///
-typedef enum {
+typedef enum {
MemoryInterleaveOther = 0x01,
MemoryInterleaveUnknown = 0x02,
MemoryInterleaveOneWay = 0x03,
@@ -780,100 +987,100 @@ typedef enum {
/// Memory Controller Information - Memory Speeds.
///
typedef struct {
- UINT16 Other :1;
- UINT16 Unknown :1;
- UINT16 SeventyNs:1;
- UINT16 SixtyNs :1;
- UINT16 FiftyNs :1;
- UINT16 Reserved :11;
+ UINT16 Other : 1;
+ UINT16 Unknown : 1;
+ UINT16 SeventyNs : 1;
+ UINT16 SixtyNs : 1;
+ UINT16 FiftyNs : 1;
+ UINT16 Reserved : 11;
} MEMORY_SPEED_TYPE;
///
/// Memory Controller Information (Type 5, Obsolete).
///
-/// The information in this structure defines the attributes of the system's memory controller(s)
-/// and the supported attributes of any memory-modules present in the sockets controlled by
-/// this controller.
-/// Note: This structure, and its companion Memory Module Information (Type 6, Obsolete),
+/// The information in this structure defines the attributes of the system's memory controller(s)
+/// and the supported attributes of any memory-modules present in the sockets controlled by
+/// this controller.
+/// Note: This structure, and its companion Memory Module Information (Type 6, Obsolete),
/// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16)
/// and Memory Device (Type 17) structures should be used instead. BIOS providers might
/// choose to implement both memory description types to allow existing DMI browsers
/// to properly display the system's memory attributes.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 ErrDetectMethod; ///< The enumeration value from MEMORY_ERROR_DETECT_METHOD.
- MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability;
- UINT8 SupportInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE.
- UINT8 CurrentInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE .
- UINT8 MaxMemoryModuleSize;
- MEMORY_SPEED_TYPE SupportSpeed;
- UINT16 SupportMemoryType;
- UINT8 MemoryModuleVoltage;
- UINT8 AssociatedMemorySlotNum;
- UINT16 MemoryModuleConfigHandles[1];
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 ErrDetectMethod; ///< The enumeration value from MEMORY_ERROR_DETECT_METHOD.
+ MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability;
+ UINT8 SupportInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE.
+ UINT8 CurrentInterleave; ///< The enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE .
+ UINT8 MaxMemoryModuleSize;
+ MEMORY_SPEED_TYPE SupportSpeed;
+ UINT16 SupportMemoryType;
+ UINT8 MemoryModuleVoltage;
+ UINT8 AssociatedMemorySlotNum;
+ UINT16 MemoryModuleConfigHandles[1];
} SMBIOS_TABLE_TYPE5;
///
/// Memory Module Information - Memory Types
///
typedef struct {
- UINT16 Other :1;
- UINT16 Unknown :1;
- UINT16 Standard :1;
- UINT16 FastPageMode:1;
- UINT16 Edo :1;
- UINT16 Parity :1;
- UINT16 Ecc :1;
- UINT16 Simm :1;
- UINT16 Dimm :1;
- UINT16 BurstEdo :1;
- UINT16 Sdram :1;
- UINT16 Reserved :5;
+ UINT16 Other : 1;
+ UINT16 Unknown : 1;
+ UINT16 Standard : 1;
+ UINT16 FastPageMode : 1;
+ UINT16 Edo : 1;
+ UINT16 Parity : 1;
+ UINT16 Ecc : 1;
+ UINT16 Simm : 1;
+ UINT16 Dimm : 1;
+ UINT16 BurstEdo : 1;
+ UINT16 Sdram : 1;
+ UINT16 Reserved : 5;
} MEMORY_CURRENT_TYPE;
///
/// Memory Module Information - Memory Size.
///
typedef struct {
- UINT8 InstalledOrEnabledSize :7; ///< Size (n), where 2**n is the size in MB.
- UINT8 SingleOrDoubleBank :1;
+ UINT8 InstalledOrEnabledSize : 7; ///< Size (n), where 2**n is the size in MB.
+ UINT8 SingleOrDoubleBank : 1;
} MEMORY_INSTALLED_ENABLED_SIZE;
///
/// Memory Module Information (Type 6, Obsolete)
///
-/// One Memory Module Information structure is included for each memory-module socket
+/// One Memory Module Information structure is included for each memory-module socket
/// in the system. The structure describes the speed, type, size, and error status
-/// of each system memory module. The supported attributes of each module are described
-/// by the "owning" Memory Controller Information structure.
-/// Note: This structure, and its companion Memory Controller Information (Type 5, Obsolete),
+/// of each system memory module. The supported attributes of each module are described
+/// by the "owning" Memory Controller Information structure.
+/// Note: This structure, and its companion Memory Controller Information (Type 5, Obsolete),
/// are obsolete starting with version 2.1 of this specification. The Physical Memory Array (Type 16)
/// and Memory Device (Type 17) structures should be used instead.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING SocketDesignation;
- UINT8 BankConnections;
- UINT8 CurrentSpeed;
- MEMORY_CURRENT_TYPE CurrentMemoryType;
- MEMORY_INSTALLED_ENABLED_SIZE InstalledSize;
- MEMORY_INSTALLED_ENABLED_SIZE EnabledSize;
- UINT8 ErrorStatus;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING SocketDesignation;
+ UINT8 BankConnections;
+ UINT8 CurrentSpeed;
+ MEMORY_CURRENT_TYPE CurrentMemoryType;
+ MEMORY_INSTALLED_ENABLED_SIZE InstalledSize;
+ MEMORY_INSTALLED_ENABLED_SIZE EnabledSize;
+ UINT8 ErrorStatus;
} SMBIOS_TABLE_TYPE6;
///
/// Cache Information - SRAM Type.
///
typedef struct {
- UINT16 Other :1;
- UINT16 Unknown :1;
- UINT16 NonBurst :1;
- UINT16 Burst :1;
- UINT16 PipelineBurst :1;
- UINT16 Synchronous :1;
- UINT16 Asynchronous :1;
- UINT16 Reserved :9;
+ UINT16 Other : 1;
+ UINT16 Unknown : 1;
+ UINT16 NonBurst : 1;
+ UINT16 Burst : 1;
+ UINT16 PipelineBurst : 1;
+ UINT16 Synchronous : 1;
+ UINT16 Asynchronous : 1;
+ UINT16 Reserved : 9;
} CACHE_SRAM_TYPE_DATA;
///
@@ -889,7 +1096,7 @@ typedef enum {
} CACHE_ERROR_TYPE_DATA;
///
-/// Cache Information - System Cache Type.
+/// Cache Information - System Cache Type.
///
typedef enum {
CacheTypeOther = 0x01,
@@ -900,7 +1107,7 @@ typedef enum {
} CACHE_TYPE_DATA;
///
-/// Cache Information - Associativity.
+/// Cache Information - Associativity.
///
typedef enum {
CacheAssociativityOther = 0x01,
@@ -922,209 +1129,243 @@ typedef enum {
///
/// Cache Information (Type 7).
///
-/// The information in this structure defines the attributes of CPU cache device in the system.
+/// The information in this structure defines the attributes of CPU cache device in the system.
/// One structure is specified for each such device, whether the device is internal to
/// or external to the CPU module. Cache modules can be associated with a processor structure
/// in one or two ways, depending on the SMBIOS version.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING SocketDesignation;
- UINT16 CacheConfiguration;
- UINT16 MaximumCacheSize;
- UINT16 InstalledSize;
- CACHE_SRAM_TYPE_DATA SupportedSRAMType;
- CACHE_SRAM_TYPE_DATA CurrentSRAMType;
- UINT8 CacheSpeed;
- UINT8 ErrorCorrectionType; ///< The enumeration value from CACHE_ERROR_TYPE_DATA.
- UINT8 SystemCacheType; ///< The enumeration value from CACHE_TYPE_DATA.
- UINT8 Associativity; ///< The enumeration value from CACHE_ASSOCIATIVITY_DATA.
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING SocketDesignation;
+ UINT16 CacheConfiguration;
+ UINT16 MaximumCacheSize;
+ UINT16 InstalledSize;
+ CACHE_SRAM_TYPE_DATA SupportedSRAMType;
+ CACHE_SRAM_TYPE_DATA CurrentSRAMType;
+ UINT8 CacheSpeed;
+ UINT8 ErrorCorrectionType; ///< The enumeration value from CACHE_ERROR_TYPE_DATA.
+ UINT8 SystemCacheType; ///< The enumeration value from CACHE_TYPE_DATA.
+ UINT8 Associativity; ///< The enumeration value from CACHE_ASSOCIATIVITY_DATA.
+ //
+ // Add for smbios 3.1.0
+ //
+ UINT32 MaximumCacheSize2;
+ UINT32 InstalledSize2;
} SMBIOS_TABLE_TYPE7;
///
-/// Port Connector Information - Connector Types.
+/// Port Connector Information - Connector Types.
///
typedef enum {
- PortConnectorTypeNone = 0x00,
- PortConnectorTypeCentronics = 0x01,
- PortConnectorTypeMiniCentronics = 0x02,
- PortConnectorTypeProprietary = 0x03,
- PortConnectorTypeDB25Male = 0x04,
- PortConnectorTypeDB25Female = 0x05,
- PortConnectorTypeDB15Male = 0x06,
- PortConnectorTypeDB15Female = 0x07,
- PortConnectorTypeDB9Male = 0x08,
- PortConnectorTypeDB9Female = 0x09,
- PortConnectorTypeRJ11 = 0x0A,
- PortConnectorTypeRJ45 = 0x0B,
- PortConnectorType50PinMiniScsi = 0x0C,
- PortConnectorTypeMiniDin = 0x0D,
- PortConnectorTypeMicroDin = 0x0E,
- PortConnectorTypePS2 = 0x0F,
- PortConnectorTypeInfrared = 0x10,
- PortConnectorTypeHpHil = 0x11,
- PortConnectorTypeUsb = 0x12,
- PortConnectorTypeSsaScsi = 0x13,
- PortConnectorTypeCircularDin8Male = 0x14,
- PortConnectorTypeCircularDin8Female = 0x15,
- PortConnectorTypeOnboardIde = 0x16,
- PortConnectorTypeOnboardFloppy = 0x17,
- PortConnectorType9PinDualInline = 0x18,
- PortConnectorType25PinDualInline = 0x19,
- PortConnectorType50PinDualInline = 0x1A,
- PortConnectorType68PinDualInline = 0x1B,
- PortConnectorTypeOnboardSoundInput = 0x1C,
- PortConnectorTypeMiniCentronicsType14 = 0x1D,
- PortConnectorTypeMiniCentronicsType26 = 0x1E,
- PortConnectorTypeHeadPhoneMiniJack = 0x1F,
- PortConnectorTypeBNC = 0x20,
- PortConnectorType1394 = 0x21,
- PortConnectorTypeSasSata = 0x22,
- PortConnectorTypePC98 = 0xA0,
- PortConnectorTypePC98Hireso = 0xA1,
- PortConnectorTypePCH98 = 0xA2,
- PortConnectorTypePC98Note = 0xA3,
- PortConnectorTypePC98Full = 0xA4,
- PortConnectorTypeOther = 0xFF
+ PortConnectorTypeNone = 0x00,
+ PortConnectorTypeCentronics = 0x01,
+ PortConnectorTypeMiniCentronics = 0x02,
+ PortConnectorTypeProprietary = 0x03,
+ PortConnectorTypeDB25Male = 0x04,
+ PortConnectorTypeDB25Female = 0x05,
+ PortConnectorTypeDB15Male = 0x06,
+ PortConnectorTypeDB15Female = 0x07,
+ PortConnectorTypeDB9Male = 0x08,
+ PortConnectorTypeDB9Female = 0x09,
+ PortConnectorTypeRJ11 = 0x0A,
+ PortConnectorTypeRJ45 = 0x0B,
+ PortConnectorType50PinMiniScsi = 0x0C,
+ PortConnectorTypeMiniDin = 0x0D,
+ PortConnectorTypeMicroDin = 0x0E,
+ PortConnectorTypePS2 = 0x0F,
+ PortConnectorTypeInfrared = 0x10,
+ PortConnectorTypeHpHil = 0x11,
+ PortConnectorTypeUsb = 0x12,
+ PortConnectorTypeSsaScsi = 0x13,
+ PortConnectorTypeCircularDin8Male = 0x14,
+ PortConnectorTypeCircularDin8Female = 0x15,
+ PortConnectorTypeOnboardIde = 0x16,
+ PortConnectorTypeOnboardFloppy = 0x17,
+ PortConnectorType9PinDualInline = 0x18,
+ PortConnectorType25PinDualInline = 0x19,
+ PortConnectorType50PinDualInline = 0x1A,
+ PortConnectorType68PinDualInline = 0x1B,
+ PortConnectorTypeOnboardSoundInput = 0x1C,
+ PortConnectorTypeMiniCentronicsType14 = 0x1D,
+ PortConnectorTypeMiniCentronicsType26 = 0x1E,
+ PortConnectorTypeHeadPhoneMiniJack = 0x1F,
+ PortConnectorTypeBNC = 0x20,
+ PortConnectorType1394 = 0x21,
+ PortConnectorTypeSasSata = 0x22,
+ PortConnectorTypeUsbTypeC = 0x23,
+ PortConnectorTypePC98 = 0xA0,
+ PortConnectorTypePC98Hireso = 0xA1,
+ PortConnectorTypePCH98 = 0xA2,
+ PortConnectorTypePC98Note = 0xA3,
+ PortConnectorTypePC98Full = 0xA4,
+ PortConnectorTypeOther = 0xFF
} MISC_PORT_CONNECTOR_TYPE;
///
-/// Port Connector Information - Port Types
+/// Port Connector Information - Port Types
///
typedef enum {
- PortTypeNone = 0x00,
- PortTypeParallelXtAtCompatible = 0x01,
- PortTypeParallelPortPs2 = 0x02,
- PortTypeParallelPortEcp = 0x03,
- PortTypeParallelPortEpp = 0x04,
- PortTypeParallelPortEcpEpp = 0x05,
- PortTypeSerialXtAtCompatible = 0x06,
- PortTypeSerial16450Compatible = 0x07,
- PortTypeSerial16550Compatible = 0x08,
- PortTypeSerial16550ACompatible = 0x09,
- PortTypeScsi = 0x0A,
- PortTypeMidi = 0x0B,
- PortTypeJoyStick = 0x0C,
- PortTypeKeyboard = 0x0D,
- PortTypeMouse = 0x0E,
- PortTypeSsaScsi = 0x0F,
- PortTypeUsb = 0x10,
- PortTypeFireWire = 0x11,
- PortTypePcmciaTypeI = 0x12,
- PortTypePcmciaTypeII = 0x13,
- PortTypePcmciaTypeIII = 0x14,
- PortTypeCardBus = 0x15,
- PortTypeAccessBusPort = 0x16,
- PortTypeScsiII = 0x17,
- PortTypeScsiWide = 0x18,
- PortTypePC98 = 0x19,
- PortTypePC98Hireso = 0x1A,
- PortTypePCH98 = 0x1B,
- PortTypeVideoPort = 0x1C,
- PortTypeAudioPort = 0x1D,
- PortTypeModemPort = 0x1E,
- PortTypeNetworkPort = 0x1F,
- PortType8251Compatible = 0xA0,
- PortType8251FifoCompatible = 0xA1,
- PortTypeOther = 0xFF
+ PortTypeNone = 0x00,
+ PortTypeParallelXtAtCompatible = 0x01,
+ PortTypeParallelPortPs2 = 0x02,
+ PortTypeParallelPortEcp = 0x03,
+ PortTypeParallelPortEpp = 0x04,
+ PortTypeParallelPortEcpEpp = 0x05,
+ PortTypeSerialXtAtCompatible = 0x06,
+ PortTypeSerial16450Compatible = 0x07,
+ PortTypeSerial16550Compatible = 0x08,
+ PortTypeSerial16550ACompatible = 0x09,
+ PortTypeScsi = 0x0A,
+ PortTypeMidi = 0x0B,
+ PortTypeJoyStick = 0x0C,
+ PortTypeKeyboard = 0x0D,
+ PortTypeMouse = 0x0E,
+ PortTypeSsaScsi = 0x0F,
+ PortTypeUsb = 0x10,
+ PortTypeFireWire = 0x11,
+ PortTypePcmciaTypeI = 0x12,
+ PortTypePcmciaTypeII = 0x13,
+ PortTypePcmciaTypeIII = 0x14,
+ PortTypeCardBus = 0x15,
+ PortTypeAccessBusPort = 0x16,
+ PortTypeScsiII = 0x17,
+ PortTypeScsiWide = 0x18,
+ PortTypePC98 = 0x19,
+ PortTypePC98Hireso = 0x1A,
+ PortTypePCH98 = 0x1B,
+ PortTypeVideoPort = 0x1C,
+ PortTypeAudioPort = 0x1D,
+ PortTypeModemPort = 0x1E,
+ PortTypeNetworkPort = 0x1F,
+ PortTypeSata = 0x20,
+ PortTypeSas = 0x21,
+ PortTypeMfdp = 0x22, ///< Multi-Function Display Port
+ PortTypeThunderbolt = 0x23,
+ PortType8251Compatible = 0xA0,
+ PortType8251FifoCompatible = 0xA1,
+ PortTypeOther = 0xFF
} MISC_PORT_TYPE;
///
/// Port Connector Information (Type 8).
///
-/// The information in this structure defines the attributes of a system port connector,
-/// e.g. parallel, serial, keyboard, or mouse ports. The port's type and connector information
+/// The information in this structure defines the attributes of a system port connector,
+/// e.g. parallel, serial, keyboard, or mouse ports. The port's type and connector information
/// are provided. One structure is present for each port provided by the system.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING InternalReferenceDesignator;
- UINT8 InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
- SMBIOS_TABLE_STRING ExternalReferenceDesignator;
- UINT8 ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
- UINT8 PortType; ///< The enumeration value from MISC_PORT_TYPE.
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING InternalReferenceDesignator;
+ UINT8 InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
+ SMBIOS_TABLE_STRING ExternalReferenceDesignator;
+ UINT8 ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
+ UINT8 PortType; ///< The enumeration value from MISC_PORT_TYPE.
} SMBIOS_TABLE_TYPE8;
///
/// System Slots - Slot Type
///
typedef enum {
- SlotTypeOther = 0x01,
- SlotTypeUnknown = 0x02,
- SlotTypeIsa = 0x03,
- SlotTypeMca = 0x04,
- SlotTypeEisa = 0x05,
- SlotTypePci = 0x06,
- SlotTypePcmcia = 0x07,
- SlotTypeVlVesa = 0x08,
- SlotTypeProprietary = 0x09,
- SlotTypeProcessorCardSlot = 0x0A,
- SlotTypeProprietaryMemoryCardSlot = 0x0B,
- SlotTypeIORiserCardSlot = 0x0C,
- SlotTypeNuBus = 0x0D,
- SlotTypePci66MhzCapable = 0x0E,
- SlotTypeAgp = 0x0F,
- SlotTypeApg2X = 0x10,
- SlotTypeAgp4X = 0x11,
- SlotTypePciX = 0x12,
- SlotTypeAgp4x = 0x13,
- SlotTypePC98C20 = 0xA0,
- SlotTypePC98C24 = 0xA1,
- SlotTypePC98E = 0xA2,
- SlotTypePC98LocalBus = 0xA3,
- SlotTypePC98Card = 0xA4,
- SlotTypePciExpress = 0xA5,
- SlotTypePciExpressX1 = 0xA6,
- SlotTypePciExpressX2 = 0xA7,
- SlotTypePciExpressX4 = 0xA8,
- SlotTypePciExpressX8 = 0xA9,
- SlotTypePciExpressX16 = 0xAA,
- SlotTypePciExpressGen2 = 0xAB,
- SlotTypePciExpressGen2X1 = 0xAC,
- SlotTypePciExpressGen2X2 = 0xAD,
- SlotTypePciExpressGen2X4 = 0xAE,
- SlotTypePciExpressGen2X8 = 0xAF,
- SlotTypePciExpressGen2X16 = 0xB0,
- SlotTypePciExpressGen3 = 0xB1,
- SlotTypePciExpressGen3X1 = 0xB2,
- SlotTypePciExpressGen3X2 = 0xB3,
- SlotTypePciExpressGen3X4 = 0xB4,
- SlotTypePciExpressGen3X8 = 0xB5,
- SlotTypePciExpressGen3X16 = 0xB6
+ SlotTypeOther = 0x01,
+ SlotTypeUnknown = 0x02,
+ SlotTypeIsa = 0x03,
+ SlotTypeMca = 0x04,
+ SlotTypeEisa = 0x05,
+ SlotTypePci = 0x06,
+ SlotTypePcmcia = 0x07,
+ SlotTypeVlVesa = 0x08,
+ SlotTypeProprietary = 0x09,
+ SlotTypeProcessorCardSlot = 0x0A,
+ SlotTypeProprietaryMemoryCardSlot = 0x0B,
+ SlotTypeIORiserCardSlot = 0x0C,
+ SlotTypeNuBus = 0x0D,
+ SlotTypePci66MhzCapable = 0x0E,
+ SlotTypeAgp = 0x0F,
+ SlotTypeApg2X = 0x10,
+ SlotTypeAgp4X = 0x11,
+ SlotTypePciX = 0x12,
+ SlotTypeAgp8X = 0x13,
+ SlotTypeM2Socket1_DP = 0x14,
+ SlotTypeM2Socket1_SD = 0x15,
+ SlotTypeM2Socket2 = 0x16,
+ SlotTypeM2Socket3 = 0x17,
+ SlotTypeMxmTypeI = 0x18,
+ SlotTypeMxmTypeII = 0x19,
+ SlotTypeMxmTypeIIIStandard = 0x1A,
+ SlotTypeMxmTypeIIIHe = 0x1B,
+ SlotTypeMxmTypeIV = 0x1C,
+ SlotTypeMxm30TypeA = 0x1D,
+ SlotTypeMxm30TypeB = 0x1E,
+ SlotTypePciExpressGen2Sff_8639 = 0x1F,
+ SlotTypePciExpressGen3Sff_8639 = 0x20,
+ SlotTypePciExpressMini52pinWithBSKO = 0x21, ///< PCI Express Mini 52-pin (CEM spec. 2.0) with bottom-side keep-outs.
+ SlotTypePciExpressMini52pinWithoutBSKO = 0x22, ///< PCI Express Mini 52-pin (CEM spec. 2.0) without bottom-side keep-outs.
+ SlotTypePciExpressMini76pin = 0x23, ///< PCI Express Mini 76-pin (CEM spec. 2.0) Corresponds to Display-Mini card.
+ SlotTypeCXLFlexbus10 = 0x30,
+ SlotTypePC98C20 = 0xA0,
+ SlotTypePC98C24 = 0xA1,
+ SlotTypePC98E = 0xA2,
+ SlotTypePC98LocalBus = 0xA3,
+ SlotTypePC98Card = 0xA4,
+ SlotTypePciExpress = 0xA5,
+ SlotTypePciExpressX1 = 0xA6,
+ SlotTypePciExpressX2 = 0xA7,
+ SlotTypePciExpressX4 = 0xA8,
+ SlotTypePciExpressX8 = 0xA9,
+ SlotTypePciExpressX16 = 0xAA,
+ SlotTypePciExpressGen2 = 0xAB,
+ SlotTypePciExpressGen2X1 = 0xAC,
+ SlotTypePciExpressGen2X2 = 0xAD,
+ SlotTypePciExpressGen2X4 = 0xAE,
+ SlotTypePciExpressGen2X8 = 0xAF,
+ SlotTypePciExpressGen2X16 = 0xB0,
+ SlotTypePciExpressGen3 = 0xB1,
+ SlotTypePciExpressGen3X1 = 0xB2,
+ SlotTypePciExpressGen3X2 = 0xB3,
+ SlotTypePciExpressGen3X4 = 0xB4,
+ SlotTypePciExpressGen3X8 = 0xB5,
+ SlotTypePciExpressGen3X16 = 0xB6,
+ SlotTypePciExpressGen4 = 0xB8,
+ SlotTypePciExpressGen4X1 = 0xB9,
+ SlotTypePciExpressGen4X2 = 0xBA,
+ SlotTypePciExpressGen4X4 = 0xBB,
+ SlotTypePciExpressGen4X8 = 0xBC,
+ SlotTypePciExpressGen4X16 = 0xBD
} MISC_SLOT_TYPE;
///
/// System Slots - Slot Data Bus Width.
///
typedef enum {
- SlotDataBusWidthOther = 0x01,
- SlotDataBusWidthUnknown = 0x02,
- SlotDataBusWidth8Bit = 0x03,
- SlotDataBusWidth16Bit = 0x04,
- SlotDataBusWidth32Bit = 0x05,
- SlotDataBusWidth64Bit = 0x06,
- SlotDataBusWidth128Bit = 0x07,
- SlotDataBusWidth1X = 0x08, ///< Or X1
- SlotDataBusWidth2X = 0x09, ///< Or X2
- SlotDataBusWidth4X = 0x0A, ///< Or X4
- SlotDataBusWidth8X = 0x0B, ///< Or X8
- SlotDataBusWidth12X = 0x0C, ///< Or X12
- SlotDataBusWidth16X = 0x0D, ///< Or X16
- SlotDataBusWidth32X = 0x0E ///< Or X32
+ SlotDataBusWidthOther = 0x01,
+ SlotDataBusWidthUnknown = 0x02,
+ SlotDataBusWidth8Bit = 0x03,
+ SlotDataBusWidth16Bit = 0x04,
+ SlotDataBusWidth32Bit = 0x05,
+ SlotDataBusWidth64Bit = 0x06,
+ SlotDataBusWidth128Bit = 0x07,
+ SlotDataBusWidth1X = 0x08, ///< Or X1
+ SlotDataBusWidth2X = 0x09, ///< Or X2
+ SlotDataBusWidth4X = 0x0A, ///< Or X4
+ SlotDataBusWidth8X = 0x0B, ///< Or X8
+ SlotDataBusWidth12X = 0x0C, ///< Or X12
+ SlotDataBusWidth16X = 0x0D, ///< Or X16
+ SlotDataBusWidth32X = 0x0E ///< Or X32
} MISC_SLOT_DATA_BUS_WIDTH;
///
/// System Slots - Current Usage.
///
typedef enum {
- SlotUsageOther = 0x01,
- SlotUsageUnknown = 0x02,
- SlotUsageAvailable = 0x03,
- SlotUsageInUse = 0x04
+ SlotUsageOther = 0x01,
+ SlotUsageUnknown = 0x02,
+ SlotUsageAvailable = 0x03,
+ SlotUsageInUse = 0x04,
+ SlotUsageUnavailable = 0x05
} MISC_SLOT_USAGE;
///
-/// System Slots - Slot Length.
+/// System Slots - Slot Length.
///
typedef enum {
SlotLengthOther = 0x01,
@@ -1134,55 +1375,81 @@ typedef enum {
} MISC_SLOT_LENGTH;
///
-/// System Slots - Slot Characteristics 1.
+/// System Slots - Slot Characteristics 1.
///
typedef struct {
- UINT8 CharacteristicsUnknown :1;
- UINT8 Provides50Volts :1;
- UINT8 Provides33Volts :1;
- UINT8 SharedSlot :1;
- UINT8 PcCard16Supported :1;
- UINT8 CardBusSupported :1;
- UINT8 ZoomVideoSupported :1;
- UINT8 ModemRingResumeSupported:1;
+ UINT8 CharacteristicsUnknown : 1;
+ UINT8 Provides50Volts : 1;
+ UINT8 Provides33Volts : 1;
+ UINT8 SharedSlot : 1;
+ UINT8 PcCard16Supported : 1;
+ UINT8 CardBusSupported : 1;
+ UINT8 ZoomVideoSupported : 1;
+ UINT8 ModemRingResumeSupported : 1;
} MISC_SLOT_CHARACTERISTICS1;
///
-/// System Slots - Slot Characteristics 2.
+/// System Slots - Slot Characteristics 2.
///
typedef struct {
- UINT8 PmeSignalSupported :1;
- UINT8 HotPlugDevicesSupported :1;
- UINT8 SmbusSignalSupported :1;
- UINT8 Reserved :5; ///< Set to 0.
+ UINT8 PmeSignalSupported : 1;
+ UINT8 HotPlugDevicesSupported : 1;
+ UINT8 SmbusSignalSupported : 1;
+ UINT8 BifurcationSupported : 1;
+ UINT8 AsyncSurpriseRemoval : 1;
+ UINT8 FlexbusSlotCxl10Capable : 1;
+ UINT8 FlexbusSlotCxl20Capable : 1;
+ UINT8 Reserved : 1; ///< Set to 0.
} MISC_SLOT_CHARACTERISTICS2;
+///
+/// System Slots - Peer Segment/Bus/Device/Function/Width Groups
+///
+typedef struct {
+ UINT16 SegmentGroupNum;
+ UINT8 BusNum;
+ UINT8 DevFuncNum;
+ UINT8 DataBusWidth;
+} MISC_SLOT_PEER_GROUP;
+
///
/// System Slots (Type 9)
///
-/// The information in this structure defines the attributes of a system slot.
+/// The information in this structure defines the attributes of a system slot.
/// One structure is provided for each slot in the system.
///
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING SlotDesignation;
- UINT8 SlotType; ///< The enumeration value from MISC_SLOT_TYPE.
- UINT8 SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH.
- UINT8 CurrentUsage; ///< The enumeration value from MISC_SLOT_USAGE.
- UINT8 SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH.
- UINT16 SlotID;
- MISC_SLOT_CHARACTERISTICS1 SlotCharacteristics1;
- MISC_SLOT_CHARACTERISTICS2 SlotCharacteristics2;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING SlotDesignation;
+ UINT8 SlotType; ///< The enumeration value from MISC_SLOT_TYPE.
+ UINT8 SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH.
+ UINT8 CurrentUsage; ///< The enumeration value from MISC_SLOT_USAGE.
+ UINT8 SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH.
+ UINT16 SlotID;
+ MISC_SLOT_CHARACTERISTICS1 SlotCharacteristics1;
+ MISC_SLOT_CHARACTERISTICS2 SlotCharacteristics2;
//
// Add for smbios 2.6
//
- UINT16 SegmentGroupNum;
- UINT8 BusNum;
- UINT8 DevFuncNum;
+ UINT16 SegmentGroupNum;
+ UINT8 BusNum;
+ UINT8 DevFuncNum;
+ //
+ // Add for smbios 3.2
+ //
+ UINT8 DataBusWidth;
+ UINT8 PeerGroupingCount;
+ MISC_SLOT_PEER_GROUP PeerGroups[1];
+ //
+ // Add for smbios 3.4
+ //
+ UINT8 SlotInformation;
+ UINT8 SlotPhysicalWidth;
+ UINT16 SlotPitch;
} SMBIOS_TABLE_TYPE9;
///
-/// On Board Devices Information - Device Types.
+/// On Board Devices Information - Device Types.
///
typedef enum {
OnBoardDeviceTypeOther = 0x01,
@@ -1201,157 +1468,156 @@ typedef enum {
/// Device Item Entry
///
typedef struct {
- UINT8 DeviceType; ///< Bit [6:0] - enumeration type of device from MISC_ONBOARD_DEVICE_TYPE.
+ UINT8 DeviceType; ///< Bit [6:0] - enumeration type of device from MISC_ONBOARD_DEVICE_TYPE.
///< Bit 7 - 1 : device enabled, 0 : device disabled.
- SMBIOS_TABLE_STRING DescriptionString;
+ SMBIOS_TABLE_STRING DescriptionString;
} DEVICE_STRUCT;
///
/// On Board Devices Information (Type 10, obsolete).
///
-/// Note: This structure is obsolete starting with version 2.6 specification; the Onboard Devices Extended
-/// Information (Type 41) structure should be used instead . BIOS providers can choose to implement both
-/// types to allow existing SMBIOS browsers to properly display the system's onboard devices information.
-/// The information in this structure defines the attributes of devices that are onboard (soldered onto)
+/// Note: This structure is obsolete starting with version 2.6 specification; the Onboard Devices Extended
+/// Information (Type 41) structure should be used instead . BIOS providers can choose to implement both
+/// types to allow existing SMBIOS browsers to properly display the system's onboard devices information.
+/// The information in this structure defines the attributes of devices that are onboard (soldered onto)
/// a system element, usually the baseboard. In general, an entry in this table implies that the BIOS
/// has some level of control over the enabling of the associated device for use by the system.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- DEVICE_STRUCT Device[1];
+ SMBIOS_STRUCTURE Hdr;
+ DEVICE_STRUCT Device[1];
} SMBIOS_TABLE_TYPE10;
///
/// OEM Strings (Type 11).
-/// This structure contains free form strings defined by the OEM. Examples of this are:
-/// Part Numbers for Reference Documents for the system, contact information for the manufacturer, etc.
+/// This structure contains free form strings defined by the OEM. Examples of this are:
+/// Part Numbers for Reference Documents for the system, contact information for the manufacturer, etc.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 StringCount;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 StringCount;
} SMBIOS_TABLE_TYPE11;
///
/// System Configuration Options (Type 12).
///
-/// This structure contains information required to configure the base board's Jumpers and Switches.
+/// This structure contains information required to configure the base board's Jumpers and Switches.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 StringCount;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 StringCount;
} SMBIOS_TABLE_TYPE12;
-
///
/// BIOS Language Information (Type 13).
///
-/// The information in this structure defines the installable language attributes of the BIOS.
-///
+/// The information in this structure defines the installable language attributes of the BIOS.
+///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 InstallableLanguages;
- UINT8 Flags;
- UINT8 Reserved[15];
- SMBIOS_TABLE_STRING CurrentLanguages;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 InstallableLanguages;
+ UINT8 Flags;
+ UINT8 Reserved[15];
+ SMBIOS_TABLE_STRING CurrentLanguages;
} SMBIOS_TABLE_TYPE13;
///
/// Group Item Entry
///
typedef struct {
- UINT8 ItemType;
- UINT16 ItemHandle;
+ UINT8 ItemType;
+ UINT16 ItemHandle;
} GROUP_STRUCT;
///
/// Group Associations (Type 14).
///
-/// The Group Associations structure is provided for OEMs who want to specify
-/// the arrangement or hierarchy of certain components (including other Group Associations)
-/// within the system.
+/// The Group Associations structure is provided for OEMs who want to specify
+/// the arrangement or hierarchy of certain components (including other Group Associations)
+/// within the system.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING GroupName;
- GROUP_STRUCT Group[1];
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING GroupName;
+ GROUP_STRUCT Group[1];
} SMBIOS_TABLE_TYPE14;
///
/// System Event Log - Event Log Types.
-///
+///
typedef enum {
- EventLogTypeReserved = 0x00,
- EventLogTypeSingleBitECC = 0x01,
- EventLogTypeMultiBitECC = 0x02,
- EventLogTypeParityMemErr = 0x03,
- EventLogTypeBusTimeOut = 0x04,
- EventLogTypeIOChannelCheck = 0x05,
- EventLogTypeSoftwareNMI = 0x06,
- EventLogTypePOSTMemResize = 0x07,
- EventLogTypePOSTErr = 0x08,
- EventLogTypePCIParityErr = 0x09,
- EventLogTypePCISystemErr = 0x0A,
- EventLogTypeCPUFailure = 0x0B,
- EventLogTypeEISATimeOut = 0x0C,
- EventLogTypeMemLogDisabled = 0x0D,
- EventLogTypeLoggingDisabled = 0x0E,
- EventLogTypeSysLimitExce = 0x10,
- EventLogTypeAsyncHWTimer = 0x11,
- EventLogTypeSysConfigInfo = 0x12,
- EventLogTypeHDInfo = 0x13,
- EventLogTypeSysReconfig = 0x14,
- EventLogTypeUncorrectCPUErr = 0x15,
- EventLogTypeAreaResetAndClr = 0x16,
- EventLogTypeSystemBoot = 0x17,
- EventLogTypeUnused = 0x18, ///< 0x18 - 0x7F
- EventLogTypeAvailForSys = 0x80, ///< 0x80 - 0xFE
- EventLogTypeEndOfLog = 0xFF
+ EventLogTypeReserved = 0x00,
+ EventLogTypeSingleBitECC = 0x01,
+ EventLogTypeMultiBitECC = 0x02,
+ EventLogTypeParityMemErr = 0x03,
+ EventLogTypeBusTimeOut = 0x04,
+ EventLogTypeIOChannelCheck = 0x05,
+ EventLogTypeSoftwareNMI = 0x06,
+ EventLogTypePOSTMemResize = 0x07,
+ EventLogTypePOSTErr = 0x08,
+ EventLogTypePCIParityErr = 0x09,
+ EventLogTypePCISystemErr = 0x0A,
+ EventLogTypeCPUFailure = 0x0B,
+ EventLogTypeEISATimeOut = 0x0C,
+ EventLogTypeMemLogDisabled = 0x0D,
+ EventLogTypeLoggingDisabled = 0x0E,
+ EventLogTypeSysLimitExce = 0x10,
+ EventLogTypeAsyncHWTimer = 0x11,
+ EventLogTypeSysConfigInfo = 0x12,
+ EventLogTypeHDInfo = 0x13,
+ EventLogTypeSysReconfig = 0x14,
+ EventLogTypeUncorrectCPUErr = 0x15,
+ EventLogTypeAreaResetAndClr = 0x16,
+ EventLogTypeSystemBoot = 0x17,
+ EventLogTypeUnused = 0x18, ///< 0x18 - 0x7F
+ EventLogTypeAvailForSys = 0x80, ///< 0x80 - 0xFE
+ EventLogTypeEndOfLog = 0xFF
} EVENT_LOG_TYPE_DATA;
///
-/// System Event Log - Variable Data Format Types.
-///
+/// System Event Log - Variable Data Format Types.
+///
typedef enum {
- EventLogVariableNone = 0x00,
- EventLogVariableHandle = 0x01,
- EventLogVariableMutilEvent = 0x02,
- EventLogVariableMutilEventHandle = 0x03,
- EventLogVariablePOSTResultBitmap = 0x04,
- EventLogVariableSysManagementType = 0x05,
- EventLogVariableMutliEventSysManagmentType = 0x06,
- EventLogVariableUnused = 0x07,
- EventLogVariableOEMAssigned = 0x80
+ EventLogVariableNone = 0x00,
+ EventLogVariableHandle = 0x01,
+ EventLogVariableMutilEvent = 0x02,
+ EventLogVariableMutilEventHandle = 0x03,
+ EventLogVariablePOSTResultBitmap = 0x04,
+ EventLogVariableSysManagementType = 0x05,
+ EventLogVariableMutliEventSysManagmentType = 0x06,
+ EventLogVariableUnused = 0x07,
+ EventLogVariableOEMAssigned = 0x80
} EVENT_LOG_VARIABLE_DATA;
///
/// Event Log Type Descriptors
///
typedef struct {
- UINT8 LogType; ///< The enumeration value from EVENT_LOG_TYPE_DATA.
- UINT8 DataFormatType;
+ UINT8 LogType; ///< The enumeration value from EVENT_LOG_TYPE_DATA.
+ UINT8 DataFormatType;
} EVENT_LOG_TYPE;
///
/// System Event Log (Type 15).
///
-/// The presence of this structure within the SMBIOS data returned for a system indicates
-/// that the system supports an event log. An event log is a fixed-length area within a
-/// non-volatile storage element, starting with a fixed-length (and vendor-specific) header
-/// record, followed by one or more variable-length log records.
-///
-typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT16 LogAreaLength;
- UINT16 LogHeaderStartOffset;
- UINT16 LogDataStartOffset;
- UINT8 AccessMethod;
- UINT8 LogStatus;
- UINT32 LogChangeToken;
- UINT32 AccessMethodAddress;
- UINT8 LogHeaderFormat;
- UINT8 NumberOfSupportedLogTypeDescriptors;
- UINT8 LengthOfLogTypeDescriptor;
- EVENT_LOG_TYPE EventLogTypeDescriptors[1];
+/// The presence of this structure within the SMBIOS data returned for a system indicates
+/// that the system supports an event log. An event log is a fixed-length area within a
+/// non-volatile storage element, starting with a fixed-length (and vendor-specific) header
+/// record, followed by one or more variable-length log records.
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ UINT16 LogAreaLength;
+ UINT16 LogHeaderStartOffset;
+ UINT16 LogDataStartOffset;
+ UINT8 AccessMethod;
+ UINT8 LogStatus;
+ UINT32 LogChangeToken;
+ UINT32 AccessMethodAddress;
+ UINT8 LogHeaderFormat;
+ UINT8 NumberOfSupportedLogTypeDescriptors;
+ UINT8 LengthOfLogTypeDescriptor;
+ EVENT_LOG_TYPE EventLogTypeDescriptors[1];
} SMBIOS_TABLE_TYPE15;
///
@@ -1371,601 +1637,685 @@ typedef enum {
MemoryArrayLocationPc98C20AddonCard = 0xA0,
MemoryArrayLocationPc98C24AddonCard = 0xA1,
MemoryArrayLocationPc98EAddonCard = 0xA2,
- MemoryArrayLocationPc98LocalBusAddonCard = 0xA3
+ MemoryArrayLocationPc98LocalBusAddonCard = 0xA3,
+ MemoryArrayLocationCXLAddonCard = 0xA4
} MEMORY_ARRAY_LOCATION;
///
/// Physical Memory Array - Use.
///
typedef enum {
- MemoryArrayUseOther = 0x01,
- MemoryArrayUseUnknown = 0x02,
- MemoryArrayUseSystemMemory = 0x03,
- MemoryArrayUseVideoMemory = 0x04,
- MemoryArrayUseFlashMemory = 0x05,
- MemoryArrayUseNonVolatileRam = 0x06,
- MemoryArrayUseCacheMemory = 0x07
+ MemoryArrayUseOther = 0x01,
+ MemoryArrayUseUnknown = 0x02,
+ MemoryArrayUseSystemMemory = 0x03,
+ MemoryArrayUseVideoMemory = 0x04,
+ MemoryArrayUseFlashMemory = 0x05,
+ MemoryArrayUseNonVolatileRam = 0x06,
+ MemoryArrayUseCacheMemory = 0x07
} MEMORY_ARRAY_USE;
///
-/// Physical Memory Array - Error Correction Types.
+/// Physical Memory Array - Error Correction Types.
///
typedef enum {
- MemoryErrorCorrectionOther = 0x01,
- MemoryErrorCorrectionUnknown = 0x02,
- MemoryErrorCorrectionNone = 0x03,
- MemoryErrorCorrectionParity = 0x04,
- MemoryErrorCorrectionSingleBitEcc = 0x05,
- MemoryErrorCorrectionMultiBitEcc = 0x06,
- MemoryErrorCorrectionCrc = 0x07
+ MemoryErrorCorrectionOther = 0x01,
+ MemoryErrorCorrectionUnknown = 0x02,
+ MemoryErrorCorrectionNone = 0x03,
+ MemoryErrorCorrectionParity = 0x04,
+ MemoryErrorCorrectionSingleBitEcc = 0x05,
+ MemoryErrorCorrectionMultiBitEcc = 0x06,
+ MemoryErrorCorrectionCrc = 0x07
} MEMORY_ERROR_CORRECTION;
///
/// Physical Memory Array (Type 16).
///
-/// This structure describes a collection of memory devices that operate
-/// together to form a memory address space.
+/// This structure describes a collection of memory devices that operate
+/// together to form a memory address space.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 Location; ///< The enumeration value from MEMORY_ARRAY_LOCATION.
- UINT8 Use; ///< The enumeration value from MEMORY_ARRAY_USE.
- UINT8 MemoryErrorCorrection; ///< The enumeration value from MEMORY_ERROR_CORRECTION.
- UINT32 MaximumCapacity;
- UINT16 MemoryErrorInformationHandle;
- UINT16 NumberOfMemoryDevices;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 Location; ///< The enumeration value from MEMORY_ARRAY_LOCATION.
+ UINT8 Use; ///< The enumeration value from MEMORY_ARRAY_USE.
+ UINT8 MemoryErrorCorrection; ///< The enumeration value from MEMORY_ERROR_CORRECTION.
+ UINT32 MaximumCapacity;
+ UINT16 MemoryErrorInformationHandle;
+ UINT16 NumberOfMemoryDevices;
//
// Add for smbios 2.7
//
- UINT64 ExtendedMaximumCapacity;
+ UINT64 ExtendedMaximumCapacity;
} SMBIOS_TABLE_TYPE16;
///
/// Memory Device - Form Factor.
///
typedef enum {
- MemoryFormFactorOther = 0x01,
- MemoryFormFactorUnknown = 0x02,
- MemoryFormFactorSimm = 0x03,
- MemoryFormFactorSip = 0x04,
- MemoryFormFactorChip = 0x05,
- MemoryFormFactorDip = 0x06,
- MemoryFormFactorZip = 0x07,
- MemoryFormFactorProprietaryCard = 0x08,
- MemoryFormFactorDimm = 0x09,
- MemoryFormFactorTsop = 0x0A,
- MemoryFormFactorRowOfChips = 0x0B,
- MemoryFormFactorRimm = 0x0C,
- MemoryFormFactorSodimm = 0x0D,
- MemoryFormFactorSrimm = 0x0E,
- MemoryFormFactorFbDimm = 0x0F
+ MemoryFormFactorOther = 0x01,
+ MemoryFormFactorUnknown = 0x02,
+ MemoryFormFactorSimm = 0x03,
+ MemoryFormFactorSip = 0x04,
+ MemoryFormFactorChip = 0x05,
+ MemoryFormFactorDip = 0x06,
+ MemoryFormFactorZip = 0x07,
+ MemoryFormFactorProprietaryCard = 0x08,
+ MemoryFormFactorDimm = 0x09,
+ MemoryFormFactorTsop = 0x0A,
+ MemoryFormFactorRowOfChips = 0x0B,
+ MemoryFormFactorRimm = 0x0C,
+ MemoryFormFactorSodimm = 0x0D,
+ MemoryFormFactorSrimm = 0x0E,
+ MemoryFormFactorFbDimm = 0x0F,
+ MemoryFormFactorDie = 0x10
} MEMORY_FORM_FACTOR;
///
/// Memory Device - Type
///
typedef enum {
- MemoryTypeOther = 0x01,
- MemoryTypeUnknown = 0x02,
- MemoryTypeDram = 0x03,
- MemoryTypeEdram = 0x04,
- MemoryTypeVram = 0x05,
- MemoryTypeSram = 0x06,
- MemoryTypeRam = 0x07,
- MemoryTypeRom = 0x08,
- MemoryTypeFlash = 0x09,
- MemoryTypeEeprom = 0x0A,
- MemoryTypeFeprom = 0x0B,
- MemoryTypeEprom = 0x0C,
- MemoryTypeCdram = 0x0D,
- MemoryType3Dram = 0x0E,
- MemoryTypeSdram = 0x0F,
- MemoryTypeSgram = 0x10,
- MemoryTypeRdram = 0x11,
- MemoryTypeDdr = 0x12,
- MemoryTypeDdr2 = 0x13,
- MemoryTypeDdr2FbDimm = 0x14,
- MemoryTypeDdr3 = 0x18,
- MemoryTypeFbd2 = 0x19
+ MemoryTypeOther = 0x01,
+ MemoryTypeUnknown = 0x02,
+ MemoryTypeDram = 0x03,
+ MemoryTypeEdram = 0x04,
+ MemoryTypeVram = 0x05,
+ MemoryTypeSram = 0x06,
+ MemoryTypeRam = 0x07,
+ MemoryTypeRom = 0x08,
+ MemoryTypeFlash = 0x09,
+ MemoryTypeEeprom = 0x0A,
+ MemoryTypeFeprom = 0x0B,
+ MemoryTypeEprom = 0x0C,
+ MemoryTypeCdram = 0x0D,
+ MemoryType3Dram = 0x0E,
+ MemoryTypeSdram = 0x0F,
+ MemoryTypeSgram = 0x10,
+ MemoryTypeRdram = 0x11,
+ MemoryTypeDdr = 0x12,
+ MemoryTypeDdr2 = 0x13,
+ MemoryTypeDdr2FbDimm = 0x14,
+ MemoryTypeDdr3 = 0x18,
+ MemoryTypeFbd2 = 0x19,
+ MemoryTypeDdr4 = 0x1A,
+ MemoryTypeLpddr = 0x1B,
+ MemoryTypeLpddr2 = 0x1C,
+ MemoryTypeLpddr3 = 0x1D,
+ MemoryTypeLpddr4 = 0x1E,
+ MemoryTypeLogicalNonVolatileDevice = 0x1F,
+ MemoryTypeHBM = 0x20,
+ MemoryTypeHBM2 = 0x21,
+ MemoryTypeDdr5 = 0x22,
+ MemoryTypeLpddr5 = 0x23
} MEMORY_DEVICE_TYPE;
-typedef struct {
- UINT16 Reserved :1;
- UINT16 Other :1;
- UINT16 Unknown :1;
- UINT16 FastPaged :1;
- UINT16 StaticColumn :1;
- UINT16 PseudoStatic :1;
- UINT16 Rambus :1;
- UINT16 Synchronous :1;
- UINT16 Cmos :1;
- UINT16 Edo :1;
- UINT16 WindowDram :1;
- UINT16 CacheDram :1;
- UINT16 Nonvolatile :1;
- UINT16 Registered :1;
- UINT16 Unbuffered :1;
- UINT16 Reserved1 :1;
+///
+/// Memory Device - Type Detail
+///
+typedef struct {
+ UINT16 Reserved : 1;
+ UINT16 Other : 1;
+ UINT16 Unknown : 1;
+ UINT16 FastPaged : 1;
+ UINT16 StaticColumn : 1;
+ UINT16 PseudoStatic : 1;
+ UINT16 Rambus : 1;
+ UINT16 Synchronous : 1;
+ UINT16 Cmos : 1;
+ UINT16 Edo : 1;
+ UINT16 WindowDram : 1;
+ UINT16 CacheDram : 1;
+ UINT16 Nonvolatile : 1;
+ UINT16 Registered : 1;
+ UINT16 Unbuffered : 1;
+ UINT16 LrDimm : 1;
} MEMORY_DEVICE_TYPE_DETAIL;
+///
+/// Memory Device - Memory Technology
+///
+typedef enum {
+ MemoryTechnologyOther = 0x01,
+ MemoryTechnologyUnknown = 0x02,
+ MemoryTechnologyDram = 0x03,
+ MemoryTechnologyNvdimmN = 0x04,
+ MemoryTechnologyNvdimmF = 0x05,
+ MemoryTechnologyNvdimmP = 0x06,
+ //
+ // This definition is updated to represent Intel
+ // Optane DC Persistent Memory in SMBIOS spec 3.4.0
+ //
+ MemoryTechnologyIntelOptanePersistentMemory = 0x07
+} MEMORY_DEVICE_TECHNOLOGY;
+
+///
+/// Memory Device - Memory Operating Mode Capability
+///
+typedef union {
+ ///
+ /// Individual bit fields
+ ///
+ struct {
+ UINT16 Reserved : 1; ///< Set to 0.
+ UINT16 Other : 1;
+ UINT16 Unknown : 1;
+ UINT16 VolatileMemory : 1;
+ UINT16 ByteAccessiblePersistentMemory : 1;
+ UINT16 BlockAccessiblePersistentMemory : 1;
+ UINT16 Reserved2 : 10; ///< Set to 0.
+ } Bits;
+ ///
+ /// All bit fields as a 16-bit value
+ ///
+ UINT16 Uint16;
+} MEMORY_DEVICE_OPERATING_MODE_CAPABILITY;
+
///
/// Memory Device (Type 17).
///
-/// This structure describes a single memory device that is part of
+/// This structure describes a single memory device that is part of
/// a larger Physical Memory Array (Type 16).
-/// Note: If a system includes memory-device sockets, the SMBIOS implementation
-/// includes a Memory Device structure instance for each slot, whether or not the
+/// Note: If a system includes memory-device sockets, the SMBIOS implementation
+/// includes a Memory Device structure instance for each slot, whether or not the
/// socket is currently populated.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT16 MemoryArrayHandle;
- UINT16 MemoryErrorInformationHandle;
- UINT16 TotalWidth;
- UINT16 DataWidth;
- UINT16 Size;
- UINT8 FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR.
- UINT8 DeviceSet;
- SMBIOS_TABLE_STRING DeviceLocator;
- SMBIOS_TABLE_STRING BankLocator;
- UINT8 MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE.
- MEMORY_DEVICE_TYPE_DETAIL TypeDetail;
- UINT16 Speed;
- SMBIOS_TABLE_STRING Manufacturer;
- SMBIOS_TABLE_STRING SerialNumber;
- SMBIOS_TABLE_STRING AssetTag;
- SMBIOS_TABLE_STRING PartNumber;
+ SMBIOS_STRUCTURE Hdr;
+ UINT16 MemoryArrayHandle;
+ UINT16 MemoryErrorInformationHandle;
+ UINT16 TotalWidth;
+ UINT16 DataWidth;
+ UINT16 Size;
+ UINT8 FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR.
+ UINT8 DeviceSet;
+ SMBIOS_TABLE_STRING DeviceLocator;
+ SMBIOS_TABLE_STRING BankLocator;
+ UINT8 MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE.
+ MEMORY_DEVICE_TYPE_DETAIL TypeDetail;
+ UINT16 Speed;
+ SMBIOS_TABLE_STRING Manufacturer;
+ SMBIOS_TABLE_STRING SerialNumber;
+ SMBIOS_TABLE_STRING AssetTag;
+ SMBIOS_TABLE_STRING PartNumber;
//
// Add for smbios 2.6
- //
- UINT8 Attributes;
+ //
+ UINT8 Attributes;
//
// Add for smbios 2.7
//
- UINT32 ExtendedSize;
- UINT16 ConfiguredMemoryClockSpeed;
+ UINT32 ExtendedSize;
+ //
+ // Keep using name "ConfiguredMemoryClockSpeed" for compatibility
+ // although this field is renamed from "Configured Memory Clock Speed"
+ // to "Configured Memory Speed" in smbios 3.2.0.
+ //
+ UINT16 ConfiguredMemoryClockSpeed;
+ //
+ // Add for smbios 2.8.0
+ //
+ UINT16 MinimumVoltage;
+ UINT16 MaximumVoltage;
+ UINT16 ConfiguredVoltage;
+ //
+ // Add for smbios 3.2.0
+ //
+ UINT8 MemoryTechnology; ///< The enumeration value from MEMORY_DEVICE_TECHNOLOGY
+ MEMORY_DEVICE_OPERATING_MODE_CAPABILITY MemoryOperatingModeCapability;
+ SMBIOS_TABLE_STRING FirmwareVersion;
+ UINT16 ModuleManufacturerID;
+ UINT16 ModuleProductID;
+ UINT16 MemorySubsystemControllerManufacturerID;
+ UINT16 MemorySubsystemControllerProductID;
+ UINT64 NonVolatileSize;
+ UINT64 VolatileSize;
+ UINT64 CacheSize;
+ UINT64 LogicalSize;
+ //
+ // Add for smbios 3.3.0
+ //
+ UINT32 ExtendedSpeed;
+ UINT32 ExtendedConfiguredMemorySpeed;
} SMBIOS_TABLE_TYPE17;
///
-/// 32-bit Memory Error Information - Error Type.
-///
-typedef enum {
- MemoryErrorOther = 0x01,
- MemoryErrorUnknown = 0x02,
- MemoryErrorOk = 0x03,
- MemoryErrorBadRead = 0x04,
- MemoryErrorParity = 0x05,
- MemoryErrorSigleBit = 0x06,
- MemoryErrorDoubleBit = 0x07,
- MemoryErrorMultiBit = 0x08,
- MemoryErrorNibble = 0x09,
- MemoryErrorChecksum = 0x0A,
- MemoryErrorCrc = 0x0B,
- MemoryErrorCorrectSingleBit = 0x0C,
- MemoryErrorCorrected = 0x0D,
- MemoryErrorUnCorrectable = 0x0E
+/// 32-bit Memory Error Information - Error Type.
+///
+typedef enum {
+ MemoryErrorOther = 0x01,
+ MemoryErrorUnknown = 0x02,
+ MemoryErrorOk = 0x03,
+ MemoryErrorBadRead = 0x04,
+ MemoryErrorParity = 0x05,
+ MemoryErrorSigleBit = 0x06,
+ MemoryErrorDoubleBit = 0x07,
+ MemoryErrorMultiBit = 0x08,
+ MemoryErrorNibble = 0x09,
+ MemoryErrorChecksum = 0x0A,
+ MemoryErrorCrc = 0x0B,
+ MemoryErrorCorrectSingleBit = 0x0C,
+ MemoryErrorCorrected = 0x0D,
+ MemoryErrorUnCorrectable = 0x0E
} MEMORY_ERROR_TYPE;
///
-/// 32-bit Memory Error Information - Error Granularity.
+/// 32-bit Memory Error Information - Error Granularity.
///
-typedef enum {
- MemoryGranularityOther = 0x01,
- MemoryGranularityOtherUnknown = 0x02,
- MemoryGranularityDeviceLevel = 0x03,
- MemoryGranularityMemPartitionLevel = 0x04
+typedef enum {
+ MemoryGranularityOther = 0x01,
+ MemoryGranularityOtherUnknown = 0x02,
+ MemoryGranularityDeviceLevel = 0x03,
+ MemoryGranularityMemPartitionLevel = 0x04
} MEMORY_ERROR_GRANULARITY;
///
-/// 32-bit Memory Error Information - Error Operation.
+/// 32-bit Memory Error Information - Error Operation.
///
-typedef enum {
- MemoryErrorOperationOther = 0x01,
- MemoryErrorOperationUnknown = 0x02,
- MemoryErrorOperationRead = 0x03,
- MemoryErrorOperationWrite = 0x04,
- MemoryErrorOperationPartialWrite = 0x05
+typedef enum {
+ MemoryErrorOperationOther = 0x01,
+ MemoryErrorOperationUnknown = 0x02,
+ MemoryErrorOperationRead = 0x03,
+ MemoryErrorOperationWrite = 0x04,
+ MemoryErrorOperationPartialWrite = 0x05
} MEMORY_ERROR_OPERATION;
///
/// 32-bit Memory Error Information (Type 18).
-///
-/// This structure identifies the specifics of an error that might be detected
+///
+/// This structure identifies the specifics of an error that might be detected
/// within a Physical Memory Array.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
- UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
- UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
- UINT32 VendorSyndrome;
- UINT32 MemoryArrayErrorAddress;
- UINT32 DeviceErrorAddress;
- UINT32 ErrorResolution;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
+ UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
+ UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
+ UINT32 VendorSyndrome;
+ UINT32 MemoryArrayErrorAddress;
+ UINT32 DeviceErrorAddress;
+ UINT32 ErrorResolution;
} SMBIOS_TABLE_TYPE18;
///
/// Memory Array Mapped Address (Type 19).
///
-/// This structure provides the address mapping for a Physical Memory Array.
+/// This structure provides the address mapping for a Physical Memory Array.
/// One structure is present for each contiguous address range described.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT32 StartingAddress;
- UINT32 EndingAddress;
- UINT16 MemoryArrayHandle;
- UINT8 PartitionWidth;
+ SMBIOS_STRUCTURE Hdr;
+ UINT32 StartingAddress;
+ UINT32 EndingAddress;
+ UINT16 MemoryArrayHandle;
+ UINT8 PartitionWidth;
//
// Add for smbios 2.7
//
- UINT64 ExtendedStartingAddress;
- UINT64 ExtendedEndingAddress;
+ UINT64 ExtendedStartingAddress;
+ UINT64 ExtendedEndingAddress;
} SMBIOS_TABLE_TYPE19;
///
/// Memory Device Mapped Address (Type 20).
///
-/// This structure maps memory address space usually to a device-level granularity.
-/// One structure is present for each contiguous address range described.
+/// This structure maps memory address space usually to a device-level granularity.
+/// One structure is present for each contiguous address range described.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT32 StartingAddress;
- UINT32 EndingAddress;
- UINT16 MemoryDeviceHandle;
- UINT16 MemoryArrayMappedAddressHandle;
- UINT8 PartitionRowPosition;
- UINT8 InterleavePosition;
- UINT8 InterleavedDataDepth;
+ SMBIOS_STRUCTURE Hdr;
+ UINT32 StartingAddress;
+ UINT32 EndingAddress;
+ UINT16 MemoryDeviceHandle;
+ UINT16 MemoryArrayMappedAddressHandle;
+ UINT8 PartitionRowPosition;
+ UINT8 InterleavePosition;
+ UINT8 InterleavedDataDepth;
//
// Add for smbios 2.7
//
- UINT64 ExtendedStartingAddress;
- UINT64 ExtendedEndingAddress;
+ UINT64 ExtendedStartingAddress;
+ UINT64 ExtendedEndingAddress;
} SMBIOS_TABLE_TYPE20;
///
/// Built-in Pointing Device - Type
///
typedef enum {
- PointingDeviceTypeOther = 0x01,
- PointingDeviceTypeUnknown = 0x02,
- PointingDeviceTypeMouse = 0x03,
- PointingDeviceTypeTrackBall = 0x04,
- PointingDeviceTypeTrackPoint = 0x05,
- PointingDeviceTypeGlidePoint = 0x06,
- PointingDeviceTouchPad = 0x07,
- PointingDeviceTouchScreen = 0x08,
- PointingDeviceOpticalSensor = 0x09
+ PointingDeviceTypeOther = 0x01,
+ PointingDeviceTypeUnknown = 0x02,
+ PointingDeviceTypeMouse = 0x03,
+ PointingDeviceTypeTrackBall = 0x04,
+ PointingDeviceTypeTrackPoint = 0x05,
+ PointingDeviceTypeGlidePoint = 0x06,
+ PointingDeviceTouchPad = 0x07,
+ PointingDeviceTouchScreen = 0x08,
+ PointingDeviceOpticalSensor = 0x09
} BUILTIN_POINTING_DEVICE_TYPE;
///
/// Built-in Pointing Device - Interface.
///
typedef enum {
- PointingDeviceInterfaceOther = 0x01,
- PointingDeviceInterfaceUnknown = 0x02,
- PointingDeviceInterfaceSerial = 0x03,
- PointingDeviceInterfacePs2 = 0x04,
- PointingDeviceInterfaceInfrared = 0x05,
- PointingDeviceInterfaceHpHil = 0x06,
- PointingDeviceInterfaceBusMouse = 0x07,
- PointingDeviceInterfaceADB = 0x08,
- PointingDeviceInterfaceBusMouseDB9 = 0xA0,
- PointingDeviceInterfaceBusMouseMicroDin = 0xA1,
- PointingDeviceInterfaceUsb = 0xA2
+ PointingDeviceInterfaceOther = 0x01,
+ PointingDeviceInterfaceUnknown = 0x02,
+ PointingDeviceInterfaceSerial = 0x03,
+ PointingDeviceInterfacePs2 = 0x04,
+ PointingDeviceInterfaceInfrared = 0x05,
+ PointingDeviceInterfaceHpHil = 0x06,
+ PointingDeviceInterfaceBusMouse = 0x07,
+ PointingDeviceInterfaceADB = 0x08,
+ PointingDeviceInterfaceBusMouseDB9 = 0xA0,
+ PointingDeviceInterfaceBusMouseMicroDin = 0xA1,
+ PointingDeviceInterfaceUsb = 0xA2
} BUILTIN_POINTING_DEVICE_INTERFACE;
///
/// Built-in Pointing Device (Type 21).
///
-/// This structure describes the attributes of the built-in pointing device for the
+/// This structure describes the attributes of the built-in pointing device for the
/// system. The presence of this structure does not imply that the built-in
-/// pointing device is active for the system's use!
+/// pointing device is active for the system's use!
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 Type; ///< The enumeration value from BUILTIN_POINTING_DEVICE_TYPE.
- UINT8 Interface; ///< The enumeration value from BUILTIN_POINTING_DEVICE_INTERFACE.
- UINT8 NumberOfButtons;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 Type; ///< The enumeration value from BUILTIN_POINTING_DEVICE_TYPE.
+ UINT8 Interface; ///< The enumeration value from BUILTIN_POINTING_DEVICE_INTERFACE.
+ UINT8 NumberOfButtons;
} SMBIOS_TABLE_TYPE21;
///
/// Portable Battery - Device Chemistry
///
-typedef enum {
- PortableBatteryDeviceChemistryOther = 0x01,
- PortableBatteryDeviceChemistryUnknown = 0x02,
- PortableBatteryDeviceChemistryLeadAcid = 0x03,
- PortableBatteryDeviceChemistryNickelCadmium = 0x04,
- PortableBatteryDeviceChemistryNickelMetalHydride = 0x05,
- PortableBatteryDeviceChemistryLithiumIon = 0x06,
- PortableBatteryDeviceChemistryZincAir = 0x07,
- PortableBatteryDeviceChemistryLithiumPolymer = 0x08
+typedef enum {
+ PortableBatteryDeviceChemistryOther = 0x01,
+ PortableBatteryDeviceChemistryUnknown = 0x02,
+ PortableBatteryDeviceChemistryLeadAcid = 0x03,
+ PortableBatteryDeviceChemistryNickelCadmium = 0x04,
+ PortableBatteryDeviceChemistryNickelMetalHydride = 0x05,
+ PortableBatteryDeviceChemistryLithiumIon = 0x06,
+ PortableBatteryDeviceChemistryZincAir = 0x07,
+ PortableBatteryDeviceChemistryLithiumPolymer = 0x08
} PORTABLE_BATTERY_DEVICE_CHEMISTRY;
///
/// Portable Battery (Type 22).
///
-/// This structure describes the attributes of the portable battery(s) for the system.
-/// The structure contains the static attributes for the group. Each structure describes
+/// This structure describes the attributes of the portable battery(s) for the system.
+/// The structure contains the static attributes for the group. Each structure describes
/// a single battery pack's attributes.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Location;
- SMBIOS_TABLE_STRING Manufacturer;
- SMBIOS_TABLE_STRING ManufactureDate;
- SMBIOS_TABLE_STRING SerialNumber;
- SMBIOS_TABLE_STRING DeviceName;
- UINT8 DeviceChemistry; ///< The enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY.
- UINT16 DeviceCapacity;
- UINT16 DesignVoltage;
- SMBIOS_TABLE_STRING SBDSVersionNumber;
- UINT8 MaximumErrorInBatteryData;
- UINT16 SBDSSerialNumber;
- UINT16 SBDSManufactureDate;
- SMBIOS_TABLE_STRING SBDSDeviceChemistry;
- UINT8 DesignCapacityMultiplier;
- UINT32 OEMSpecific;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Location;
+ SMBIOS_TABLE_STRING Manufacturer;
+ SMBIOS_TABLE_STRING ManufactureDate;
+ SMBIOS_TABLE_STRING SerialNumber;
+ SMBIOS_TABLE_STRING DeviceName;
+ UINT8 DeviceChemistry; ///< The enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY.
+ UINT16 DeviceCapacity;
+ UINT16 DesignVoltage;
+ SMBIOS_TABLE_STRING SBDSVersionNumber;
+ UINT8 MaximumErrorInBatteryData;
+ UINT16 SBDSSerialNumber;
+ UINT16 SBDSManufactureDate;
+ SMBIOS_TABLE_STRING SBDSDeviceChemistry;
+ UINT8 DesignCapacityMultiplier;
+ UINT32 OEMSpecific;
} SMBIOS_TABLE_TYPE22;
///
/// System Reset (Type 23)
///
-/// This structure describes whether Automatic System Reset functions enabled (Status).
+/// This structure describes whether Automatic System Reset functions enabled (Status).
/// If the system has a watchdog Timer and the timer is not reset (Timer Reset)
-/// before the Interval elapses, an automatic system reset will occur. The system will re-boot
-/// according to the Boot Option. This function may repeat until the Limit is reached, at which time
-/// the system will re-boot according to the Boot Option at Limit.
+/// before the Interval elapses, an automatic system reset will occur. The system will re-boot
+/// according to the Boot Option. This function may repeat until the Limit is reached, at which time
+/// the system will re-boot according to the Boot Option at Limit.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 Capabilities;
- UINT16 ResetCount;
- UINT16 ResetLimit;
- UINT16 TimerInterval;
- UINT16 Timeout;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 Capabilities;
+ UINT16 ResetCount;
+ UINT16 ResetLimit;
+ UINT16 TimerInterval;
+ UINT16 Timeout;
} SMBIOS_TABLE_TYPE23;
///
/// Hardware Security (Type 24).
///
-/// This structure describes the system-wide hardware security settings.
+/// This structure describes the system-wide hardware security settings.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 HardwareSecuritySettings;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 HardwareSecuritySettings;
} SMBIOS_TABLE_TYPE24;
///
/// System Power Controls (Type 25).
///
-/// This structure describes the attributes for controlling the main power supply to the system.
-/// Software that interprets this structure uses the month, day, hour, minute, and second values
-/// to determine the number of seconds until the next power-on of the system. The presence of
-/// this structure implies that a timed power-on facility is available for the system.
+/// This structure describes the attributes for controlling the main power supply to the system.
+/// Software that interprets this structure uses the month, day, hour, minute, and second values
+/// to determine the number of seconds until the next power-on of the system. The presence of
+/// this structure implies that a timed power-on facility is available for the system.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 NextScheduledPowerOnMonth;
- UINT8 NextScheduledPowerOnDayOfMonth;
- UINT8 NextScheduledPowerOnHour;
- UINT8 NextScheduledPowerOnMinute;
- UINT8 NextScheduledPowerOnSecond;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 NextScheduledPowerOnMonth;
+ UINT8 NextScheduledPowerOnDayOfMonth;
+ UINT8 NextScheduledPowerOnHour;
+ UINT8 NextScheduledPowerOnMinute;
+ UINT8 NextScheduledPowerOnSecond;
} SMBIOS_TABLE_TYPE25;
///
/// Voltage Probe - Location and Status.
///
typedef struct {
- UINT8 VoltageProbeSite :5;
- UINT8 VoltageProbeStatus :3;
+ UINT8 VoltageProbeSite : 5;
+ UINT8 VoltageProbeStatus : 3;
} MISC_VOLTAGE_PROBE_LOCATION;
///
/// Voltage Probe (Type 26)
///
-/// This describes the attributes for a voltage probe in the system.
+/// This describes the attributes for a voltage probe in the system.
/// Each structure describes a single voltage probe.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Description;
- MISC_VOLTAGE_PROBE_LOCATION LocationAndStatus;
- UINT16 MaximumValue;
- UINT16 MinimumValue;
- UINT16 Resolution;
- UINT16 Tolerance;
- UINT16 Accuracy;
- UINT32 OEMDefined;
- UINT16 NominalValue;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Description;
+ MISC_VOLTAGE_PROBE_LOCATION LocationAndStatus;
+ UINT16 MaximumValue;
+ UINT16 MinimumValue;
+ UINT16 Resolution;
+ UINT16 Tolerance;
+ UINT16 Accuracy;
+ UINT32 OEMDefined;
+ UINT16 NominalValue;
} SMBIOS_TABLE_TYPE26;
///
/// Cooling Device - Device Type and Status.
///
typedef struct {
- UINT8 CoolingDevice :5;
- UINT8 CoolingDeviceStatus :3;
+ UINT8 CoolingDevice : 5;
+ UINT8 CoolingDeviceStatus : 3;
} MISC_COOLING_DEVICE_TYPE;
///
/// Cooling Device (Type 27)
///
-/// This structure describes the attributes for a cooling device in the system.
-/// Each structure describes a single cooling device.
-///
+/// This structure describes the attributes for a cooling device in the system.
+/// Each structure describes a single cooling device.
+///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT16 TemperatureProbeHandle;
- MISC_COOLING_DEVICE_TYPE DeviceTypeAndStatus;
- UINT8 CoolingUnitGroup;
- UINT32 OEMDefined;
- UINT16 NominalSpeed;
+ SMBIOS_STRUCTURE Hdr;
+ UINT16 TemperatureProbeHandle;
+ MISC_COOLING_DEVICE_TYPE DeviceTypeAndStatus;
+ UINT8 CoolingUnitGroup;
+ UINT32 OEMDefined;
+ UINT16 NominalSpeed;
//
// Add for smbios 2.7
//
- SMBIOS_TABLE_STRING Description;
+ SMBIOS_TABLE_STRING Description;
} SMBIOS_TABLE_TYPE27;
///
/// Temperature Probe - Location and Status.
///
typedef struct {
- UINT8 TemperatureProbeSite :5;
- UINT8 TemperatureProbeStatus :3;
+ UINT8 TemperatureProbeSite : 5;
+ UINT8 TemperatureProbeStatus : 3;
} MISC_TEMPERATURE_PROBE_LOCATION;
///
/// Temperature Probe (Type 28).
///
-/// This structure describes the attributes for a temperature probe in the system.
-/// Each structure describes a single temperature probe.
+/// This structure describes the attributes for a temperature probe in the system.
+/// Each structure describes a single temperature probe.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Description;
- MISC_TEMPERATURE_PROBE_LOCATION LocationAndStatus;
- UINT16 MaximumValue;
- UINT16 MinimumValue;
- UINT16 Resolution;
- UINT16 Tolerance;
- UINT16 Accuracy;
- UINT32 OEMDefined;
- UINT16 NominalValue;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Description;
+ MISC_TEMPERATURE_PROBE_LOCATION LocationAndStatus;
+ UINT16 MaximumValue;
+ UINT16 MinimumValue;
+ UINT16 Resolution;
+ UINT16 Tolerance;
+ UINT16 Accuracy;
+ UINT32 OEMDefined;
+ UINT16 NominalValue;
} SMBIOS_TABLE_TYPE28;
///
/// Electrical Current Probe - Location and Status.
///
typedef struct {
- UINT8 ElectricalCurrentProbeSite :5;
- UINT8 ElectricalCurrentProbeStatus :3;
+ UINT8 ElectricalCurrentProbeSite : 5;
+ UINT8 ElectricalCurrentProbeStatus : 3;
} MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
///
/// Electrical Current Probe (Type 29).
///
/// This structure describes the attributes for an electrical current probe in the system.
-/// Each structure describes a single electrical current probe.
-///
-typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Description;
- MISC_ELECTRICAL_CURRENT_PROBE_LOCATION LocationAndStatus;
- UINT16 MaximumValue;
- UINT16 MinimumValue;
- UINT16 Resolution;
- UINT16 Tolerance;
- UINT16 Accuracy;
- UINT32 OEMDefined;
- UINT16 NominalValue;
+/// Each structure describes a single electrical current probe.
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Description;
+ MISC_ELECTRICAL_CURRENT_PROBE_LOCATION LocationAndStatus;
+ UINT16 MaximumValue;
+ UINT16 MinimumValue;
+ UINT16 Resolution;
+ UINT16 Tolerance;
+ UINT16 Accuracy;
+ UINT32 OEMDefined;
+ UINT16 NominalValue;
} SMBIOS_TABLE_TYPE29;
///
/// Out-of-Band Remote Access (Type 30).
///
-/// This structure describes the attributes and policy settings of a hardware facility
-/// that may be used to gain remote access to a hardware system when the operating system
-/// is not available due to power-down status, hardware failures, or boot failures.
+/// This structure describes the attributes and policy settings of a hardware facility
+/// that may be used to gain remote access to a hardware system when the operating system
+/// is not available due to power-down status, hardware failures, or boot failures.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING ManufacturerName;
- UINT8 Connections;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING ManufacturerName;
+ UINT8 Connections;
} SMBIOS_TABLE_TYPE30;
///
/// Boot Integrity Services (BIS) Entry Point (Type 31).
///
-/// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS).
-///
-typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 Checksum;
- UINT8 Reserved1;
- UINT16 Reserved2;
- UINT32 BisEntry16;
- UINT32 BisEntry32;
- UINT64 Reserved3;
- UINT32 Reserved4;
+/// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS).
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 Checksum;
+ UINT8 Reserved1;
+ UINT16 Reserved2;
+ UINT32 BisEntry16;
+ UINT32 BisEntry32;
+ UINT64 Reserved3;
+ UINT32 Reserved4;
} SMBIOS_TABLE_TYPE31;
///
/// System Boot Information - System Boot Status.
///
typedef enum {
- BootInformationStatusNoError = 0x00,
- BootInformationStatusNoBootableMedia = 0x01,
- BootInformationStatusNormalOSFailedLoading = 0x02,
- BootInformationStatusFirmwareDetectedFailure = 0x03,
- BootInformationStatusOSDetectedFailure = 0x04,
- BootInformationStatusUserRequestedBoot = 0x05,
- BootInformationStatusSystemSecurityViolation = 0x06,
- BootInformationStatusPreviousRequestedImage = 0x07,
- BootInformationStatusWatchdogTimerExpired = 0x08,
- BootInformationStatusStartReserved = 0x09,
- BootInformationStatusStartOemSpecific = 0x80,
- BootInformationStatusStartProductSpecific = 0xC0
+ BootInformationStatusNoError = 0x00,
+ BootInformationStatusNoBootableMedia = 0x01,
+ BootInformationStatusNormalOSFailedLoading = 0x02,
+ BootInformationStatusFirmwareDetectedFailure = 0x03,
+ BootInformationStatusOSDetectedFailure = 0x04,
+ BootInformationStatusUserRequestedBoot = 0x05,
+ BootInformationStatusSystemSecurityViolation = 0x06,
+ BootInformationStatusPreviousRequestedImage = 0x07,
+ BootInformationStatusWatchdogTimerExpired = 0x08,
+ BootInformationStatusStartReserved = 0x09,
+ BootInformationStatusStartOemSpecific = 0x80,
+ BootInformationStatusStartProductSpecific = 0xC0
} MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;
///
/// System Boot Information (Type 32).
///
-/// The client system firmware, e.g. BIOS, communicates the System Boot Status to the
-/// client's Pre-boot Execution Environment (PXE) boot image or OS-present management
-/// application via this structure. When used in the PXE environment, for example,
-/// this code identifies the reason the PXE was initiated and can be used by boot-image
-/// software to further automate an enterprise's PXE sessions. For example, an enterprise
-/// could choose to automatically download a hardware-diagnostic image to a client whose
+/// The client system firmware, e.g. BIOS, communicates the System Boot Status to the
+/// client's Pre-boot Execution Environment (PXE) boot image or OS-present management
+/// application via this structure. When used in the PXE environment, for example,
+/// this code identifies the reason the PXE was initiated and can be used by boot-image
+/// software to further automate an enterprise's PXE sessions. For example, an enterprise
+/// could choose to automatically download a hardware-diagnostic image to a client whose
/// reason code indicated either a firmware- or operating system-detected hardware failure.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 Reserved[6];
- UINT8 BootStatus; ///< The enumeration value from MISC_BOOT_INFORMATION_STATUS_DATA_TYPE.
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 Reserved[6];
+ UINT8 BootStatus; ///< The enumeration value from MISC_BOOT_INFORMATION_STATUS_DATA_TYPE.
} SMBIOS_TABLE_TYPE32;
///
/// 64-bit Memory Error Information (Type 33).
///
-/// This structure describes an error within a Physical Memory Array,
+/// This structure describes an error within a Physical Memory Array,
/// when the error address is above 4G (0xFFFFFFFF).
-///
-typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
- UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
- UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
- UINT32 VendorSyndrome;
- UINT64 MemoryArrayErrorAddress;
- UINT64 DeviceErrorAddress;
- UINT32 ErrorResolution;
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 ErrorType; ///< The enumeration value from MEMORY_ERROR_TYPE.
+ UINT8 ErrorGranularity; ///< The enumeration value from MEMORY_ERROR_GRANULARITY.
+ UINT8 ErrorOperation; ///< The enumeration value from MEMORY_ERROR_OPERATION.
+ UINT32 VendorSyndrome;
+ UINT64 MemoryArrayErrorAddress;
+ UINT64 DeviceErrorAddress;
+ UINT32 ErrorResolution;
} SMBIOS_TABLE_TYPE33;
///
-/// Management Device - Type.
+/// Management Device - Type.
///
typedef enum {
- ManagementDeviceTypeOther = 0x01,
- ManagementDeviceTypeUnknown = 0x02,
- ManagementDeviceTypeLm75 = 0x03,
- ManagementDeviceTypeLm78 = 0x04,
- ManagementDeviceTypeLm79 = 0x05,
- ManagementDeviceTypeLm80 = 0x06,
- ManagementDeviceTypeLm81 = 0x07,
- ManagementDeviceTypeAdm9240 = 0x08,
- ManagementDeviceTypeDs1780 = 0x09,
- ManagementDeviceTypeMaxim1617 = 0x0A,
- ManagementDeviceTypeGl518Sm = 0x0B,
- ManagementDeviceTypeW83781D = 0x0C,
- ManagementDeviceTypeHt82H791 = 0x0D
+ ManagementDeviceTypeOther = 0x01,
+ ManagementDeviceTypeUnknown = 0x02,
+ ManagementDeviceTypeLm75 = 0x03,
+ ManagementDeviceTypeLm78 = 0x04,
+ ManagementDeviceTypeLm79 = 0x05,
+ ManagementDeviceTypeLm80 = 0x06,
+ ManagementDeviceTypeLm81 = 0x07,
+ ManagementDeviceTypeAdm9240 = 0x08,
+ ManagementDeviceTypeDs1780 = 0x09,
+ ManagementDeviceTypeMaxim1617 = 0x0A,
+ ManagementDeviceTypeGl518Sm = 0x0B,
+ ManagementDeviceTypeW83781D = 0x0C,
+ ManagementDeviceTypeHt82H791 = 0x0D
} MISC_MANAGEMENT_DEVICE_TYPE;
///
-/// Management Device - Address Type.
+/// Management Device - Address Type.
///
typedef enum {
ManagementDeviceAddressTypeOther = 0x01,
@@ -1978,90 +2328,90 @@ typedef enum {
///
/// Management Device (Type 34).
///
-/// The information in this structure defines the attributes of a Management Device.
+/// The information in this structure defines the attributes of a Management Device.
/// A Management Device might control one or more fans or voltage, current, or temperature
/// probes as defined by one or more Management Device Component structures.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Description;
- UINT8 Type; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_TYPE.
- UINT32 Address;
- UINT8 AddressType; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE.
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Description;
+ UINT8 Type; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_TYPE.
+ UINT32 Address;
+ UINT8 AddressType; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE.
} SMBIOS_TABLE_TYPE34;
///
/// Management Device Component (Type 35)
///
-/// This structure associates a cooling device or environmental probe with structures
-/// that define the controlling hardware device and (optionally) the component's thresholds.
+/// This structure associates a cooling device or environmental probe with structures
+/// that define the controlling hardware device and (optionally) the component's thresholds.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING Description;
- UINT16 ManagementDeviceHandle;
- UINT16 ComponentHandle;
- UINT16 ThresholdHandle;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING Description;
+ UINT16 ManagementDeviceHandle;
+ UINT16 ComponentHandle;
+ UINT16 ThresholdHandle;
} SMBIOS_TABLE_TYPE35;
///
/// Management Device Threshold Data (Type 36).
///
-/// The information in this structure defines threshold information for
-/// a component (probe or cooling-unit) contained within a Management Device.
+/// The information in this structure defines threshold information for
+/// a component (probe or cooling-unit) contained within a Management Device.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT16 LowerThresholdNonCritical;
- UINT16 UpperThresholdNonCritical;
- UINT16 LowerThresholdCritical;
- UINT16 UpperThresholdCritical;
- UINT16 LowerThresholdNonRecoverable;
- UINT16 UpperThresholdNonRecoverable;
+ SMBIOS_STRUCTURE Hdr;
+ UINT16 LowerThresholdNonCritical;
+ UINT16 UpperThresholdNonCritical;
+ UINT16 LowerThresholdCritical;
+ UINT16 UpperThresholdCritical;
+ UINT16 LowerThresholdNonRecoverable;
+ UINT16 UpperThresholdNonRecoverable;
} SMBIOS_TABLE_TYPE36;
///
/// Memory Channel Entry.
///
typedef struct {
- UINT8 DeviceLoad;
- UINT16 DeviceHandle;
+ UINT8 DeviceLoad;
+ UINT16 DeviceHandle;
} MEMORY_DEVICE;
///
/// Memory Channel - Channel Type.
///
typedef enum {
- MemoryChannelTypeOther = 0x01,
- MemoryChannelTypeUnknown = 0x02,
- MemoryChannelTypeRambus = 0x03,
- MemoryChannelTypeSyncLink = 0x04
+ MemoryChannelTypeOther = 0x01,
+ MemoryChannelTypeUnknown = 0x02,
+ MemoryChannelTypeRambus = 0x03,
+ MemoryChannelTypeSyncLink = 0x04
} MEMORY_CHANNEL_TYPE;
///
/// Memory Channel (Type 37)
///
/// The information in this structure provides the correlation between a Memory Channel
-/// and its associated Memory Devices. Each device presents one or more loads to the channel.
+/// and its associated Memory Devices. Each device presents one or more loads to the channel.
/// The sum of all device loads cannot exceed the channel's defined maximum.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 ChannelType;
- UINT8 MaximumChannelLoad;
- UINT8 MemoryDeviceCount;
- MEMORY_DEVICE MemoryDevice[1];
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 ChannelType;
+ UINT8 MaximumChannelLoad;
+ UINT8 MemoryDeviceCount;
+ MEMORY_DEVICE MemoryDevice[1];
} SMBIOS_TABLE_TYPE37;
///
/// IPMI Device Information - BMC Interface Type
///
typedef enum {
- IPMIDeviceInfoInterfaceTypeUnknown = 0x00,
- IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< The Keyboard Controller Style.
- IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< The Server Management Interface Chip.
- IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< The Block Transfer
- IPMIDeviceInfoInterfaceTypeReserved = 0x04
+ IPMIDeviceInfoInterfaceTypeUnknown = 0x00,
+ IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< The Keyboard Controller Style.
+ IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< The Server Management Interface Chip.
+ IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< The Block Transfer
+ IPMIDeviceInfoInterfaceTypeSSIF = 0x04 ///< SMBus System Interface
} BMC_INTERFACE_TYPE;
///
@@ -2076,27 +2426,27 @@ typedef enum {
/// Providing Type 38 is recommended for backward compatibility.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 InterfaceType; ///< The enumeration value from BMC_INTERFACE_TYPE.
- UINT8 IPMISpecificationRevision;
- UINT8 I2CSlaveAddress;
- UINT8 NVStorageDeviceAddress;
- UINT64 BaseAddress;
- UINT8 BaseAddressModifier_InterruptInfo;
- UINT8 InterruptNumber;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 InterfaceType; ///< The enumeration value from BMC_INTERFACE_TYPE.
+ UINT8 IPMISpecificationRevision;
+ UINT8 I2CSlaveAddress;
+ UINT8 NVStorageDeviceAddress;
+ UINT64 BaseAddress;
+ UINT8 BaseAddressModifier_InterruptInfo;
+ UINT8 InterruptNumber;
} SMBIOS_TABLE_TYPE38;
///
/// System Power Supply - Power Supply Characteristics.
///
typedef struct {
- UINT16 PowerSupplyHotReplaceable:1;
- UINT16 PowerSupplyPresent :1;
- UINT16 PowerSupplyUnplugged :1;
- UINT16 InputVoltageRangeSwitch :4;
- UINT16 PowerSupplyStatus :3;
- UINT16 PowerSupplyType :4;
- UINT16 Reserved :2;
+ UINT16 PowerSupplyHotReplaceable : 1;
+ UINT16 PowerSupplyPresent : 1;
+ UINT16 PowerSupplyUnplugged : 1;
+ UINT16 InputVoltageRangeSwitch : 4;
+ UINT16 PowerSupplyStatus : 3;
+ UINT16 PowerSupplyType : 4;
+ UINT16 Reserved : 2;
} SYS_POWER_SUPPLY_CHARACTERISTICS;
///
@@ -2106,49 +2456,49 @@ typedef struct {
/// of this record is present for each possible power supply in a system.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 PowerUnitGroup;
- SMBIOS_TABLE_STRING Location;
- SMBIOS_TABLE_STRING DeviceName;
- SMBIOS_TABLE_STRING Manufacturer;
- SMBIOS_TABLE_STRING SerialNumber;
- SMBIOS_TABLE_STRING AssetTagNumber;
- SMBIOS_TABLE_STRING ModelPartNumber;
- SMBIOS_TABLE_STRING RevisionLevel;
- UINT16 MaxPowerCapacity;
- SYS_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
- UINT16 InputVoltageProbeHandle;
- UINT16 CoolingDeviceHandle;
- UINT16 InputCurrentProbeHandle;
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 PowerUnitGroup;
+ SMBIOS_TABLE_STRING Location;
+ SMBIOS_TABLE_STRING DeviceName;
+ SMBIOS_TABLE_STRING Manufacturer;
+ SMBIOS_TABLE_STRING SerialNumber;
+ SMBIOS_TABLE_STRING AssetTagNumber;
+ SMBIOS_TABLE_STRING ModelPartNumber;
+ SMBIOS_TABLE_STRING RevisionLevel;
+ UINT16 MaxPowerCapacity;
+ SYS_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
+ UINT16 InputVoltageProbeHandle;
+ UINT16 CoolingDeviceHandle;
+ UINT16 InputCurrentProbeHandle;
} SMBIOS_TABLE_TYPE39;
///
-/// Additional Information Entry Format.
+/// Additional Information Entry Format.
///
-typedef struct {
- UINT8 EntryLength;
- UINT16 ReferencedHandle;
- UINT8 ReferencedOffset;
- SMBIOS_TABLE_STRING EntryString;
- UINT8 Value[1];
-}ADDITIONAL_INFORMATION_ENTRY;
+typedef struct {
+ UINT8 EntryLength;
+ UINT16 ReferencedHandle;
+ UINT8 ReferencedOffset;
+ SMBIOS_TABLE_STRING EntryString;
+ UINT8 Value[1];
+} ADDITIONAL_INFORMATION_ENTRY;
///
/// Additional Information (Type 40).
///
-/// This structure is intended to provide additional information for handling unspecified
-/// enumerated values and interim field updates in another structure.
+/// This structure is intended to provide additional information for handling unspecified
+/// enumerated values and interim field updates in another structure.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 NumberOfAdditionalInformationEntries;
- ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1];
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 NumberOfAdditionalInformationEntries;
+ ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1];
} SMBIOS_TABLE_TYPE40;
///
/// Onboard Devices Extended Information - Onboard Device Types.
///
-typedef enum{
+typedef enum {
OnBoardDeviceExtendedTypeOther = 0x01,
OnBoardDeviceExtendedTypeUnknown = 0x02,
OnBoardDeviceExtendedTypeVideo = 0x03,
@@ -2164,21 +2514,49 @@ typedef enum{
///
/// Onboard Devices Extended Information (Type 41).
///
-/// The information in this structure defines the attributes of devices that
-/// are onboard (soldered onto) a system element, usually the baseboard.
-/// In general, an entry in this table implies that the BIOS has some level of
-/// control over the enabling of the associated device for use by the system.
+/// The information in this structure defines the attributes of devices that
+/// are onboard (soldered onto) a system element, usually the baseboard.
+/// In general, an entry in this table implies that the BIOS has some level of
+/// control over the enabling of the associated device for use by the system.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- SMBIOS_TABLE_STRING ReferenceDesignation;
- UINT8 DeviceType; ///< The enumeration value from ONBOARD_DEVICE_EXTENDED_INFO_TYPE
- UINT8 DeviceTypeInstance;
- UINT16 SegmentGroupNum;
- UINT8 BusNum;
- UINT8 DevFuncNum;
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_TABLE_STRING ReferenceDesignation;
+ UINT8 DeviceType; ///< The enumeration value from ONBOARD_DEVICE_EXTENDED_INFO_TYPE
+ UINT8 DeviceTypeInstance;
+ UINT16 SegmentGroupNum;
+ UINT8 BusNum;
+ UINT8 DevFuncNum;
} SMBIOS_TABLE_TYPE41;
+///
+/// Management Controller Host Interface - Protocol Record Data Format.
+///
+typedef struct {
+ UINT8 ProtocolType;
+ UINT8 ProtocolTypeDataLen;
+ UINT8 ProtocolTypeData[1];
+} MC_HOST_INTERFACE_PROTOCOL_RECORD;
+
+///
+/// Management Controller Host Interface - Interface Types.
+/// 00h - 3Fh: MCTP Host Interfaces
+///
+typedef enum {
+ MCHostInterfaceTypeNetworkHostInterface = 0x40,
+ MCHostInterfaceTypeOemDefined = 0xF0
+} MC_HOST_INTERFACE_TYPE;
+
+///
+/// Management Controller Host Interface - Protocol Types.
+///
+typedef enum {
+ MCHostInterfaceProtocolTypeIPMI = 0x02,
+ MCHostInterfaceProtocolTypeMCTP = 0x03,
+ MCHostInterfaceProtocolTypeRedfishOverIP = 0x04,
+ MCHostInterfaceProtocolTypeOemDefined = 0xF0
+} MC_HOST_INTERFACE_PROTOCOL_TYPE;
+
///
/// Management Controller Host Interface (Type 42).
///
@@ -2197,76 +2575,144 @@ typedef struct {
/// that do not yet recognize the Type 42 structure.
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
- UINT8 InterfaceType;
- UINT8 MCHostInterfaceData[1]; ///< This field has a minimum of four bytes
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 InterfaceType; ///< The enumeration value from MC_HOST_INTERFACE_TYPE
+ UINT8 InterfaceTypeSpecificDataLength;
+ UINT8 InterfaceTypeSpecificData[4]; ///< This field has a minimum of four bytes
} SMBIOS_TABLE_TYPE42;
+///
+/// Processor Specific Block - Processor Architecture Type
+///
+typedef enum {
+ ProcessorSpecificBlockArchTypeReserved = 0x00,
+ ProcessorSpecificBlockArchTypeIa32 = 0x01,
+ ProcessorSpecificBlockArchTypeX64 = 0x02,
+ ProcessorSpecificBlockArchTypeItanium = 0x03,
+ ProcessorSpecificBlockArchTypeAarch32 = 0x04,
+ ProcessorSpecificBlockArchTypeAarch64 = 0x05,
+ ProcessorSpecificBlockArchTypeRiscVRV32 = 0x06,
+ ProcessorSpecificBlockArchTypeRiscVRV64 = 0x07,
+ ProcessorSpecificBlockArchTypeRiscVRV128 = 0x08
+} PROCESSOR_SPECIFIC_BLOCK_ARCH_TYPE;
+
+///
+/// Processor Specific Block is the standard container of processor-specific data.
+///
+typedef struct {
+ UINT8 Length;
+ UINT8 ProcessorArchType;
+ ///
+ /// Below followed by Processor-specific data
+ ///
+ ///
+} PROCESSOR_SPECIFIC_BLOCK;
+
+///
+/// Processor Additional Information(Type 44).
+///
+/// The information in this structure defines the processor additional information in case
+/// SMBIOS type 4 is not sufficient to describe processor characteristics.
+/// The SMBIOS type 44 structure has a reference handle field to link back to the related
+/// SMBIOS type 4 structure. There may be multiple SMBIOS type 44 structures linked to the
+/// same SMBIOS type 4 structure. For example, when cores are not identical in a processor,
+/// SMBIOS type 44 structures describe different core-specific information.
+///
+/// SMBIOS type 44 defines the standard header for the processor-specific block, while the
+/// contents of processor-specific data are maintained by processor
+/// architecture workgroups or vendors in separate documents.
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ SMBIOS_HANDLE RefHandle; ///< This field refer to associated SMBIOS type 4
+ ///
+ /// Below followed by Processor-specific block
+ ///
+ PROCESSOR_SPECIFIC_BLOCK ProcessorSpecificBlock;
+} SMBIOS_TABLE_TYPE44;
+
+///
+/// TPM Device (Type 43).
+///
+typedef struct {
+ SMBIOS_STRUCTURE Hdr;
+ UINT8 VendorID[4];
+ UINT8 MajorSpecVersion;
+ UINT8 MinorSpecVersion;
+ UINT32 FirmwareVersion1;
+ UINT32 FirmwareVersion2;
+ SMBIOS_TABLE_STRING Description;
+ UINT64 Characteristics;
+ UINT32 OemDefined;
+} SMBIOS_TABLE_TYPE43;
+
///
/// Inactive (Type 126)
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
+ SMBIOS_STRUCTURE Hdr;
} SMBIOS_TABLE_TYPE126;
///
/// End-of-Table (Type 127)
///
typedef struct {
- SMBIOS_STRUCTURE Hdr;
+ SMBIOS_STRUCTURE Hdr;
} SMBIOS_TABLE_TYPE127;
///
/// Union of all the possible SMBIOS record types.
///
typedef union {
- SMBIOS_STRUCTURE *Hdr;
- SMBIOS_TABLE_TYPE0 *Type0;
- SMBIOS_TABLE_TYPE1 *Type1;
- SMBIOS_TABLE_TYPE2 *Type2;
- SMBIOS_TABLE_TYPE3 *Type3;
- SMBIOS_TABLE_TYPE4 *Type4;
- SMBIOS_TABLE_TYPE5 *Type5;
- SMBIOS_TABLE_TYPE6 *Type6;
- SMBIOS_TABLE_TYPE7 *Type7;
- SMBIOS_TABLE_TYPE8 *Type8;
- SMBIOS_TABLE_TYPE9 *Type9;
- SMBIOS_TABLE_TYPE10 *Type10;
- SMBIOS_TABLE_TYPE11 *Type11;
- SMBIOS_TABLE_TYPE12 *Type12;
- SMBIOS_TABLE_TYPE13 *Type13;
- SMBIOS_TABLE_TYPE14 *Type14;
- SMBIOS_TABLE_TYPE15 *Type15;
- SMBIOS_TABLE_TYPE16 *Type16;
- SMBIOS_TABLE_TYPE17 *Type17;
- SMBIOS_TABLE_TYPE18 *Type18;
- SMBIOS_TABLE_TYPE19 *Type19;
- SMBIOS_TABLE_TYPE20 *Type20;
- SMBIOS_TABLE_TYPE21 *Type21;
- SMBIOS_TABLE_TYPE22 *Type22;
- SMBIOS_TABLE_TYPE23 *Type23;
- SMBIOS_TABLE_TYPE24 *Type24;
- SMBIOS_TABLE_TYPE25 *Type25;
- SMBIOS_TABLE_TYPE26 *Type26;
- SMBIOS_TABLE_TYPE27 *Type27;
- SMBIOS_TABLE_TYPE28 *Type28;
- SMBIOS_TABLE_TYPE29 *Type29;
- SMBIOS_TABLE_TYPE30 *Type30;
- SMBIOS_TABLE_TYPE31 *Type31;
- SMBIOS_TABLE_TYPE32 *Type32;
- SMBIOS_TABLE_TYPE33 *Type33;
- SMBIOS_TABLE_TYPE34 *Type34;
- SMBIOS_TABLE_TYPE35 *Type35;
- SMBIOS_TABLE_TYPE36 *Type36;
- SMBIOS_TABLE_TYPE37 *Type37;
- SMBIOS_TABLE_TYPE38 *Type38;
- SMBIOS_TABLE_TYPE39 *Type39;
- SMBIOS_TABLE_TYPE40 *Type40;
- SMBIOS_TABLE_TYPE41 *Type41;
- SMBIOS_TABLE_TYPE42 *Type42;
- SMBIOS_TABLE_TYPE126 *Type126;
- SMBIOS_TABLE_TYPE127 *Type127;
- UINT8 *Raw;
+ SMBIOS_STRUCTURE *Hdr;
+ SMBIOS_TABLE_TYPE0 *Type0;
+ SMBIOS_TABLE_TYPE1 *Type1;
+ SMBIOS_TABLE_TYPE2 *Type2;
+ SMBIOS_TABLE_TYPE3 *Type3;
+ SMBIOS_TABLE_TYPE4 *Type4;
+ SMBIOS_TABLE_TYPE5 *Type5;
+ SMBIOS_TABLE_TYPE6 *Type6;
+ SMBIOS_TABLE_TYPE7 *Type7;
+ SMBIOS_TABLE_TYPE8 *Type8;
+ SMBIOS_TABLE_TYPE9 *Type9;
+ SMBIOS_TABLE_TYPE10 *Type10;
+ SMBIOS_TABLE_TYPE11 *Type11;
+ SMBIOS_TABLE_TYPE12 *Type12;
+ SMBIOS_TABLE_TYPE13 *Type13;
+ SMBIOS_TABLE_TYPE14 *Type14;
+ SMBIOS_TABLE_TYPE15 *Type15;
+ SMBIOS_TABLE_TYPE16 *Type16;
+ SMBIOS_TABLE_TYPE17 *Type17;
+ SMBIOS_TABLE_TYPE18 *Type18;
+ SMBIOS_TABLE_TYPE19 *Type19;
+ SMBIOS_TABLE_TYPE20 *Type20;
+ SMBIOS_TABLE_TYPE21 *Type21;
+ SMBIOS_TABLE_TYPE22 *Type22;
+ SMBIOS_TABLE_TYPE23 *Type23;
+ SMBIOS_TABLE_TYPE24 *Type24;
+ SMBIOS_TABLE_TYPE25 *Type25;
+ SMBIOS_TABLE_TYPE26 *Type26;
+ SMBIOS_TABLE_TYPE27 *Type27;
+ SMBIOS_TABLE_TYPE28 *Type28;
+ SMBIOS_TABLE_TYPE29 *Type29;
+ SMBIOS_TABLE_TYPE30 *Type30;
+ SMBIOS_TABLE_TYPE31 *Type31;
+ SMBIOS_TABLE_TYPE32 *Type32;
+ SMBIOS_TABLE_TYPE33 *Type33;
+ SMBIOS_TABLE_TYPE34 *Type34;
+ SMBIOS_TABLE_TYPE35 *Type35;
+ SMBIOS_TABLE_TYPE36 *Type36;
+ SMBIOS_TABLE_TYPE37 *Type37;
+ SMBIOS_TABLE_TYPE38 *Type38;
+ SMBIOS_TABLE_TYPE39 *Type39;
+ SMBIOS_TABLE_TYPE40 *Type40;
+ SMBIOS_TABLE_TYPE41 *Type41;
+ SMBIOS_TABLE_TYPE42 *Type42;
+ SMBIOS_TABLE_TYPE43 *Type43;
+ SMBIOS_TABLE_TYPE44 *Type44;
+ SMBIOS_TABLE_TYPE126 *Type126;
+ SMBIOS_TABLE_TYPE127 *Type127;
+ UINT8 *Raw;
} SMBIOS_STRUCTURE_POINTER;
#pragma pack()