X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FInclude%2FIndustryStandard%2FSmBios.h;h=9aa8cf3e72d806d1fd81b9684765786878b52d6f;hb=8019eb589a19ed5fe50b6325502c442c77db5191;hp=62a2cf7088f752ccb650de4edbb20b06beea7ef8;hpb=2d5e30efe83cd0e8bc8bdedc4a3c0511cb815111;p=mirror_edk2.git
diff --git a/MdePkg/Include/IndustryStandard/SmBios.h b/MdePkg/Include/IndustryStandard/SmBios.h
index 62a2cf7088..9aa8cf3e72 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.6
+ Industry Standard Definitions of SMBIOS Table Specification v3.3.0.
- Copyright (c) 2006 - 2009, 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
- which 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 - 2019, 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
**/
@@ -16,7 +12,125 @@
#define __SMBIOS_STANDARD_H__
///
-/// Smbios Table Entry Point Structure
+/// Reference SMBIOS 2.6, chapter 3.1.2.
+/// 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
+
+///
+/// Reference SMBIOS 2.7, chapter 6.1.2.
+/// The UEFI Platform Initialization Specification reserves handle number FFFEh for its
+/// 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
+
+///
+/// Reference SMBIOS 2.6, chapter 3.1.3.
+/// Each text string is limited to 64 significant characters due to system MIF limitations.
+/// 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
+
+//
+// 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
+/// Inactive structure just like a structure type that the software does not recognize.
+///
+#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_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 {
@@ -36,29 +150,50 @@ typedef struct {
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
+/// 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;
///
-/// BIOS Characteristics
-/// Defines which functions the BIOS supports. PCI, PCMCIA, Flash, etc.
+/// BIOS Characteristics
+/// 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 Reserved :2; ///< Bits 0-1.
+ UINT32 Unknown :1;
+ UINT32 BiosCharacteristicsNotSupported :1;
+ UINT32 IsaIsSupported :1;
UINT32 McaIsSupported :1;
UINT32 EisaIsSupported :1;
UINT32 PciIsSupported :1;
@@ -86,20 +221,20 @@ typedef struct {
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 ReservedForVendor :32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor
+ ///< and bits 48-63 reserved for System Vendor.
} MISC_BIOS_CHARACTERISTICS;
///
-/// BIOS Characteristics Extension Byte 1
-/// This information, available for SMBIOS version 2.1 and later, appears at offset 12h
-/// within the BIOS Information structure.
+/// BIOS Characteristics Extension Byte 1.
+/// This information, available for SMBIOS version 2.1 and later, appears at offset 12h
+/// within the BIOS Information structure.
///
typedef struct {
UINT8 AcpiIsSupported :1;
- UINT8 UsbLegacyIsSupported :1;
- UINT8 AgpIsSupported :1;
- UINT8 I20BootIsSupported :1;
+ UINT8 UsbLegacyIsSupported :1;
+ UINT8 AgpIsSupported :1;
+ UINT8 I2OBootIsSupported :1;
UINT8 Ls120BootIsSupported :1;
UINT8 AtapiZipDriveBootIsSupported :1;
UINT8 Boot1394IsSupported :1;
@@ -107,28 +242,37 @@ typedef struct {
} MBCE_BIOS_RESERVED;
///
-/// BIOS Characteristics Extension Byte 2
-/// This information, available for SMBIOS version 2.3 and later, appears at offset 13h
+/// BIOS Characteristics Extension Byte 2.
+/// This information, available for SMBIOS version 2.3 and later, appears at offset 13h
/// within the BIOS Information structure.
///
typedef struct {
UINT8 BiosBootSpecIsSupported :1;
- UINT8 FunctionKeyNetworkBootIsSupported :1;
- UINT8 TargetContentDistributionEnabled :1;
- UINT8 ExtensionByte2Reserved :1;
+ UINT8 FunctionKeyNetworkBootIsSupported :1;
+ UINT8 TargetContentDistributionEnabled :1;
+ UINT8 UefiSpecificationSupported :1;
+ UINT8 VirtualMachineSupported :1;
+ UINT8 ExtensionByte2Reserved :3;
} MBCE_SYSTEM_RESERVED;
///
-/// BIOS Characteristics Extension Bytes
+/// BIOS Characteristics Extension Bytes.
///
typedef struct {
MBCE_BIOS_RESERVED BiosReserved;
MBCE_SYSTEM_RESERVED SystemReserved;
- UINT8 Reserved;
} MISC_BIOS_CHARACTERISTICS_EXTENSION;
///
-/// BIOS Information (Type 0)
+/// 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;
@@ -143,12 +287,16 @@ typedef struct {
UINT8 SystemBiosMinorRelease;
UINT8 EmbeddedControllerFirmwareMajorRelease;
UINT8 EmbeddedControllerFirmwareMinorRelease;
+ //
+ // Add for smbios 3.1.0
+ //
+ EXTENDED_BIOS_ROM_SIZE ExtendedBiosSize;
} SMBIOS_TABLE_TYPE0;
///
-/// System Wake-up Type
+/// System Wake-up Type.
///
-typedef enum {
+typedef enum {
SystemWakeupTypeReserved = 0x00,
SystemWakeupTypeOther = 0x01,
SystemWakeupTypeUnknown = 0x02,
@@ -161,11 +309,11 @@ typedef enum {
} MISC_SYSTEM_WAKEUP_TYPE;
///
-/// System Information (Type 1)
-///
-/// The information in this structure defines attributes of the overall system and is
+/// System Information (Type 1).
+///
+/// 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 {
@@ -175,13 +323,13 @@ typedef struct {
SMBIOS_TABLE_STRING Version;
SMBIOS_TABLE_STRING SerialNumber;
GUID Uuid;
- UINT8 WakeUpType; ///< enumeration value from MISC_SYSTEM_WAKEUP_TYPE
+ 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;
@@ -193,9 +341,9 @@ typedef struct {
} BASE_BOARD_FEATURE_FLAGS;
///
-/// Base Board - Board Type
+/// Base Board - Board Type.
///
-typedef enum {
+typedef enum {
BaseBoardTypeUnknown = 0x1,
BaseBoardTypeOther = 0x2,
BaseBoardTypeServerBlade = 0x3,
@@ -212,9 +360,9 @@ typedef enum {
} BASE_BOARD_TYPE;
///
-/// Base Board (or Module) Information (Type 2)
+/// 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 {
@@ -227,7 +375,7 @@ typedef struct {
BASE_BOARD_FEATURE_FLAGS FeatureFlag;
SMBIOS_TABLE_STRING LocationInChassis;
UINT16 ChassisHandle;
- UINT8 BoardType; ///< enumeration value from BASE_BOARD_TYPE
+ UINT8 BoardType; ///< The enumeration value from BASE_BOARD_TYPE.
UINT8 NumberOfContainedObjectHandles;
UINT16 ContainedObjectHandles[1];
} SMBIOS_TABLE_TYPE2;
@@ -235,7 +383,7 @@ typedef struct {
///
/// System Enclosure or Chassis Types
///
-typedef enum {
+typedef enum {
MiscChassisTypeOther = 0x01,
MiscChassisTypeUnknown = 0x02,
MiscChassisTypeDeskTop = 0x03,
@@ -264,13 +412,20 @@ typedef enum {
MiscChassisCompactPCI = 0x1A,
MiscChassisAdvancedTCA = 0x1B,
MiscChassisBlade = 0x1C,
- MiscChassisBladeEnclosure = 0x1D
+ MiscChassisBladeEnclosure = 0x1D,
+ MiscChassisTablet = 0x1E,
+ MiscChassisConvertible = 0x1F,
+ MiscChassisDetachable = 0x20,
+ MiscChassisIoTGateway = 0x21,
+ MiscChassisEmbeddedPc = 0x22,
+ MiscChassisMiniPc = 0x23,
+ MiscChassisStickPc = 0x24
} MISC_CHASSIS_TYPE;
///
-/// System Enclosure or Chassis States
+/// System Enclosure or Chassis States .
///
-typedef enum {
+typedef enum {
ChassisStateOther = 0x01,
ChassisStateUnknown = 0x02,
ChassisStateSafe = 0x03,
@@ -280,9 +435,9 @@ typedef enum {
} MISC_CHASSIS_STATE;
///
-/// System Enclosure or Chassis Security Status
+/// System Enclosure or Chassis Security Status.
///
-typedef enum {
+typedef enum {
ChassisSecurityStatusOther = 0x01,
ChassisSecurityStatusUnknown = 0x02,
ChassisSecurityStatusNone = 0x03,
@@ -301,13 +456,13 @@ typedef struct {
///
-/// System Enclosure or Chassis (Type 3)
+/// 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.
+/// support the population of the CIM_Chassis class.
///
typedef struct {
SMBIOS_STRUCTURE Hdr;
@@ -316,20 +471,31 @@ typedef struct {
SMBIOS_TABLE_STRING Version;
SMBIOS_TABLE_STRING SerialNumber;
SMBIOS_TABLE_STRING AssetTag;
- UINT8 BootupState; ///< enumeration value from MISC_CHASSIS_STATE
- UINT8 PowerSupplyState; ///< enumeration value from MISC_CHASSIS_STATE
- UINT8 ThermalState; ///< enumeration value from MISC_CHASSIS_STATE
- UINT8 SecurityStatus; ///< enumeration value from MISC_CHASSIS_SECURITY_STATE
+ 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;
///
-/// Processor Information - Processor Type
+/// Processor Information - Processor Type.
///
typedef enum {
ProcessorOther = 0x01,
@@ -341,34 +507,32 @@ typedef enum {
} PROCESSOR_TYPE_DATA;
///
-/// Processor Information - Processor Family
+/// Processor Information - Processor Family.
///
typedef enum {
- ProcessorFamilyOther = 0x01,
+ ProcessorFamilyOther = 0x01,
ProcessorFamilyUnknown = 0x02,
- ProcessorFamily8086 = 0x03,
+ ProcessorFamily8086 = 0x03,
ProcessorFamily80286 = 0x04,
- ProcessorFamilyIntel386 = 0x05,
+ ProcessorFamilyIntel386 = 0x05,
ProcessorFamilyIntel486 = 0x06,
ProcessorFamily8087 = 0x07,
ProcessorFamily80287 = 0x08,
- ProcessorFamily80387 = 0x09,
+ ProcessorFamily80387 = 0x09,
ProcessorFamily80487 = 0x0A,
- ProcessorFamilyPentium = 0x0B,
+ ProcessorFamilyPentium = 0x0B,
ProcessorFamilyPentiumPro = 0x0C,
ProcessorFamilyPentiumII = 0x0D,
ProcessorFamilyPentiumMMX = 0x0E,
ProcessorFamilyCeleron = 0x0F,
ProcessorFamilyPentiumIIXeon = 0x10,
- ProcessorFamilyPentiumIII = 0x11,
+ ProcessorFamilyPentiumIII = 0x11,
ProcessorFamilyM1 = 0x12,
ProcessorFamilyM2 = 0x13,
- ProcessorFamilyM1Reserved2 = 0x14,
- ProcessorFamilyM1Reserved3 = 0x15,
- ProcessorFamilyM1Reserved4 = 0x16,
- ProcessorFamilyM1Reserved5 = 0x17,
+ ProcessorFamilyIntelCeleronM = 0x14,
+ ProcessorFamilyIntelPentium4Ht = 0x15,
ProcessorFamilyAmdDuron = 0x18,
- ProcessorFamilyK5 = 0x19,
+ ProcessorFamilyK5 = 0x19,
ProcessorFamilyK6 = 0x1A,
ProcessorFamilyK6_2 = 0x1B,
ProcessorFamilyK6_3 = 0x1C,
@@ -383,7 +547,15 @@ typedef enum {
ProcessorFamilyPowerPC620 = 0x25,
ProcessorFamilyPowerPCx704 = 0x26,
ProcessorFamilyPowerPC750 = 0x27,
- ProcessorFamilyAlpha3 = 0x30,
+ ProcessorFamilyIntelCoreDuo = 0x28,
+ ProcessorFamilyIntelCoreDuoMobile = 0x29,
+ ProcessorFamilyIntelCoreSoloMobile = 0x2A,
+ ProcessorFamilyIntelAtom = 0x2B,
+ ProcessorFamilyIntelCoreM = 0x2C,
+ ProcessorFamilyIntelCorem3 = 0x2D,
+ ProcessorFamilyIntelCorem5 = 0x2E,
+ ProcessorFamilyIntelCorem7 = 0x2F,
+ ProcessorFamilyAlpha = 0x30,
ProcessorFamilyAlpha21064 = 0x31,
ProcessorFamilyAlpha21066 = 0x32,
ProcessorFamilyAlpha21164 = 0x33,
@@ -391,19 +563,37 @@ typedef enum {
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 = 0x56,
ProcessorFamilyUltraSparcIII = 0x57,
ProcessorFamilyUltraSparcIIIi = 0x58,
ProcessorFamily68040 = 0x60,
@@ -412,6 +602,12 @@ typedef enum {
ProcessorFamily68010 = 0x63,
ProcessorFamily68020 = 0x64,
ProcessorFamily68030 = 0x65,
+ ProcessorFamilyAmdAthlonX4QuadCore = 0x66,
+ ProcessorFamilyAmdOpteronX1000Series = 0x67,
+ ProcessorFamilyAmdOpteronX2000Series = 0x68,
+ ProcessorFamilyAmdOpteronASeries = 0x69,
+ ProcessorFamilyAmdOpteronX3000Series = 0x6A,
+ ProcessorFamilyAmdZen = 0x6B,
ProcessorFamilyHobbit = 0x70,
ProcessorFamilyCrusoeTM5000 = 0x78,
ProcessorFamilyCrusoeTM3000 = 0x79,
@@ -425,6 +621,12 @@ typedef enum {
ProcessorFamilyDualCoreAmdOpteron = 0x87,
ProcessorFamilyAmdAthlon64X2DualCore = 0x88,
ProcessorFamilyAmdTurion64X2Mobile = 0x89,
+ ProcessorFamilyQuadCoreAmdOpteron = 0x8A,
+ ProcessorFamilyThirdGenerationAmdOpteron = 0x8B,
+ ProcessorFamilyAmdPhenomFxQuadCore = 0x8C,
+ ProcessorFamilyAmdPhenomX4QuadCore = 0x8D,
+ ProcessorFamilyAmdPhenomX2DualCore = 0x8E,
+ ProcessorFamilyAmdAthlonX2DualCore = 0x8F,
ProcessorFamilyPARISC = 0x90,
ProcessorFamilyPaRisc8500 = 0x91,
ProcessorFamilyPaRisc8000 = 0x92,
@@ -433,6 +635,21 @@ typedef enum {
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,
@@ -446,18 +663,51 @@ typedef enum {
ProcessorFamilyIntelCeleronD = 0xBA,
ProcessorFamilyIntelPentiumD = 0xBB,
ProcessorFamilyIntelPentiumEx = 0xBC,
- ProcessorFamilyIntelCoreSolo = 0xBD, ///< SMBIOS spec 2.6 correct this value
+ 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,
- ProcessorFamilyzArchitectur = 0xCC,
+ 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,
@@ -465,26 +715,47 @@ typedef enum {
} PROCESSOR_FAMILY_DATA;
///
-/// Processor Information - Voltage
+/// Processor Information2 - Processor Family2.
///
-typedef struct {
- UINT8 ProcessorVoltageCapability5V :1;
- UINT8 ProcessorVoltageCapability3_3V :1;
- UINT8 ProcessorVoltageCapability2_9V :1;
+typedef enum {
+ 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.
+///
+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;
} PROCESSOR_VOLTAGE;
///
-/// Processor Information - Processor Upgrade
+/// Processor Information - Processor Upgrade.
///
typedef enum {
ProcessorUpgradeOther = 0x01,
ProcessorUpgradeUnknown = 0x02,
ProcessorUpgradeDaughterBoard = 0x03,
ProcessorUpgradeZIFSocket = 0x04,
- ProcessorUpgradePiggyBack = 0x05, ///< Replaceable
+ ProcessorUpgradePiggyBack = 0x05, ///< Replaceable.
ProcessorUpgradeNone = 0x06,
ProcessorUpgradeLIFSocket = 0x07,
ProcessorUpgradeSlot1 = 0x08,
@@ -493,7 +764,7 @@ typedef enum {
ProcessorUpgradeSlotA = 0x0B,
ProcessorUpgradeSlotM = 0x0C,
ProcessorUpgradeSocket423 = 0x0D,
- ProcessorUpgradeSocketA = 0x0E, ///< Socket 462
+ ProcessorUpgradeSocketA = 0x0E, ///< Socket 462.
ProcessorUpgradeSocket478 = 0x0F,
ProcessorUpgradeSocket754 = 0x10,
ProcessorUpgradeSocket940 = 0x11,
@@ -503,7 +774,43 @@ typedef enum {
ProcessorUpgradeSocketLGA775 = 0x15,
ProcessorUpgradeSocketS1 = 0x16,
ProcessorUpgradeAM2 = 0x17,
- ProcessorUpgradeF1207 = 0x18
+ 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
} PROCESSOR_UPGRADE;
///
@@ -554,25 +861,38 @@ typedef struct {
UINT32 ProcessorReserved4 :2;
} PROCESSOR_FEATURE_FLAGS;
+typedef struct {
+ UINT32 ProcessorReserved1 :1;
+ UINT32 ProcessorUnknown :1;
+ UINT32 Processor64BitCapble :1;
+ UINT32 ProcessorMultiCore :1;
+ UINT32 ProcessorHardwareThread :1;
+ UINT32 ProcessorExecuteProtection :1;
+ UINT32 ProcessorEnhancedVirtulization :1;
+ UINT32 ProcessorPowerPerformanceCtrl :1;
+ UINT32 Processor128bitCapble :1;
+ UINT32 ProcessorReserved2 :7;
+} PROCESSOR_CHARACTERISTIC_FLAGS;
+
typedef struct {
PROCESSOR_SIGNATURE Signature;
PROCESSOR_FEATURE_FLAGS FeatureFlags;
} PROCESSOR_ID_DATA;
///
-/// Processor Information (Type 4)
+/// 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
-/// 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.
+/// 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 {
+typedef struct {
SMBIOS_STRUCTURE Hdr;
SMBIOS_TABLE_STRING Socket;
- UINT8 ProcessorType; ///< enumeration value from PROCESSOR_TYPE_DATA
- UINT8 ProcessorFamily; ///< enumeration value from PROCESSOR_FAMILY_DATA
+ 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;
@@ -581,7 +901,7 @@ typedef struct {
UINT16 MaxSpeed;
UINT16 CurrentSpeed;
UINT8 Status;
- UINT8 ProcessorUpgrade; ///< enumeration value from PROCESSOR_UPGRADE
+ UINT8 ProcessorUpgrade; ///< The enumeration value from PROCESSOR_UPGRADE.
UINT16 L1CacheHandle;
UINT16 L2CacheHandle;
UINT16 L3CacheHandle;
@@ -599,12 +919,18 @@ typedef struct {
// Add for smbios 2.6
//
UINT16 ProcessorFamily2;
+ //
+ // Add for smbios 3.0
+ //
+ UINT16 CoreCount2;
+ UINT16 EnabledCoreCount2;
+ UINT16 ThreadCount2;
} SMBIOS_TABLE_TYPE4;
///
-/// Memory Controller Error Detecting Method
+/// Memory Controller Error Detecting Method.
///
-typedef enum {
+typedef enum {
ErrorDetectingMethodOther = 0x01,
ErrorDetectingMethodUnknown = 0x02,
ErrorDetectingMethodNone = 0x03,
@@ -616,7 +942,7 @@ typedef enum {
} MEMORY_ERROR_DETECT_METHOD;
///
-/// Memory Controller Error Correcting Capability
+/// Memory Controller Error Correcting Capability.
///
typedef struct {
UINT8 Other :1;
@@ -629,9 +955,9 @@ typedef struct {
} MEMORY_ERROR_CORRECT_CAPABILITY;
///
-/// Memory Controller Information - Interleave Support
+/// Memory Controller Information - Interleave Support.
///
-typedef enum {
+typedef enum {
MemoryInterleaveOther = 0x01,
MemoryInterleaveUnknown = 0x02,
MemoryInterleaveOneWay = 0x03,
@@ -642,7 +968,7 @@ typedef enum {
} MEMORY_SUPPORT_INTERLEAVE_TYPE;
///
-/// Memory Controller Information - Memory Speeds
+/// Memory Controller Information - Memory Speeds.
///
typedef struct {
UINT16 Other :1;
@@ -654,23 +980,23 @@ typedef struct {
} MEMORY_SPEED_TYPE;
///
-/// Memory Controller Information (Type 5, Obsolete)
+/// 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),
-/// are obsolete starting with version 2.1 of this specification; the Physical Memory Array (Type 16)
+/// 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; ///< enumeration value from MEMORY_ERROR_DETECT_METHOD
+ UINT8 ErrDetectMethod; ///< The enumeration value from MEMORY_ERROR_DETECT_METHOD.
MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability;
- UINT8 SupportInterleave; ///< enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE
- UINT8 CurrentInterleave; ///< enumeration value from MEMORY_SUPPORT_INTERLEAVE_TYPE
+ 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;
@@ -698,7 +1024,7 @@ typedef struct {
} MEMORY_CURRENT_TYPE;
///
-/// Memory Module Information - Memory Size
+/// Memory Module Information - Memory Size.
///
typedef struct {
UINT8 InstalledOrEnabledSize :7; ///< Size (n), where 2**n is the size in MB.
@@ -708,12 +1034,12 @@ typedef struct {
///
/// 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),
-/// are obsolete starting with version 2.1 of this specification; the Physical Memory Array (Type 16)
+/// 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 {
@@ -728,7 +1054,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE6;
///
-/// Cache Information - SRAM Type
+/// Cache Information - SRAM Type.
///
typedef struct {
UINT16 Other :1;
@@ -736,13 +1062,13 @@ typedef struct {
UINT16 NonBurst :1;
UINT16 Burst :1;
UINT16 PipelineBurst :1;
- UINT16 Asynchronous :1;
UINT16 Synchronous :1;
+ UINT16 Asynchronous :1;
UINT16 Reserved :9;
} CACHE_SRAM_TYPE_DATA;
///
-/// Cache Information - Error Correction Type
+/// Cache Information - Error Correction Type.
///
typedef enum {
CacheErrorOther = 0x01,
@@ -754,7 +1080,7 @@ typedef enum {
} CACHE_ERROR_TYPE_DATA;
///
-/// Cache Information - System Cache Type
+/// Cache Information - System Cache Type.
///
typedef enum {
CacheTypeOther = 0x01,
@@ -765,7 +1091,7 @@ typedef enum {
} CACHE_TYPE_DATA;
///
-/// Cache Information - Associativity
+/// Cache Information - Associativity.
///
typedef enum {
CacheAssociativityOther = 0x01,
@@ -776,16 +1102,21 @@ typedef enum {
CacheAssociativityFully = 0x06,
CacheAssociativity8Way = 0x07,
CacheAssociativity16Way = 0x08,
- CacheAssociativity24Way = 0x09
+ CacheAssociativity12Way = 0x09,
+ CacheAssociativity24Way = 0x0A,
+ CacheAssociativity32Way = 0x0B,
+ CacheAssociativity48Way = 0x0C,
+ CacheAssociativity64Way = 0x0D,
+ CacheAssociativity20Way = 0x0E
} CACHE_ASSOCIATIVITY_DATA;
///
-/// Cache Information (Type 7)
+/// Cache Information (Type 7).
///
-/// he 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.
+/// in one or two ways, depending on the SMBIOS version.
///
typedef struct {
SMBIOS_STRUCTURE Hdr;
@@ -796,13 +1127,18 @@ typedef struct {
CACHE_SRAM_TYPE_DATA SupportedSRAMType;
CACHE_SRAM_TYPE_DATA CurrentSRAMType;
UINT8 CacheSpeed;
- UINT8 ErrorCorrectionType; ///< enumeration value from CACHE_ERROR_TYPE_DATA
- UINT8 SystemCacheType; ///< enumeration value from CACHE_TYPE_DATA
- UINT8 Associativity; ///< enumeration value from CACHE_ASSOCIATIVITY_DATA
+ 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,
@@ -819,7 +1155,7 @@ typedef enum {
PortConnectorTypeRJ45 = 0x0B,
PortConnectorType50PinMiniScsi = 0x0C,
PortConnectorTypeMiniDin = 0x0D,
- PortConnectorTypeMicriDin = 0x0E,
+ PortConnectorTypeMicroDin = 0x0E,
PortConnectorTypePS2 = 0x0F,
PortConnectorTypeInfrared = 0x10,
PortConnectorTypeHpHil = 0x11,
@@ -839,6 +1175,8 @@ typedef enum {
PortConnectorTypeHeadPhoneMiniJack = 0x1F,
PortConnectorTypeBNC = 0x20,
PortConnectorType1394 = 0x21,
+ PortConnectorTypeSasSata = 0x22,
+ PortConnectorTypeUsbTypeC = 0x23,
PortConnectorTypePC98 = 0xA0,
PortConnectorTypePC98Hireso = 0xA1,
PortConnectorTypePCH98 = 0xA2,
@@ -848,7 +1186,7 @@ typedef enum {
} MISC_PORT_CONNECTOR_TYPE;
///
-/// Port Connector Information - Port Types
+/// Port Connector Information - Port Types
///
typedef enum {
PortTypeNone = 0x00,
@@ -883,25 +1221,29 @@ typedef enum {
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)
+/// 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; ///< enumeration value from MISC_PORT_CONNECTOR_TYPE
+ UINT8 InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
SMBIOS_TABLE_STRING ExternalReferenceDesignator;
- UINT8 ExternalConnectorType; ///< enumeration value from MISC_PORT_CONNECTOR_TYPE
- UINT8 PortType; ///< enumeration value from MISC_PORT_TYPE
+ UINT8 ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE.
+ UINT8 PortType; ///< The enumeration value from MISC_PORT_TYPE.
} SMBIOS_TABLE_TYPE8;
///
@@ -926,7 +1268,24 @@ typedef enum {
SlotTypeApg2X = 0x10,
SlotTypeAgp4X = 0x11,
SlotTypePciX = 0x12,
- SlotTypeAgp4x = 0x13,
+ 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,
@@ -937,11 +1296,29 @@ typedef enum {
SlotTypePciExpressX2 = 0xA7,
SlotTypePciExpressX4 = 0xA8,
SlotTypePciExpressX8 = 0xA9,
- SlotTypePciExpressX16 = 0xAA
+ 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
+/// System Slots - Slot Data Bus Width.
///
typedef enum {
SlotDataBusWidthOther = 0x01,
@@ -961,17 +1338,18 @@ typedef enum {
} MISC_SLOT_DATA_BUS_WIDTH;
///
-/// System Slots - Current Usage
+/// 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,
@@ -981,7 +1359,7 @@ typedef enum {
} MISC_SLOT_LENGTH;
///
-/// System Slots - Slot Characteristics 1
+/// System Slots - Slot Characteristics 1.
///
typedef struct {
UINT8 CharacteristicsUnknown :1;
@@ -994,29 +1372,40 @@ typedef struct {
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 BifurcationSupported :1;
+ UINT8 Reserved :4; ///< 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; ///< enumeration value from MISC_SLOT_TYPE
- UINT8 SlotDataBusWidth; ///< enumeration value from MISC_SLOT_DATA_BUS_WIDTH
- UINT8 CurrentUsage; ///< enumeration value from MISC_SLOT_USAGE
- UINT8 SlotLength; ///< enumeration value from MISC_SLOT_LENGTH
+ 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;
@@ -1026,10 +1415,16 @@ typedef struct {
UINT16 SegmentGroupNum;
UINT8 BusNum;
UINT8 DevFuncNum;
+ //
+ // Add for smbios 3.2
+ //
+ UINT8 DataBusWidth;
+ UINT8 PeerGroupingCount;
+ MISC_SLOT_PEER_GROUP PeerGroups[1];
} SMBIOS_TABLE_TYPE9;
///
-/// On Board Devices Information - Device Types
+/// On Board Devices Information - Device Types.
///
typedef enum {
OnBoardDeviceTypeOther = 0x01,
@@ -1038,25 +1433,28 @@ typedef enum {
OnBoardDeviceTypeScsiController = 0x04,
OnBoardDeviceTypeEthernet = 0x05,
OnBoardDeviceTypeTokenRing = 0x06,
- OnBoardDeviceTypeSound = 0x07
+ OnBoardDeviceTypeSound = 0x07,
+ OnBoardDeviceTypePATAController = 0x08,
+ OnBoardDeviceTypeSATAController = 0x09,
+ OnBoardDeviceTypeSASController = 0x0A
} MISC_ONBOARD_DEVICE_TYPE;
///
/// Device Item Entry
///
typedef struct {
- UINT8 DeviceType; ///< Bit [6:0] - enumeration type of device from MISC_ONBOARD_DEVICE_TYPE
- ///< Bit 7 - 1 : device enabled, 0 : device disabled
+ 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;
} DEVICE_STRUCT;
///
-/// On Board Devices Information (Type 10, obsolete)
+/// 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.
///
@@ -1066,9 +1464,9 @@ typedef struct {
} 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.
+/// 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.
///
typedef struct {
SMBIOS_STRUCTURE Hdr;
@@ -1076,9 +1474,9 @@ typedef struct {
} SMBIOS_TABLE_TYPE11;
///
-/// System Configuration Options (Type 12)
+/// 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;
@@ -1087,10 +1485,10 @@ typedef struct {
///
-/// BIOS Language Information (Type 13)
+/// 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;
@@ -1100,8 +1498,29 @@ typedef struct {
} SMBIOS_TABLE_TYPE13;
///
-/// System Event Log - Event Log Types
-///
+/// Group Item Entry
+///
+typedef struct {
+ 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.
+///
+typedef struct {
+ 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,
@@ -1132,8 +1551,8 @@ typedef enum {
} EVENT_LOG_TYPE_DATA;
///
-/// System Event Log - Variable Data Format Types
-///
+/// System Event Log - Variable Data Format Types.
+///
typedef enum {
EventLogVariableNone = 0x00,
EventLogVariableHandle = 0x01,
@@ -1141,47 +1560,26 @@ typedef enum {
EventLogVariableMutilEventHandle = 0x03,
EventLogVariablePOSTResultBitmap = 0x04,
EventLogVariableSysManagementType = 0x05,
- EventLogVariableMutliEventSysManagmentType = 0x06,
+ EventLogVariableMutliEventSysManagmentType = 0x06,
EventLogVariableUnused = 0x07,
EventLogVariableOEMAssigned = 0x80
} EVENT_LOG_VARIABLE_DATA;
-///
-/// Group Item Entry
-///
-typedef struct {
- UINT8 ItemType;
- UINT16 ItemHandle;
-} GROUP_STRUCT;
-
///
/// Event Log Type Descriptors
///
typedef struct {
- UINT8 LogType; ///< enumeration value from EVENT_LOG_TYPE_DATA
+ UINT8 LogType; ///< The enumeration value from EVENT_LOG_TYPE_DATA.
UINT8 DataFormatType;
} EVENT_LOG_TYPE;
///
-/// Group Associations (Type 14)
+/// System Event Log (Type 15).
///
-/// 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_TABLE_TYPE14;
-
-///
-/// 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.
+/// 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;
@@ -1199,7 +1597,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE15;
///
-/// Physical Memory Array - Location
+/// Physical Memory Array - Location.
///
typedef enum {
MemoryArrayLocationOther = 0x01,
@@ -1215,11 +1613,12 @@ typedef enum {
MemoryArrayLocationPc98C20AddonCard = 0xA0,
MemoryArrayLocationPc98C24AddonCard = 0xA1,
MemoryArrayLocationPc98EAddonCard = 0xA2,
- MemoryArrayLocationPc98LocalBusAddonCard = 0xA3
+ MemoryArrayLocationPc98LocalBusAddonCard = 0xA3,
+ MemoryArrayLocationCXLFlexbus10AddonCard = 0xA4
} MEMORY_ARRAY_LOCATION;
///
-/// Physical Memory Array - Use
+/// Physical Memory Array - Use.
///
typedef enum {
MemoryArrayUseOther = 0x01,
@@ -1232,7 +1631,7 @@ typedef enum {
} MEMORY_ARRAY_USE;
///
-/// Physical Memory Array - Error Correction Types
+/// Physical Memory Array - Error Correction Types.
///
typedef enum {
MemoryErrorCorrectionOther = 0x01,
@@ -1245,23 +1644,27 @@ typedef enum {
} MEMORY_ERROR_CORRECTION;
///
-/// Physical Memory Array (Type 16)
+/// 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; ///< enumeration value from MEMORY_ARRAY_LOCATION
- UINT8 Use; ///< enumeration value from MEMORY_ARRAY_USE
- UINT8 MemoryErrorCorrection; ///< enumeration value from MEMORY_ERROR_CORRECTION
+ 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;
} SMBIOS_TABLE_TYPE16;
///
-/// Memory Device - Form Factor
+/// Memory Device - Form Factor.
///
typedef enum {
MemoryFormFactorOther = 0x01,
@@ -1278,7 +1681,8 @@ typedef enum {
MemoryFormFactorRimm = 0x0C,
MemoryFormFactorSodimm = 0x0D,
MemoryFormFactorSrimm = 0x0E,
- MemoryFormFactorFbDimm = 0x0F
+ MemoryFormFactorFbDimm = 0x0F,
+ MemoryFormFactorDie = 0x10
} MEMORY_FORM_FACTOR;
///
@@ -1304,9 +1708,22 @@ typedef enum {
MemoryTypeRdram = 0x11,
MemoryTypeDdr = 0x12,
MemoryTypeDdr2 = 0x13,
- MemoryTypeDdr2FbDimm = 0x14
+ MemoryTypeDdr2FbDimm = 0x14,
+ MemoryTypeDdr3 = 0x18,
+ MemoryTypeFbd2 = 0x19,
+ MemoryTypeDdr4 = 0x1A,
+ MemoryTypeLpddr = 0x1B,
+ MemoryTypeLpddr2 = 0x1C,
+ MemoryTypeLpddr3 = 0x1D,
+ MemoryTypeLpddr4 = 0x1E,
+ MemoryTypeLogicalNonVolatileDevice = 0x1F,
+ MemoryTypeHBM = 0x20,
+ MemoryTypeHBM2 = 0x21
} MEMORY_DEVICE_TYPE;
+///
+/// Memory Device - Type Detail
+///
typedef struct {
UINT16 Reserved :1;
UINT16 Other :1;
@@ -1321,46 +1738,113 @@ typedef struct {
UINT16 WindowDram :1;
UINT16 CacheDram :1;
UINT16 Nonvolatile :1;
- UINT16 Reserved1 :3;
+ UINT16 Registered :1;
+ UINT16 Unbuffered :1;
+ UINT16 LrDimm :1;
} MEMORY_DEVICE_TYPE_DETAIL;
///
-/// Memory Device (Type 17)
+/// Memory Device - Memory Technology
///
-/// This structure describes a single memory device that is part of
+typedef enum {
+ MemoryTechnologyOther = 0x01,
+ MemoryTechnologyUnknown = 0x02,
+ MemoryTechnologyDram = 0x03,
+ MemoryTechnologyNvdimmN = 0x04,
+ MemoryTechnologyNvdimmF = 0x05,
+ MemoryTechnologyNvdimmP = 0x06,
+ MemoryTechnologyIntelPersistentMemory = 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
/// 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; ///< enumeration value from MEMORY_FORM_FACTOR
- UINT8 DeviceSet;
- SMBIOS_TABLE_STRING DeviceLocator;
- SMBIOS_TABLE_STRING BankLocator;
- UINT8 MemoryType; ///< 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;
+ //
+ // 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 FirwareVersion;
+ UINT16 ModuleManufacturerID;
+ UINT16 ModuleProductID;
+ UINT16 MemorySubsystemControllerManufacturerID;
+ UINT16 MemorySubsystemControllerProductID;
+ UINT64 NonVolatileSize;
+ UINT64 VolatileSize;
+ UINT64 CacheSize;
+ UINT64 LogicalSize;
} SMBIOS_TABLE_TYPE17;
///
-/// 32-bit Memory Error Information - Error Type
+/// 32-bit Memory Error Information - Error Type.
///
-typedef enum {
+typedef enum {
MemoryErrorOther = 0x01,
MemoryErrorUnknown = 0x02,
MemoryErrorOk = 0x03,
@@ -1378,9 +1862,9 @@ typedef enum {
} MEMORY_ERROR_TYPE;
///
-/// 32-bit Memory Error Information - Error Granularity
+/// 32-bit Memory Error Information - Error Granularity.
///
-typedef enum {
+typedef enum {
MemoryGranularityOther = 0x01,
MemoryGranularityOtherUnknown = 0x02,
MemoryGranularityDeviceLevel = 0x03,
@@ -1388,9 +1872,9 @@ typedef enum {
} MEMORY_ERROR_GRANULARITY;
///
-/// 32-bit Memory Error Information - Error Operation
+/// 32-bit Memory Error Information - Error Operation.
///
-typedef enum {
+typedef enum {
MemoryErrorOperationOther = 0x01,
MemoryErrorOperationUnknown = 0x02,
MemoryErrorOperationRead = 0x03,
@@ -1399,16 +1883,16 @@ typedef enum {
} MEMORY_ERROR_OPERATION;
///
-/// 32-bit Memory Error Information (Type 18)
-///
-/// This structure identifies the specifics of an error that might be detected
+/// 32-bit Memory Error Information (Type 18).
+///
+/// This structure identifies the specifics of an error that might be detected
/// within a Physical Memory Array.
///
typedef struct {
SMBIOS_STRUCTURE Hdr;
- UINT8 ErrorType; ///< enumeration value from MEMORY_ERROR_TYPE
- UINT8 ErrorGranularity; ///< enumeration value from MEMORY_ERROR_GRANULARITY
- UINT8 ErrorOperation; ///< enumeration value from MEMORY_ERROR_OPERATION
+ 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;
@@ -1416,9 +1900,9 @@ typedef struct {
} SMBIOS_TABLE_TYPE18;
///
-/// Memory Array Mapped Address (Type 19)
+/// 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 {
@@ -1427,13 +1911,18 @@ typedef struct {
UINT32 EndingAddress;
UINT16 MemoryArrayHandle;
UINT8 PartitionWidth;
+ //
+ // Add for smbios 2.7
+ //
+ UINT64 ExtendedStartingAddress;
+ UINT64 ExtendedEndingAddress;
} SMBIOS_TABLE_TYPE19;
///
-/// Memory Device Mapped Address (Type 20)
+/// 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;
@@ -1444,6 +1933,11 @@ typedef struct {
UINT8 PartitionRowPosition;
UINT8 InterleavePosition;
UINT8 InterleavedDataDepth;
+ //
+ // Add for smbios 2.7
+ //
+ UINT64 ExtendedStartingAddress;
+ UINT64 ExtendedEndingAddress;
} SMBIOS_TABLE_TYPE20;
///
@@ -1462,7 +1956,7 @@ typedef enum {
} BUILTIN_POINTING_DEVICE_TYPE;
///
-/// Built-in Pointing Device - Interface
+/// Built-in Pointing Device - Interface.
///
typedef enum {
PointingDeviceInterfaceOther = 0x01,
@@ -1479,23 +1973,23 @@ typedef enum {
} BUILTIN_POINTING_DEVICE_INTERFACE;
///
-/// Built-in Pointing Device (Type 21)
+/// Built-in Pointing Device (Type 21).
///
-/// 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!
+/// 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!
///
typedef struct {
SMBIOS_STRUCTURE Hdr;
- UINT8 Type; ///< enumeration value from BUILTIN_POINTING_DEVICE_TYPE
- UINT8 Interface; ///< enumeration value from BUILTIN_POINTING_DEVICE_INTERFACE
+ 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 {
+typedef enum {
PortableBatteryDeviceChemistryOther = 0x01,
PortableBatteryDeviceChemistryUnknown = 0x02,
PortableBatteryDeviceChemistryLeadAcid = 0x03,
@@ -1507,10 +2001,10 @@ typedef enum {
} PORTABLE_BATTERY_DEVICE_CHEMISTRY;
///
-/// Portable Battery (Type 22)
+/// 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 {
@@ -1520,7 +2014,7 @@ typedef struct {
SMBIOS_TABLE_STRING ManufactureDate;
SMBIOS_TABLE_STRING SerialNumber;
SMBIOS_TABLE_STRING DeviceName;
- UINT8 DeviceChemistry; ///< enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY
+ UINT8 DeviceChemistry; ///< The enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY.
UINT16 DeviceCapacity;
UINT16 DesignVoltage;
SMBIOS_TABLE_STRING SBDSVersionNumber;
@@ -1535,11 +2029,11 @@ typedef struct {
///
/// 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;
@@ -1551,9 +2045,9 @@ typedef struct {
} SMBIOS_TABLE_TYPE23;
///
-/// Hardware Security (Type 24)
+/// 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;
@@ -1561,12 +2055,12 @@ typedef struct {
} SMBIOS_TABLE_TYPE24;
///
-/// System Power Controls (Type 25)
+/// 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;
@@ -1578,7 +2072,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE25;
///
-/// Voltage Probe - Location and Status
+/// Voltage Probe - Location and Status.
///
typedef struct {
UINT8 VoltageProbeSite :5;
@@ -1588,7 +2082,7 @@ typedef struct {
///
/// 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 {
@@ -1605,7 +2099,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE26;
///
-/// Cooling Device - Device Type and Status
+/// Cooling Device - Device Type and Status.
///
typedef struct {
UINT8 CoolingDevice :5;
@@ -1615,9 +2109,9 @@ typedef struct {
///
/// 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;
@@ -1625,10 +2119,14 @@ typedef struct {
UINT8 CoolingUnitGroup;
UINT32 OEMDefined;
UINT16 NominalSpeed;
+ //
+ // Add for smbios 2.7
+ //
+ SMBIOS_TABLE_STRING Description;
} SMBIOS_TABLE_TYPE27;
///
-/// Temperature Probe - Location and Status
+/// Temperature Probe - Location and Status.
///
typedef struct {
UINT8 TemperatureProbeSite :5;
@@ -1636,10 +2134,10 @@ typedef struct {
} MISC_TEMPERATURE_PROBE_LOCATION;
///
-/// Temperature Probe (Type 28)
+/// 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;
@@ -1655,7 +2153,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE28;
///
-/// Electrical Current Probe - Location and Status
+/// Electrical Current Probe - Location and Status.
///
typedef struct {
UINT8 ElectricalCurrentProbeSite :5;
@@ -1663,10 +2161,10 @@ typedef struct {
} MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
///
-/// Electrical Current Probe (Type 29)
+/// 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.
+/// Each structure describes a single electrical current probe.
///
typedef struct {
SMBIOS_STRUCTURE Hdr;
@@ -1682,11 +2180,11 @@ typedef struct {
} SMBIOS_TABLE_TYPE29;
///
-/// Out-of-Band Remote Access (Type 30)
+/// 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;
@@ -1695,10 +2193,10 @@ typedef struct {
} SMBIOS_TABLE_TYPE30;
///
-/// Boot Integrity Services (BIS) Entry Point (Type 31)
+/// Boot Integrity Services (BIS) Entry Point (Type 31).
+///
+/// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS).
///
-/// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS).
-///
typedef struct {
SMBIOS_STRUCTURE Hdr;
UINT8 Checksum;
@@ -1711,7 +2209,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE31;
///
-/// System Boot Information - System Boot Status
+/// System Boot Information - System Boot Status.
///
typedef enum {
BootInformationStatusNoError = 0x00,
@@ -1729,33 +2227,33 @@ typedef enum {
} MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;
///
-/// System Boot Information (Type 32)
+/// 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; ///< enumeration value from MISC_BOOT_INFORMATION_STATUS_DATA_TYPE
+ UINT8 BootStatus; ///< The enumeration value from MISC_BOOT_INFORMATION_STATUS_DATA_TYPE.
} SMBIOS_TABLE_TYPE32;
///
-/// 64-bit Memory Error Information (Type 33)
+/// 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; ///< enumeration value from MEMORY_ERROR_TYPE
- UINT8 ErrorGranularity; ///< enumeration value from MEMORY_ERROR_GRANULARITY
- UINT8 ErrorOperation; ///< enumeration value from MEMORY_ERROR_OPERATION
+ 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;
@@ -1763,7 +2261,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE33;
///
-/// Management Device - Type
+/// Management Device - Type.
///
typedef enum {
ManagementDeviceTypeOther = 0x01,
@@ -1782,7 +2280,7 @@ typedef enum {
} MISC_MANAGEMENT_DEVICE_TYPE;
///
-/// Management Device - Address Type
+/// Management Device - Address Type.
///
typedef enum {
ManagementDeviceAddressTypeOther = 0x01,
@@ -1793,25 +2291,25 @@ typedef enum {
} MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
///
-/// Management Device (Type 34)
+/// 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; ///< enumeration value from MISC_MANAGEMENT_DEVICE_TYPE
+ UINT8 Type; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_TYPE.
UINT32 Address;
- UINT8 AddressType; ///< enumeration value from MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE
+ 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;
@@ -1822,10 +2320,10 @@ typedef struct {
} SMBIOS_TABLE_TYPE35;
///
-/// Management Device Threshold Data (Type 36)
+/// 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;
@@ -1838,7 +2336,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE36;
///
-/// Memory Channel Entry
+/// Memory Channel Entry.
///
typedef struct {
UINT8 DeviceLoad;
@@ -1846,7 +2344,7 @@ typedef struct {
} MEMORY_DEVICE;
///
-/// Memory Channel - Channel Type
+/// Memory Channel - Channel Type.
///
typedef enum {
MemoryChannelTypeOther = 0x01,
@@ -1859,8 +2357,8 @@ typedef enum {
/// 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;
-/// the sum of all device loads cannot exceed the channel's defined maximum.
+/// 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;
@@ -1875,21 +2373,26 @@ typedef struct {
///
typedef enum {
IPMIDeviceInfoInterfaceTypeUnknown = 0x00,
- IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< Keyboard Controller Style
- IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< Server Management Interface Chip
- IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< Block Transfer
- IPMIDeviceInfoInterfaceTypeReserved = 0x04
+ 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;
///
-/// IPMI Device Information (Type 38)
+/// IPMI Device Information (Type 38).
///
-/// The information in this structure defines the attributes of an
+/// The information in this structure defines the attributes of an
/// Intelligent Platform Management Interface (IPMI) Baseboard Management Controller (BMC).
-///
+///
+/// The Type 42 structure can also be used to describe a physical management controller
+/// host interface and one or more protocols that share that interface. If IPMI is not
+/// shared with other protocols, either the Type 38 or Type 42 structures can be used.
+/// Providing Type 38 is recommended for backward compatibility.
+///
typedef struct {
SMBIOS_STRUCTURE Hdr;
- UINT8 InterfaceType; ///< enumeration value from BMC_INTERFACE_TYPE
+ UINT8 InterfaceType; ///< The enumeration value from BMC_INTERFACE_TYPE.
UINT8 IPMISpecificationRevision;
UINT8 I2CSlaveAddress;
UINT8 NVStorageDeviceAddress;
@@ -1899,7 +2402,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE38;
///
-/// System Power Supply - Power Supply Characteristics
+/// System Power Supply - Power Supply Characteristics.
///
typedef struct {
UINT16 PowerSupplyHotReplaceable:1;
@@ -1912,10 +2415,10 @@ typedef struct {
} SYS_POWER_SUPPLY_CHARACTERISTICS;
///
-/// System Power Supply (Type 39)
+/// System Power Supply (Type 39).
///
-/// This structure identifies attributes of a system power supply. One instance
-/// of this record is present for each possible power supply in a system.
+/// This structure identifies attributes of a system power supply. One instance
+/// of this record is present for each possible power supply in a system.
///
typedef struct {
SMBIOS_STRUCTURE Hdr;
@@ -1935,30 +2438,30 @@ typedef struct {
} SMBIOS_TABLE_TYPE39;
///
-/// Additional Information Entry Format
+/// Additional Information Entry Format.
///
-typedef struct {
- UINT8 EntryLength;
+typedef struct {
+ UINT8 EntryLength;
UINT16 ReferencedHandle;
UINT8 ReferencedOffset;
SMBIOS_TABLE_STRING EntryString;
UINT8 Value[1];
-}ADDITIONAL_INFORMATION_ENTRY;
+} ADDITIONAL_INFORMATION_ENTRY;
///
-/// Additional Information (Type 40)
+/// 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];
+ ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1];
} SMBIOS_TABLE_TYPE40;
///
-/// Onboard Devices Extended Information - Onboard Device Types
+/// Onboard Devices Extended Information - Onboard Device Types.
///
typedef enum{
OnBoardDeviceExtendedTypeOther = 0x01,
@@ -1974,23 +2477,132 @@ typedef enum{
} ONBOARD_DEVICE_EXTENDED_INFO_TYPE;
///
-/// Onboard Devices Extended Information (Type 41)
+/// 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; ///< enumeration value from ONBOARD_DEVICE_EXTENDED_INFO_TYPE
+ UINT8 DeviceType; ///< The enumeration value from ONBOARD_DEVICE_EXTENDED_INFO_TYPE
UINT8 DeviceTypeInstance;
UINT16 SegmentGroupNum;
UINT8 BusNum;
- UINT8 DevFuncNum;
+ UINT8 DevFuncNum;
} SMBIOS_TABLE_TYPE41;
+///
+/// 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).
+///
+/// The information in this structure defines the attributes of a Management
+/// Controller Host Interface that is not discoverable by "Plug and Play" mechanisms.
+///
+/// Type 42 should be used for management controller host interfaces that use protocols
+/// other than IPMI or that use multiple protocols on a single host interface type.
+///
+/// This structure should also be provided if IPMI is shared with other protocols
+/// over the same interface hardware. If IPMI is not shared with other protocols,
+/// either the Type 38 or Type 42 structures can be used. Providing Type 38 is
+/// recommended for backward compatibility. The structures are not required to
+/// be mutually exclusive. Type 38 and Type 42 structures may be implemented
+/// simultaneously to provide backward compatibility with IPMI applications or drivers
+/// that do not yet recognize the Type 42 structure.
+///
+typedef struct {
+ 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)
///
@@ -2006,7 +2618,7 @@ typedef struct {
} SMBIOS_TABLE_TYPE127;
///
-/// Union of all the possible SMBIOS record types
+/// Union of all the possible SMBIOS record types.
///
typedef union {
SMBIOS_STRUCTURE *Hdr;
@@ -2052,6 +2664,9 @@ typedef union {
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;