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;