X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FInclude%2FIndustryStandard%2FSmBios.h;h=24b2efe92916f187c2c840d748f33f11d1cea46d;hb=4994588211f03b41031b21fd8c6570191b5e53f7;hp=5ad0137f33e3d331a6490a3a8e62b5399cd65525;hpb=55deb97841fa6b6a0ee491a26ca801dd31a3e7bb;p=mirror_edk2.git diff --git a/MdePkg/Include/IndustryStandard/SmBios.h b/MdePkg/Include/IndustryStandard/SmBios.h index 5ad0137f33..24b2efe929 100644 --- a/MdePkg/Include/IndustryStandard/SmBios.h +++ b/MdePkg/Include/IndustryStandard/SmBios.h @@ -1,14 +1,15 @@ /** @file - Industry Standard Definitions of SMBIOS Table Specification v2.6 - - 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. + Industry Standard Definitions of SMBIOS Table Specification v3.1.0. + +Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
+(C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP
+This program and the accompanying materials are licensed and made available under +the terms and conditions of the BSD License that accompanies this distribution. +The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php. + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ @@ -16,7 +17,124 @@ #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 2.7 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 + +/// +/// 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 +154,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; @@ -91,15 +230,15 @@ typedef struct { } 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 +246,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,10 +291,14 @@ 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 { SystemWakeupTypeReserved = 0x00, @@ -161,7 +313,7 @@ typedef enum { } MISC_SYSTEM_WAKEUP_TYPE; /// -/// System Information (Type 1) +/// 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. @@ -175,13 +327,13 @@ typedef struct { SMBIOS_TABLE_STRING Version; SMBIOS_TABLE_STRING SerialNumber; GUID Uuid; - MISC_SYSTEM_WAKEUP_TYPE WakeUpType; + 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,7 +345,7 @@ typedef struct { } BASE_BOARD_FEATURE_FLAGS; /// -/// Base Board - Board Type +/// Base Board - Board Type. /// typedef enum { BaseBoardTypeUnknown = 0x1, @@ -212,7 +364,7 @@ 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 - /// for example a motherboard, planar, or server blade or other standard system module. @@ -227,7 +379,7 @@ typedef struct { BASE_BOARD_FEATURE_FLAGS FeatureFlag; SMBIOS_TABLE_STRING LocationInChassis; UINT16 ChassisHandle; - BASE_BOARD_TYPE BoardType; + UINT8 BoardType; ///< The enumeration value from BASE_BOARD_TYPE. UINT8 NumberOfContainedObjectHandles; UINT16 ContainedObjectHandles[1]; } SMBIOS_TABLE_TYPE2; @@ -264,11 +416,18 @@ 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 { ChassisStateOther = 0x01, @@ -280,7 +439,7 @@ typedef enum { } MISC_CHASSIS_STATE; /// -/// System Enclosure or Chassis Security Status +/// System Enclosure or Chassis Security Status. /// typedef enum { ChassisSecurityStatusOther = 0x01, @@ -301,7 +460,7 @@ 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, @@ -316,20 +475,31 @@ typedef struct { SMBIOS_TABLE_STRING Version; SMBIOS_TABLE_STRING SerialNumber; SMBIOS_TABLE_STRING AssetTag; - MISC_CHASSIS_STATE BootupState; - MISC_CHASSIS_STATE PowerSupplyState; - MISC_CHASSIS_STATE ThermalState; - MISC_CHASSIS_SECURITY_STATE SecurityStatus; + 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,7 +511,7 @@ typedef enum { } PROCESSOR_TYPE_DATA; /// -/// Processor Information - Processor Family +/// Processor Information - Processor Family. /// typedef enum { ProcessorFamilyOther = 0x01, @@ -363,10 +533,8 @@ typedef enum { ProcessorFamilyPentiumIII = 0x11, ProcessorFamilyM1 = 0x12, ProcessorFamilyM2 = 0x13, - ProcessorFamilyM1Reserved2 = 0x14, - ProcessorFamilyM1Reserved3 = 0x15, - ProcessorFamilyM1Reserved4 = 0x16, - ProcessorFamilyM1Reserved5 = 0x17, + ProcessorFamilyIntelCeleronM = 0x14, + ProcessorFamilyIntelPentium4Ht = 0x15, ProcessorFamilyAmdDuron = 0x18, ProcessorFamilyK5 = 0x19, ProcessorFamilyK6 = 0x1A, @@ -383,7 +551,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 +567,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 +606,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 +625,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 +639,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 +667,50 @@ 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, 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,7 +718,25 @@ typedef enum { } PROCESSOR_FAMILY_DATA; /// -/// Processor Information - Voltage +/// Processor Information2 - Processor Family2. +/// +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 +} PROCESSOR_FAMILY2_DATA; + +/// +/// Processor Information - Voltage. /// typedef struct { UINT8 ProcessorVoltageCapability5V :1; @@ -477,14 +748,14 @@ typedef struct { } 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,39 @@ 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 } PROCESSOR_UPGRADE; /// @@ -520,13 +823,6 @@ typedef struct { UINT32 ProcessorReserved2: 4; } PROCESSOR_SIGNATURE; -typedef struct { - UINT32 ProcessorBrandIndex :8; - UINT32 ProcessorClflush :8; - UINT32 ProcessorReserved :8; - UINT32 ProcessorDfltApicId :8; -} PROCESSOR_MISC_INFO; - typedef struct { UINT32 ProcessorFpu :1; UINT32 ProcessorVme :1; @@ -563,25 +859,23 @@ typedef struct { typedef struct { PROCESSOR_SIGNATURE Signature; - PROCESSOR_MISC_INFO MiscInfo; - UINT32 Reserved; 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. +/// structure instance, while a system with an IntelSX2 processor would have a structure +/// to describe the main CPU, and a second structure to describe the 80487 co-processor. /// typedef struct { SMBIOS_STRUCTURE Hdr; - UINT8 Socket; - PROCESSOR_TYPE_DATA ProcessorType; - PROCESSOR_FAMILY_DATA ProcessorFamily; + SMBIOS_TABLE_STRING Socket; + UINT8 ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA. + UINT8 ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA. SMBIOS_TABLE_STRING ProcessorManufacture; PROCESSOR_ID_DATA ProcessorId; SMBIOS_TABLE_STRING ProcessorVersion; @@ -590,7 +884,7 @@ typedef struct { UINT16 MaxSpeed; UINT16 CurrentSpeed; UINT8 Status; - PROCESSOR_UPGRADE ProcessorUpgrade; + UINT8 ProcessorUpgrade; ///< The enumeration value from PROCESSOR_UPGRADE. UINT16 L1CacheHandle; UINT16 L2CacheHandle; UINT16 L3CacheHandle; @@ -608,10 +902,16 @@ 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 { ErrorDetectingMethodOther = 0x01, @@ -625,7 +925,7 @@ typedef enum { } MEMORY_ERROR_DETECT_METHOD; /// -/// Memory Controller Error Correcting Capability +/// Memory Controller Error Correcting Capability. /// typedef struct { UINT8 Other :1; @@ -638,7 +938,7 @@ typedef struct { } MEMORY_ERROR_CORRECT_CAPABILITY; /// -/// Memory Controller Information - Interleave Support +/// Memory Controller Information - Interleave Support. /// typedef enum { MemoryInterleaveOther = 0x01, @@ -651,7 +951,7 @@ typedef enum { } MEMORY_SUPPORT_INTERLEAVE_TYPE; /// -/// Memory Controller Information - Memory Speeds +/// Memory Controller Information - Memory Speeds. /// typedef struct { UINT16 Other :1; @@ -663,23 +963,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) +/// 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; - MEMORY_ERROR_DETECT_METHOD ErrDetectMethod; + UINT8 ErrDetectMethod; ///< The enumeration value from MEMORY_ERROR_DETECT_METHOD. MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability; - MEMORY_SUPPORT_INTERLEAVE_TYPE SupportInterleave; - UINT8 CurrentInterleave; + 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; @@ -696,18 +996,18 @@ typedef struct { UINT16 Unknown :1; UINT16 Standard :1; UINT16 FastPageMode:1; - UINT16 EDO :1; + UINT16 Edo :1; UINT16 Parity :1; - UINT16 ECC :1; - UINT16 SIMM :1; - UINT16 DIMM :1; + UINT16 Ecc :1; + UINT16 Simm :1; + UINT16 Dimm :1; UINT16 BurstEdo :1; - UINT16 SDRAM :1; + UINT16 Sdram :1; UINT16 Reserved :5; } 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. @@ -722,7 +1022,7 @@ typedef struct { /// 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) +/// 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 { @@ -737,7 +1037,7 @@ typedef struct { } SMBIOS_TABLE_TYPE6; /// -/// Cache Information - SRAM Type +/// Cache Information - SRAM Type. /// typedef struct { UINT16 Other :1; @@ -745,13 +1045,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, @@ -763,7 +1063,7 @@ typedef enum { } CACHE_ERROR_TYPE_DATA; /// -/// Cache Information - System Cache Type +/// Cache Information - System Cache Type. /// typedef enum { CacheTypeOther = 0x01, @@ -774,7 +1074,7 @@ typedef enum { } CACHE_TYPE_DATA; /// -/// Cache Information - Associativity +/// Cache Information - Associativity. /// typedef enum { CacheAssociativityOther = 0x01, @@ -785,16 +1085,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; @@ -805,13 +1110,18 @@ typedef struct { CACHE_SRAM_TYPE_DATA SupportedSRAMType; CACHE_SRAM_TYPE_DATA CurrentSRAMType; UINT8 CacheSpeed; - CACHE_ERROR_TYPE_DATA ErrorCorrectionType; - CACHE_TYPE_DATA SystemCacheType; - CACHE_ASSOCIATIVITY_DATA Associativity; + 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, @@ -828,7 +1138,7 @@ typedef enum { PortConnectorTypeRJ45 = 0x0B, PortConnectorType50PinMiniScsi = 0x0C, PortConnectorTypeMiniDin = 0x0D, - PortConnectorTypeMicriDin = 0x0E, + PortConnectorTypeMicroDin = 0x0E, PortConnectorTypePS2 = 0x0F, PortConnectorTypeInfrared = 0x10, PortConnectorTypeHpHil = 0x11, @@ -848,6 +1158,7 @@ typedef enum { PortConnectorTypeHeadPhoneMiniJack = 0x1F, PortConnectorTypeBNC = 0x20, PortConnectorType1394 = 0x21, + PortConnectorTypeSasSata = 0x22, PortConnectorTypePC98 = 0xA0, PortConnectorTypePC98Hireso = 0xA1, PortConnectorTypePCH98 = 0xA2, @@ -892,13 +1203,15 @@ typedef enum { PortTypeAudioPort = 0x1D, PortTypeModemPort = 0x1E, PortTypeNetworkPort = 0x1F, + PortTypeSata = 0x20, + PortTypeSas = 0x21, 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 @@ -907,10 +1220,10 @@ typedef enum { typedef struct { SMBIOS_STRUCTURE Hdr; SMBIOS_TABLE_STRING InternalReferenceDesignator; - MISC_PORT_CONNECTOR_TYPE InternalConnectorType; + UINT8 InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. SMBIOS_TABLE_STRING ExternalReferenceDesignator; - MISC_PORT_CONNECTOR_TYPE ExternalConnectorType; - MISC_PORT_TYPE PortType; + UINT8 ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. + UINT8 PortType; ///< The enumeration value from MISC_PORT_TYPE. } SMBIOS_TABLE_TYPE8; /// @@ -935,7 +1248,23 @@ 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. SlotTypePC98C20 = 0xA0, SlotTypePC98C24 = 0xA1, SlotTypePC98E = 0xA2, @@ -946,11 +1275,23 @@ 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 } MISC_SLOT_TYPE; /// -/// System Slots - Slot Data Bus Width +/// System Slots - Slot Data Bus Width. /// typedef enum { SlotDataBusWidthOther = 0x01, @@ -970,7 +1311,7 @@ typedef enum { } MISC_SLOT_DATA_BUS_WIDTH; /// -/// System Slots - Current Usage +/// System Slots - Current Usage. /// typedef enum { SlotUsageOther = 0x01, @@ -980,7 +1321,7 @@ typedef enum { } MISC_SLOT_USAGE; /// -/// System Slots - Slot Length +/// System Slots - Slot Length. /// typedef enum { SlotLengthOther = 0x01, @@ -990,7 +1331,7 @@ typedef enum { } MISC_SLOT_LENGTH; /// -/// System Slots - Slot Characteristics 1 +/// System Slots - Slot Characteristics 1. /// typedef struct { UINT8 CharacteristicsUnknown :1; @@ -1003,7 +1344,7 @@ typedef struct { UINT8 ModemRingResumeSupported:1; } MISC_SLOT_CHARACTERISTICS1; /// -/// System Slots - Slot Characteristics 2 +/// System Slots - Slot Characteristics 2. /// typedef struct { UINT8 PmeSignalSupported :1; @@ -1022,10 +1363,10 @@ typedef struct { typedef struct { SMBIOS_STRUCTURE Hdr; SMBIOS_TABLE_STRING SlotDesignation; - MISC_SLOT_TYPE SlotType; - MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth; - MISC_SLOT_USAGE CurrentUsage; - MISC_SLOT_LENGTH SlotLength; + 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; @@ -1038,7 +1379,7 @@ typedef struct { } SMBIOS_TABLE_TYPE9; /// -/// On Board Devices Information - Device Types +/// On Board Devices Information - Device Types. /// typedef enum { OnBoardDeviceTypeOther = 0x01, @@ -1047,19 +1388,23 @@ 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 { - MISC_ONBOARD_DEVICE_TYPE DeviceType; + 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 @@ -1074,7 +1419,7 @@ typedef struct { } SMBIOS_TABLE_TYPE10; /// -/// OEM Strings (Type 11) +/// 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. /// @@ -1084,7 +1429,7 @@ 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. /// @@ -1095,7 +1440,7 @@ 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. /// @@ -1108,7 +1453,28 @@ 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, @@ -1140,7 +1506,7 @@ typedef enum { } EVENT_LOG_TYPE_DATA; /// -/// System Event Log - Variable Data Format Types +/// System Event Log - Variable Data Format Types. /// typedef enum { EventLogVariableNone = 0x00, @@ -1154,37 +1520,16 @@ typedef enum { EventLogVariableOEMAssigned = 0x80 } EVENT_LOG_VARIABLE_DATA; -/// -/// Group Item Entry -/// -typedef struct { - UINT8 ItemType; - UINT16 ItemHandle; -} GROUP_STRUCT; - /// /// Event Log Type Descriptors /// typedef struct { - EVENT_LOG_TYPE_DATA LogType; + UINT8 LogType; ///< The enumeration value from EVENT_LOG_TYPE_DATA. UINT8 DataFormatType; } EVENT_LOG_TYPE; /// -/// 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 (Type 15) +/// 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 @@ -1207,7 +1552,7 @@ typedef struct { } SMBIOS_TABLE_TYPE15; /// -/// Physical Memory Array - Location +/// Physical Memory Array - Location. /// typedef enum { MemoryArrayLocationOther = 0x01, @@ -1227,7 +1572,7 @@ typedef enum { } MEMORY_ARRAY_LOCATION; /// -/// Physical Memory Array - Use +/// Physical Memory Array - Use. /// typedef enum { MemoryArrayUseOther = 0x01, @@ -1240,7 +1585,7 @@ typedef enum { } MEMORY_ARRAY_USE; /// -/// Physical Memory Array - Error Correction Types +/// Physical Memory Array - Error Correction Types. /// typedef enum { MemoryErrorCorrectionOther = 0x01, @@ -1253,23 +1598,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. /// typedef struct { SMBIOS_STRUCTURE Hdr; - MEMORY_ARRAY_LOCATION Location; - MEMORY_ARRAY_USE Use; - MEMORY_ERROR_CORRECTION MemoryErrorCorrection; + 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, @@ -1312,7 +1661,14 @@ 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 } MEMORY_DEVICE_TYPE; typedef struct { @@ -1329,16 +1685,18 @@ 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 (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 +/// includes a Memory Device structure instance for each slot, whether or not the /// socket is currently populated. /// typedef struct { @@ -1348,11 +1706,11 @@ typedef struct { UINT16 TotalWidth; UINT16 DataWidth; UINT16 Size; - MEMORY_FORM_FACTOR FormFactor; + UINT8 FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR. UINT8 DeviceSet; SMBIOS_TABLE_STRING DeviceLocator; SMBIOS_TABLE_STRING BankLocator; - MEMORY_DEVICE_TYPE MemoryType; + UINT8 MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE. MEMORY_DEVICE_TYPE_DETAIL TypeDetail; UINT16 Speed; SMBIOS_TABLE_STRING Manufacturer; @@ -1362,11 +1720,22 @@ typedef struct { // // Add for smbios 2.6 // - UINT8 Attributes; + UINT8 Attributes; + // + // Add for smbios 2.7 + // + UINT32 ExtendedSize; + UINT16 ConfiguredMemoryClockSpeed; + // + // Add for smbios 2.8.0 + // + UINT16 MinimumVoltage; + UINT16 MaximumVoltage; + UINT16 ConfiguredVoltage; } SMBIOS_TABLE_TYPE17; /// -/// 32-bit Memory Error Information - Error Type +/// 32-bit Memory Error Information - Error Type. /// typedef enum { MemoryErrorOther = 0x01, @@ -1386,7 +1755,7 @@ typedef enum { } MEMORY_ERROR_TYPE; /// -/// 32-bit Memory Error Information - Error Granularity +/// 32-bit Memory Error Information - Error Granularity. /// typedef enum { MemoryGranularityOther = 0x01, @@ -1396,7 +1765,7 @@ typedef enum { } MEMORY_ERROR_GRANULARITY; /// -/// 32-bit Memory Error Information - Error Operation +/// 32-bit Memory Error Information - Error Operation. /// typedef enum { MemoryErrorOperationOther = 0x01, @@ -1407,16 +1776,16 @@ typedef enum { } MEMORY_ERROR_OPERATION; /// -/// 32-bit Memory Error Information (Type 18) +/// 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; - MEMORY_ERROR_TYPE ErrorType; - MEMORY_ERROR_GRANULARITY ErrorGranularity; - MEMORY_ERROR_OPERATION ErrorOperation; + 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; @@ -1424,7 +1793,7 @@ 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. /// One structure is present for each contiguous address range described. @@ -1435,10 +1804,15 @@ 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. @@ -1452,6 +1826,11 @@ typedef struct { UINT8 PartitionRowPosition; UINT8 InterleavePosition; UINT8 InterleavedDataDepth; + // + // Add for smbios 2.7 + // + UINT64 ExtendedStartingAddress; + UINT64 ExtendedEndingAddress; } SMBIOS_TABLE_TYPE20; /// @@ -1470,7 +1849,7 @@ typedef enum { } BUILTIN_POINTING_DEVICE_TYPE; /// -/// Built-in Pointing Device - Interface +/// Built-in Pointing Device - Interface. /// typedef enum { PointingDeviceInterfaceOther = 0x01, @@ -1487,16 +1866,16 @@ 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 +/// 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; - BUILTIN_POINTING_DEVICE_TYPE Type; - BUILTIN_POINTING_DEVICE_INTERFACE 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; @@ -1515,7 +1894,7 @@ 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 @@ -1528,7 +1907,7 @@ typedef struct { SMBIOS_TABLE_STRING ManufactureDate; SMBIOS_TABLE_STRING SerialNumber; SMBIOS_TABLE_STRING DeviceName; - PORTABLE_BATTERY_DEVICE_CHEMISTRY DeviceChemistry; + UINT8 DeviceChemistry; ///< The enumeration value from PORTABLE_BATTERY_DEVICE_CHEMISTRY. UINT16 DeviceCapacity; UINT16 DesignVoltage; SMBIOS_TABLE_STRING SBDSVersionNumber; @@ -1559,7 +1938,7 @@ typedef struct { } SMBIOS_TABLE_TYPE23; /// -/// Hardware Security (Type 24) +/// Hardware Security (Type 24). /// /// This structure describes the system-wide hardware security settings. /// @@ -1569,7 +1948,7 @@ 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 @@ -1586,7 +1965,7 @@ typedef struct { } SMBIOS_TABLE_TYPE25; /// -/// Voltage Probe - Location and Status +/// Voltage Probe - Location and Status. /// typedef struct { UINT8 VoltageProbeSite :5; @@ -1613,7 +1992,7 @@ typedef struct { } SMBIOS_TABLE_TYPE26; /// -/// Cooling Device - Device Type and Status +/// Cooling Device - Device Type and Status. /// typedef struct { UINT8 CoolingDevice :5; @@ -1633,10 +2012,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; @@ -1644,7 +2027,7 @@ 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. @@ -1663,7 +2046,7 @@ typedef struct { } SMBIOS_TABLE_TYPE28; /// -/// Electrical Current Probe - Location and Status +/// Electrical Current Probe - Location and Status. /// typedef struct { UINT8 ElectricalCurrentProbeSite :5; @@ -1671,7 +2054,7 @@ 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. @@ -1690,7 +2073,7 @@ 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 @@ -1703,7 +2086,7 @@ 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). /// @@ -1719,7 +2102,7 @@ typedef struct { } SMBIOS_TABLE_TYPE31; /// -/// System Boot Information - System Boot Status +/// System Boot Information - System Boot Status. /// typedef enum { BootInformationStatusNoError = 0x00, @@ -1737,7 +2120,7 @@ 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 @@ -1750,20 +2133,20 @@ typedef enum { typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 Reserved[6]; - MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootStatus; + 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, /// when the error address is above 4G (0xFFFFFFFF). /// typedef struct { SMBIOS_STRUCTURE Hdr; - MEMORY_ERROR_TYPE ErrorType; ///< Same as Type 18 - MEMORY_ERROR_GRANULARITY ErrorGranularity; ///< Same as Type 18 - MEMORY_ERROR_OPERATION ErrorOperation; ///< Same as Type 18 + 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; @@ -1771,7 +2154,7 @@ typedef struct { } SMBIOS_TABLE_TYPE33; /// -/// Management Device - Type +/// Management Device - Type. /// typedef enum { ManagementDeviceTypeOther = 0x01, @@ -1790,7 +2173,7 @@ typedef enum { } MISC_MANAGEMENT_DEVICE_TYPE; /// -/// Management Device - Address Type +/// Management Device - Address Type. /// typedef enum { ManagementDeviceAddressTypeOther = 0x01, @@ -1801,7 +2184,7 @@ 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. /// A Management Device might control one or more fans or voltage, current, or temperature @@ -1810,9 +2193,9 @@ typedef enum { typedef struct { SMBIOS_STRUCTURE Hdr; SMBIOS_TABLE_STRING Description; - MISC_MANAGEMENT_DEVICE_TYPE Type; + UINT8 Type; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_TYPE. UINT32 Address; - MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE AddressType; + UINT8 AddressType; ///< The enumeration value from MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE. } SMBIOS_TABLE_TYPE34; /// @@ -1830,7 +2213,7 @@ 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. @@ -1846,7 +2229,7 @@ typedef struct { } SMBIOS_TABLE_TYPE36; /// -/// Memory Channel Entry +/// Memory Channel Entry. /// typedef struct { UINT8 DeviceLoad; @@ -1854,7 +2237,7 @@ typedef struct { } MEMORY_DEVICE; /// -/// Memory Channel - Channel Type +/// Memory Channel - Channel Type. /// typedef enum { MemoryChannelTypeOther = 0x01, @@ -1867,8 +2250,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; @@ -1883,21 +2266,26 @@ typedef struct { /// typedef enum { IPMIDeviceInfoInterfaceTypeUnknown = 0x00, - IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< Keyboard Controller Style - IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< Server Management Interface Chip - IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< Block Transfer + IPMIDeviceInfoInterfaceTypeKCS = 0x01, ///< The Keyboard Controller Style. + IPMIDeviceInfoInterfaceTypeSMIC = 0x02, ///< The Server Management Interface Chip. + IPMIDeviceInfoInterfaceTypeBT = 0x03, ///< The Block Transfer IPMIDeviceInfoInterfaceTypeReserved = 0x04 } 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; - BMC_INTERFACE_TYPE InterfaceType; + UINT8 InterfaceType; ///< The enumeration value from BMC_INTERFACE_TYPE. UINT8 IPMISpecificationRevision; UINT8 I2CSlaveAddress; UINT8 NVStorageDeviceAddress; @@ -1907,7 +2295,7 @@ typedef struct { } SMBIOS_TABLE_TYPE38; /// -/// System Power Supply - Power Supply Characteristics +/// System Power Supply - Power Supply Characteristics. /// typedef struct { UINT16 PowerSupplyHotReplaceable:1; @@ -1920,10 +2308,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; @@ -1943,7 +2331,7 @@ typedef struct { } SMBIOS_TABLE_TYPE39; /// -/// Additional Information Entry Format +/// Additional Information Entry Format. /// typedef struct { UINT8 EntryLength; @@ -1954,7 +2342,7 @@ typedef struct { }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. @@ -1966,7 +2354,7 @@ typedef struct { } SMBIOS_TABLE_TYPE40; /// -/// Onboard Devices Extended Information - Onboard Device Types +/// Onboard Devices Extended Information - Onboard Device Types. /// typedef enum{ OnBoardDeviceExtendedTypeOther = 0x01, @@ -1982,7 +2370,7 @@ 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. @@ -1992,13 +2380,70 @@ typedef enum{ typedef struct { SMBIOS_STRUCTURE Hdr; SMBIOS_TABLE_STRING ReferenceDesignation; - ONBOARD_DEVICE_EXTENDED_INFO_TYPE DeviceType; + 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 MCHostInterfaceData[1]; ///< This field has a minimum of four bytes +} SMBIOS_TABLE_TYPE42; + +/// +/// 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) /// @@ -2014,7 +2459,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; @@ -2060,6 +2505,8 @@ typedef union { SMBIOS_TABLE_TYPE39 *Type39; SMBIOS_TABLE_TYPE40 *Type40; SMBIOS_TABLE_TYPE41 *Type41; + SMBIOS_TABLE_TYPE42 *Type42; + SMBIOS_TABLE_TYPE43 *Type43; SMBIOS_TABLE_TYPE126 *Type126; SMBIOS_TABLE_TYPE127 *Type127; UINT8 *Raw;