From 98cb9ae8e4ecae95ebc5733625e7a6197949398b Mon Sep 17 00:00:00 2001 From: gikidy Date: Mon, 20 Apr 2009 06:40:49 +0000 Subject: [PATCH] Enhanced industry standard definitions of SMBIOS Table. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8131 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Include/IndustryStandard/SmBios.h | 1779 +++++++++++++++++++--- 1 file changed, 1537 insertions(+), 242 deletions(-) diff --git a/MdePkg/Include/IndustryStandard/SmBios.h b/MdePkg/Include/IndustryStandard/SmBios.h index cf550011a6..fa5bb04169 100644 --- a/MdePkg/Include/IndustryStandard/SmBios.h +++ b/MdePkg/Include/IndustryStandard/SmBios.h @@ -1,7 +1,7 @@ /** @file Industry Standard Definitions of SMBIOS Table Specification v2.6 - Copyright (c) 2006 - 2008, Intel Corporation All rights + 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 @@ -14,6 +14,7 @@ #ifndef __SMBIOS_STANDARD_H__ #define __SMBIOS_STANDARD_H__ + /// /// Smbios Table Entry Point Structure /// @@ -49,57 +50,246 @@ typedef struct { /// typedef UINT8 SMBIOS_TABLE_STRING; +/// +/// 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 McaIsSupported :1; + UINT32 EisaIsSupported :1; + UINT32 PciIsSupported :1; + UINT32 PcmciaIsSupported :1; + UINT32 PlugAndPlayIsSupported :1; + UINT32 ApmIsSupported :1; + UINT32 BiosIsUpgradable :1; + UINT32 BiosShadowingAllowed :1; + UINT32 VlVesaIsSupported :1; + UINT32 EscdSupportIsAvailable :1; + UINT32 BootFromCdIsSupported :1; + UINT32 SelectableBootIsSupported :1; + UINT32 RomBiosIsSocketed :1; + UINT32 BootFromPcmciaIsSupported :1; + UINT32 EDDSpecificationIsSupported :1; + UINT32 JapaneseNecFloppyIsSupported :1; + UINT32 JapaneseToshibaFloppyIsSupported :1; + UINT32 Floppy525_360IsSupported :1; + UINT32 Floppy525_12IsSupported :1; + UINT32 Floppy35_720IsSupported :1; + UINT32 Floppy35_288IsSupported :1; + UINT32 PrintScreenIsSupported :1; + UINT32 Keyboard8042IsSupported :1; + UINT32 SerialIsSupported :1; + UINT32 PrinterIsSupported :1; + UINT32 CgaMonoIsSupported :1; + UINT32 NecPc98 :1; + UINT32 ReservedForVendor :32; // Bits 32-63. Bits 32-47 reserved for BIOS vendor + // and bits 48-63 reserved for System Vendor. +} MISC_BIOS_CHARACTERISTICS; + +/// +/// 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 Ls120BootIsSupported :1; + UINT8 AtapiZipDriveBootIsSupported :1; + UINT8 Boot1394IsSupported :1; + UINT8 SmartBatteryIsSupported :1; +} MBCE_BIOS_RESERVED; + +/// +/// 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; //Bits 3-7 +} MBCE_SYSTEM_RESERVED; + +/// +/// BIOS Characteristics Extension Bytes +/// +typedef struct { + MBCE_BIOS_RESERVED BiosReserved; + MBCE_SYSTEM_RESERVED SystemReserved; + UINT8 Reserved; +} MISC_BIOS_CHARACTERISTICS_EXTENSION; + /// /// BIOS Information (Type 0) /// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Vendor; - SMBIOS_TABLE_STRING BiosVersion; - UINT16 BiosSegment; - SMBIOS_TABLE_STRING BiosReleaseDate; - UINT8 BiosSize; - UINT64 BiosCharacteristics; - UINT8 BIOSCharacteristicsExtensionBytes[2]; - UINT8 SystemBiosMajorRelease; - UINT8 SystemBiosMinorRelease; - UINT8 EmbeddedControllerFirmwareMajorRelease; - UINT8 EmbeddedControllerFirmwareMinorRelease; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Vendor; + SMBIOS_TABLE_STRING BiosVersion; + UINT16 BiosSegment; + SMBIOS_TABLE_STRING BiosReleaseDate; + UINT8 BiosSize; + MISC_BIOS_CHARACTERISTICS BiosCharacteristics; + UINT8 BIOSCharacteristicsExtensionBytes[2]; + UINT8 SystemBiosMajorRelease; + UINT8 SystemBiosMinorRelease; + UINT8 EmbeddedControllerFirmwareMajorRelease; + UINT8 EmbeddedControllerFirmwareMinorRelease; } SMBIOS_TABLE_TYPE0; +/// +/// System Wake-up Type +/// +typedef enum { + SystemWakeupTypeReserved = 0x00, + SystemWakeupTypeOther = 0x01, + SystemWakeupTypeUnknown = 0x02, + SystemWakeupTypeApmTimer = 0x03, + SystemWakeupTypeModemRing = 0x04, + SystemWakeupTypeLanRemote = 0x05, + SystemWakeupTypePowerSwitch = 0x06, + SystemWakeupTypePciPme = 0x07, + SystemWakeupTypeAcPowerRestored = 0x08 +} MISC_SYSTEM_WAKEUP_TYPE; + /// /// 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 +/// one and only one System Information (Type 1) structure. /// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Manufacturer; - SMBIOS_TABLE_STRING ProductName; - SMBIOS_TABLE_STRING Version; - SMBIOS_TABLE_STRING SerialNumber; - EFI_GUID Uuid; - UINT8 WakeUpType; - SMBIOS_TABLE_STRING SKUNumber; - SMBIOS_TABLE_STRING Family; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Manufacturer; + SMBIOS_TABLE_STRING ProductName; + SMBIOS_TABLE_STRING Version; + SMBIOS_TABLE_STRING SerialNumber; + GUID Uuid; + MISC_SYSTEM_WAKEUP_TYPE WakeUpType; + SMBIOS_TABLE_STRING SKUNumber; + SMBIOS_TABLE_STRING Family; } SMBIOS_TABLE_TYPE1; +/// +/// Base Board ¡ª Feature Flags +/// +typedef struct { + UINT8 Motherboard :1; + UINT8 RequiresDaughterCard :1; + UINT8 Removable :1; + UINT8 Replaceable :1; + UINT8 HotSwappable :1; + UINT8 Reserved :3; +} BASE_BOARD_FEATURE_FLAGS; + +/// +/// Base Board ¡ª Board Type +/// +typedef enum { + BaseBoardTypeUnknown = 0x1, + BaseBoardTypeOther = 0x2, + BaseBoardTypeServerBlade = 0x3, + BaseBoardTypeConnectivitySwitch = 0x4, + BaseBoardTypeSystemManagementModule = 0x5, + BaseBoardTypeProcessorModule = 0x6, + BaseBoardTypeIOModule = 0x7, + BaseBoardTypeMemoryModule = 0x8, + BaseBoardTypeDaughterBoard = 0x9, + BaseBoardTypeMotherBoard = 0xA, + BaseBoardTypeProcessorMemoryModule = 0xB, + BaseBoardTypeProcessorIOModule = 0xC, + BaseBoardTypeInterconnectBoard = 0xD +} BASE_BOARD_TYPE; + /// /// 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. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Manufacturer; - SMBIOS_TABLE_STRING ProductName; - SMBIOS_TABLE_STRING Version; - SMBIOS_TABLE_STRING SerialNumber; - SMBIOS_TABLE_STRING AssetTag; - UINT8 FeatureFlag; - SMBIOS_TABLE_STRING LocationInChassis; - UINT16 ChassisHandle; - UINT8 BoardType; - UINT8 NumberOfContainedObjectHandles; - UINT16 ContainedObjectHandles[1]; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Manufacturer; + SMBIOS_TABLE_STRING ProductName; + SMBIOS_TABLE_STRING Version; + SMBIOS_TABLE_STRING SerialNumber; + SMBIOS_TABLE_STRING AssetTag; + BASE_BOARD_FEATURE_FLAGS FeatureFlag; + SMBIOS_TABLE_STRING LocationInChassis; + UINT16 ChassisHandle; + BASE_BOARD_TYPE BoardType; + UINT8 NumberOfContainedObjectHandles; + UINT16 ContainedObjectHandles[1]; } SMBIOS_TABLE_TYPE2; +/// +/// System Enclosure or Chassis Types +/// +typedef enum { + MiscChassisTypeOther = 0x01, + MiscChassisTypeUnknown = 0x02, + MiscChassisTypeDeskTop = 0x03, + MiscChassisTypeLowProfileDesktop = 0x04, + MiscChassisTypePizzaBox = 0x05, + MiscChassisTypeMiniTower = 0x06, + MiscChassisTypeTower = 0x07, + MiscChassisTypePortable = 0x08, + MiscChassisTypeLapTop = 0x09, + MiscChassisTypeNotebook = 0x0A, + MiscChassisTypeHandHeld = 0x0B, + MiscChassisTypeDockingStation = 0x0C, + MiscChassisTypeAllInOne = 0x0D, + MiscChassisTypeSubNotebook = 0x0E, + MiscChassisTypeSpaceSaving = 0x0F, + MiscChassisTypeLunchBox = 0x10, + MiscChassisTypeMainServerChassis = 0x11, + MiscChassisTypeExpansionChassis = 0x12, + MiscChassisTypeSubChassis = 0x13, + MiscChassisTypeBusExpansionChassis = 0x14, + MiscChassisTypePeripheralChassis = 0x15, + MiscChassisTypeRaidChassis = 0x16, + MiscChassisTypeRackMountChassis = 0x17, + MiscChassisTypeSealedCasePc = 0x18, + MiscChassisMultiSystemChassis = 0x19, + MiscChassisCompactPCI = 0x1A, + MiscChassisAdvancedTCA = 0x1B, + MiscChassisBlade = 0x1C, + MiscChassisBladeEnclosure = 0x1D +} MISC_CHASSIS_TYPE; + +/// +/// System Enclosure or Chassis States +/// +typedef enum { + ChassisStateOther = 0x01, + ChassisStateUnknown = 0x02, + ChassisStateSafe = 0x03, + ChassisStateWarning = 0x04, + ChassisStateCritical = 0x05, + ChassisStateNonRecoverable = 0x06 +} MISC_CHASSIS_STATE; + +/// +/// System Enclosure or Chassis Security Status +/// +typedef enum { + ChassisSecurityStatusOther = 0x01, + ChassisSecurityStatusUnknown = 0x02, + ChassisSecurityStatusNone = 0x03, + ChassisSecurityStatusExternalInterfaceLockedOut = 0x04, + ChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05 +} MISC_CHASSIS_SECURITY_STATE; + /// /// Contained Element record /// @@ -109,45 +299,298 @@ typedef struct { UINT8 ContainedElementMaximum; } CONTAINED_ELEMENT; + /// /// System Enclosure or Chassis (Type 3) /// +/// The information in this structure defines attributes of the system's mechanical enclosure(s). +/// For example, if a system included a separate enclosure for its peripheral devices, +/// two structures would be returned: one for the main, system enclosure and the second for +/// the peripheral device enclosure. The additions to this structure in v2.1 of this specification +/// support the population of the CIM_Chassis class. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Manufacturer; - UINT8 Type; - SMBIOS_TABLE_STRING Version; - SMBIOS_TABLE_STRING SerialNumber; - SMBIOS_TABLE_STRING AssetTag; - UINT8 BootupState; - UINT8 PowerSupplyState; - UINT8 ThermalState; - UINT8 SecurityStatus; - UINT8 OemDefined[4]; - UINT8 Height; - UINT8 NumberofPowerCords; - UINT8 ContainedElementCount; - UINT8 ContainedElementRecordLength; - CONTAINED_ELEMENT ContainedElements[1]; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Manufacturer; + UINT8 Type; + 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 OemDefined[4]; + UINT8 Height; + UINT8 NumberofPowerCords; + UINT8 ContainedElementCount; + UINT8 ContainedElementRecordLength; + CONTAINED_ELEMENT ContainedElements[1]; } SMBIOS_TABLE_TYPE3; +/// +/// Processor Information - Processor Type +/// +typedef enum { + ProcessorOther = 0x01, + ProcessorUnknown = 0x02, + CentralProcessor = 0x03, + MathProcessor = 0x04, + DspProcessor = 0x05, + VideoProcessor = 0x06 +} PROCESSOR_TYPE_DATA; + +/// +/// Processor Information - Processor Family +/// +typedef enum { + ProcessorFamilyOther = 0x01, + ProcessorFamilyUnknown = 0x02, + ProcessorFamily8086 = 0x03, + ProcessorFamily80286 = 0x04, + ProcessorFamilyIntel386 = 0x05, + ProcessorFamilyIntel486 = 0x06, + ProcessorFamily8087 = 0x07, + ProcessorFamily80287 = 0x08, + ProcessorFamily80387 = 0x09, + ProcessorFamily80487 = 0x0A, + ProcessorFamilyPentium = 0x0B, + ProcessorFamilyPentiumPro = 0x0C, + ProcessorFamilyPentiumII = 0x0D, + ProcessorFamilyPentiumMMX = 0x0E, + ProcessorFamilyCeleron = 0x0F, + ProcessorFamilyPentiumIIXeon = 0x10, + ProcessorFamilyPentiumIII = 0x11, + ProcessorFamilyM1 = 0x12, + ProcessorFamilyM2 = 0x13, + ProcessorFamilyM1Reserved2 = 0x14, + ProcessorFamilyM1Reserved3 = 0x15, + ProcessorFamilyM1Reserved4 = 0x16, + ProcessorFamilyM1Reserved5 = 0x17, + ProcessorFamilyAmdDuron = 0x18, + ProcessorFamilyK5 = 0x19, + ProcessorFamilyK6 = 0x1A, + ProcessorFamilyK6_2 = 0x1B, + ProcessorFamilyK6_3 = 0x1C, + ProcessorFamilyAmdAthlon = 0x1D, + ProcessorFamilyAmd29000 = 0x1E, + ProcessorFamilyK6_2Plus = 0x1F, + ProcessorFamilyPowerPC = 0x20, + ProcessorFamilyPowerPC601 = 0x21, + ProcessorFamilyPowerPC603 = 0x22, + ProcessorFamilyPowerPC603Plus = 0x23, + ProcessorFamilyPowerPC604 = 0x24, + ProcessorFamilyPowerPC620 = 0x25, + ProcessorFamilyPowerPCx704 = 0x26, + ProcessorFamilyPowerPC750 = 0x27, + ProcessorFamilyAlpha3 = 0x30, + ProcessorFamilyAlpha21064 = 0x31, + ProcessorFamilyAlpha21066 = 0x32, + ProcessorFamilyAlpha21164 = 0x33, + ProcessorFamilyAlpha21164PC = 0x34, + ProcessorFamilyAlpha21164a = 0x35, + ProcessorFamilyAlpha21264 = 0x36, + ProcessorFamilyAlpha21364 = 0x37, + ProcessorFamilyMips = 0x40, + ProcessorFamilyMIPSR4000 = 0x41, + ProcessorFamilyMIPSR4200 = 0x42, + ProcessorFamilyMIPSR4400 = 0x43, + ProcessorFamilyMIPSR4600 = 0x44, + ProcessorFamilyMIPSR10000 = 0x45, + ProcessorFamilySparc = 0x50, + ProcessorFamilySuperSparc = 0x51, + ProcessorFamilymicroSparcII = 0x52, + ProcessorFamilymicroSparcIIep = 0x53, + ProcessorFamilyUltraSparc = 0x54, + ProcessorFamilyUltraSparcII = 0x55, + ProcessorFamilyUltraSparcIIi = 0x56, + ProcessorFamilyUltraSparcIII = 0x57, + ProcessorFamilyUltraSparcIIIi = 0x58, + ProcessorFamily68040 = 0x60, + ProcessorFamily68xxx = 0x61, + ProcessorFamily68000 = 0x62, + ProcessorFamily68010 = 0x63, + ProcessorFamily68020 = 0x64, + ProcessorFamily68030 = 0x65, + ProcessorFamilyHobbit = 0x70, + ProcessorFamilyCrusoeTM5000 = 0x78, + ProcessorFamilyCrusoeTM3000 = 0x79, + ProcessorFamilyEfficeonTM8000 = 0x7A, + ProcessorFamilyWeitek = 0x80, + ProcessorFamilyItanium = 0x82, + ProcessorFamilyAmdAthlon64 = 0x83, + ProcessorFamilyAmdOpteron = 0x84, + ProcessorFamilyAmdSempron = 0x85, + ProcessorFamilyAmdTurion64Mobile = 0x86, + ProcessorFamilyDualCoreAmdOpteron = 0x87, + ProcessorFamilyAmdAthlon64X2DualCore = 0x88, + ProcessorFamilyAmdTurion64X2Mobile = 0x89, + ProcessorFamilyPARISC = 0x90, + ProcessorFamilyPaRisc8500 = 0x91, + ProcessorFamilyPaRisc8000 = 0x92, + ProcessorFamilyPaRisc7300LC = 0x93, + ProcessorFamilyPaRisc7200 = 0x94, + ProcessorFamilyPaRisc7100LC = 0x95, + ProcessorFamilyPaRisc7100 = 0x96, + ProcessorFamilyV30 = 0xA0, + ProcessorFamilyPentiumIIIXeon = 0xB0, + ProcessorFamilyPentiumIIISpeedStep = 0xB1, + ProcessorFamilyPentium4 = 0xB2, + ProcessorFamilyIntelXeon = 0xB3, + ProcessorFamilyAS400 = 0xB4, + ProcessorFamilyIntelXeonMP = 0xB5, + ProcessorFamilyAMDAthlonXP = 0xB6, + ProcessorFamilyAMDAthlonMP = 0xB7, + ProcessorFamilyIntelItanium2 = 0xB8, + ProcessorFamilyIntelPentiumM = 0xB9, + ProcessorFamilyIntelCeleronD = 0xBA, + ProcessorFamilyIntelPentiumD = 0xBB, + ProcessorFamilyIntelPentiumEx = 0xBC, + ProcessorFamilyIntelCoreSolo = 0xBD, // SMBIOS spec 2.6 correct this value + ProcessorFamilyReserved = 0xBE, + ProcessorFamilyIntelCore2 = 0xBF, + ProcessorFamilyIBM390 = 0xC8, + ProcessorFamilyG4 = 0xC9, + ProcessorFamilyG5 = 0xCA, + ProcessorFamilyG6 = 0xCB, + ProcessorFamilyzArchitectur = 0xCC, + ProcessorFamilyViaC7M = 0xD2, + ProcessorFamilyViaC7D = 0xD3, + ProcessorFamilyViaC7 = 0xD4, + ProcessorFamilyViaEden = 0xD5, + ProcessorFamilyi860 = 0xFA, + ProcessorFamilyi960 = 0xFB, + ProcessorFamilyIndicatorFamily2 = 0xFE, + ProcessorFamilyReserved1 = 0xFF +} PROCESSOR_FAMILY_DATA; + +/// +/// Processor Information ¨C Voltage +/// +typedef struct { + UINT8 ProcessorVoltageCapability5V :1; // Bit 0 + UINT8 ProcessorVoltageCapability3_3V :1; // Bit 1 + UINT8 ProcessorVoltageCapability2_9V :1; // Bit 2 + UINT8 ProcessorVoltageCapabilityReserved :1; // Bit 3 ,must be zero. + UINT8 ProcessorVoltageReserved :3; // Bits 4-6, must be zero. + UINT8 ProcessorVoltageIndicateLegacy :1; // Bit 7. +} PROCESSOR_VOLTAGE; + +/// +/// Processor Information - Processor Upgrade +/// +typedef enum { + ProcessorUpgradeOther = 0x01, + ProcessorUpgradeUnknown = 0x02, + ProcessorUpgradeDaughterBoard = 0x03, + ProcessorUpgradeZIFSocket = 0x04, + ProcessorUpgradePiggyBack = 0x05, // Replaceable + ProcessorUpgradeNone = 0x06, + ProcessorUpgradeLIFSocket = 0x07, + ProcessorUpgradeSlot1 = 0x08, + ProcessorUpgradeSlot2 = 0x09, + ProcessorUpgrade370PinSocket = 0x0A, + ProcessorUpgradeSlotA = 0x0B, + ProcessorUpgradeSlotM = 0x0C, + ProcessorUpgradeSocket423 = 0x0D, + ProcessorUpgradeSocketA = 0x0E, // Socket 462 + ProcessorUpgradeSocket478 = 0x0F, + ProcessorUpgradeSocket754 = 0x10, + ProcessorUpgradeSocket940 = 0x11, + ProcessorUpgradeSocket939 = 0x12, + ProcessorUpgradeSocketmPGA604 = 0x13, + ProcessorUpgradeSocketLGA771 = 0x14, + ProcessorUpgradeSocketLGA775 = 0x15, + ProcessorUpgradeSocketS1 = 0x16, + ProcessorUpgradeAM2 = 0x17, + ProcessorUpgradeF1207 = 0x18 +} PROCESSOR_UPGRADE; + +/// +/// Processor ID Field Description +/// +typedef struct { + UINT32 ProcessorSteppingId:4; + UINT32 ProcessorModel: 4; + UINT32 ProcessorFamily: 4; + UINT32 ProcessorType: 2; + UINT32 ProcessorReserved1: 2; + UINT32 ProcessorXModel: 4; + UINT32 ProcessorXFamily: 8; + UINT32 ProcessorReserved2: 4; +} 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; + UINT32 ProcessorDe :1; + UINT32 ProcessorPse :1; + UINT32 ProcessorTsc :1; + UINT32 ProcessorMsr :1; + UINT32 ProcessorPae :1; + UINT32 ProcessorMce :1; + UINT32 ProcessorCx8 :1; + UINT32 ProcessorApic :1; + UINT32 ProcessorReserved1 :1; + UINT32 ProcessorSep :1; + UINT32 ProcessorMtrr :1; + UINT32 ProcessorPge :1; + UINT32 ProcessorMca :1; + UINT32 ProcessorCmov :1; + UINT32 ProcessorPat :1; + UINT32 ProcessorPse36 :1; + UINT32 ProcessorPsn :1; + UINT32 ProcessorClfsh :1; + UINT32 ProcessorReserved2 :1; + UINT32 ProcessorDs :1; + UINT32 ProcessorAcpi :1; + UINT32 ProcessorMmx :1; + UINT32 ProcessorFxsr :1; + UINT32 ProcessorSse :1; + UINT32 ProcessorSse2 :1; + UINT32 ProcessorSs :1; + UINT32 ProcessorReserved3 :1; + UINT32 ProcessorTm :1; + UINT32 ProcessorReserved4 :2; +} PROCESSOR_FEATURE_FLAGS; + +typedef struct { + PROCESSOR_SIGNATURE Signature; + PROCESSOR_MISC_INFO MiscInfo; + UINT32 Reserved; + PROCESSOR_FEATURE_FLAGS FeatureFlags; +} PROCESSOR_ID_DATA; // 4*4 bytes + /// /// 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. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 Socket; - UINT8 ProcessorType; - UINT8 ProcessorFamily; + PROCESSOR_TYPE_DATA ProcessorType; + PROCESSOR_FAMILY_DATA ProcessorFamily; SMBIOS_TABLE_STRING ProcessorManufacture; - UINT8 ProcessorId[8]; + PROCESSOR_ID_DATA ProcessorId; SMBIOS_TABLE_STRING ProcessorVersion; - UINT8 Voltage; + PROCESSOR_VOLTAGE Voltage; UINT16 ExternalClock; UINT16 MaxSpeed; UINT16 CurrentSpeed; UINT8 Status; - UINT8 ProcessorUpgrade; + PROCESSOR_UPGRADE ProcessorUpgrade; UINT16 L1CacheHandle; UINT16 L2CacheHandle; UINT16 L3CacheHandle; @@ -168,97 +611,463 @@ typedef struct { } SMBIOS_TABLE_TYPE4; /// -/// Memory Controller Information (Type 5, Obsolete) +/// Memory Controller Error Detecting Method +/// +typedef enum { + ErrorDetectingMethodOther = 0x01, + ErrorDetectingMethodUnknown = 0x02, + ErrorDetectingMethodNone = 0x03, + ErrorDetectingMethodParity = 0x04, + ErrorDetectingMethod32Ecc = 0x05, + ErrorDetectingMethod64Ecc = 0x06, + ErrorDetectingMethod128Ecc = 0x07, + ErrorDetectingMethodCrc = 0x08 +} MEMORY_ERROR_DETECT_METHOD; + +/// +/// Memory Controller Error Correcting Capability /// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT8 ErrDetectMethod; - UINT8 ErrCorrectCapability; - UINT8 SupportInterleave; - UINT8 CurrentInterleave; - UINT8 MaxMemoryModuleSize; - UINT16 SupportSpeed; - UINT16 SupportMemoryType; - UINT8 MemoryModuleVoltage; - UINT8 AssociatedMemorySlotNum; - UINT16 MemoryModuleConfigHandles[1]; + UINT8 Other :1; + UINT8 Unknown :1; + UINT8 None :1; + UINT8 SingleBitErrorCorrect :1; + UINT8 DoubleBitErrorCorrect :1; + UINT8 ErrorScrubbing :1; + UINT8 Reserved :2; +} MEMORY_ERROR_CORRECT_CAPABILITY; + +/// +/// Memory Controller Information - Interleave Support +/// +typedef enum { + MemoryInterleaveOther = 0x01, + MemoryInterleaveUnknown = 0x02, + MemoryInterleaveOneWay = 0x03, + MemoryInterleaveTwoWay = 0x04, + MemoryInterleaveFourWay = 0x05, + MemoryInterleaveEightWay = 0x06, + MemoryInterleaveSixteenWay = 0x07 +} MEMORY_SUPPORT_INTERLEAVE_TYPE; + +/// +/// Memory Controller Information - Memory Speeds +/// +typedef struct { + UINT16 Other :1; + UINT16 Unknown :1; + UINT16 SeventyNs:1; + UINT16 SixtyNs :1; + UINT16 FiftyNs :1; + UINT16 Reserved :11; +} MEMORY_SPEED_TYPE; + +/// +/// Memory Controller Information (Type 5, Obsolete) +/// +/// The information in this structure defines the attributes of the system's memory controller(s) +/// and the supported attributes of any memory-modules present in the sockets controlled by +/// this controller. +/// Note: This structure, and its companion Memory Module Information (Type 6, Obsolete), +/// 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; + MEMORY_ERROR_CORRECT_CAPABILITY ErrCorrectCapability; + MEMORY_SUPPORT_INTERLEAVE_TYPE SupportInterleave; + UINT8 CurrentInterleave; + UINT8 MaxMemoryModuleSize; + MEMORY_SPEED_TYPE SupportSpeed; + UINT16 SupportMemoryType; + UINT8 MemoryModuleVoltage; + UINT8 AssociatedMemorySlotNum; + UINT16 MemoryModuleConfigHandles[1]; } SMBIOS_TABLE_TYPE5; +/// +/// Memory Module Information - Memory Types +/// +typedef struct { + UINT16 Other :1; + UINT16 Unknown :1; + UINT16 Standard :1; + UINT16 FastPageMode:1; + UINT16 EDO :1; + UINT16 Parity :1; + UINT16 ECC :1; + UINT16 SIMM :1; + UINT16 DIMM :1; + UINT16 BurstEdo :1; + UINT16 SDRAM :1; + UINT16 Reserved :5; +} MEMORY_CURRENT_TYPE; + +/// +/// Memory Module Information - Memory Size +/// +typedef struct { + UINT8 InstalledOrEnabledSize :7;// Size (n), where 2**n is the size in MB. + UINT8 SingleOrDoubleBank :1; +} MEMORY_INSTALLED_ENABLED_SIZE; + /// /// Memory Module Information (Type 6, Obsolete) /// +/// 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) +/// and Memory Device (Type 17) structures should be used instead. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING SocketDesignation; - UINT8 BankConnections; - UINT8 CurrentSpeed; - UINT16 CurrentMemoryType; - UINT8 InstalledSize; - UINT8 EnabledSize; - UINT8 ErrorStatus; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING SocketDesignation; + UINT8 BankConnections; + UINT8 CurrentSpeed; + MEMORY_CURRENT_TYPE CurrentMemoryType; + MEMORY_INSTALLED_ENABLED_SIZE InstalledSize; + MEMORY_INSTALLED_ENABLED_SIZE EnabledSize; + UINT8 ErrorStatus; } SMBIOS_TABLE_TYPE6; +/// +/// Cache Information - SRAM Type +/// +typedef struct { + UINT16 Other :1; + UINT16 Unknown :1; + UINT16 NonBurst :1; + UINT16 Burst :1; + UINT16 PipelineBurst :1; + UINT16 Asynchronous :1; + UINT16 Synchronous :1; + UINT16 Reserved :9; +} CACHE_SRAM_TYPE_DATA; + +/// +/// Cache Information - Error Correction Type +/// +typedef enum { + CacheErrorOther = 0x01, + CacheErrorUnknown = 0x02, + CacheErrorNone = 0x03, + CacheErrorParity = 0x04, + CacheErrorSingleBit = 0x05, // ECC + CacheErrorMultiBit = 0x06 // ECC +} CACHE_ERROR_TYPE_DATA; + +/// +/// Cache Information - System Cache Type +/// +typedef enum { + CacheTypeOther = 0x01, + CacheTypeUnknown = 0x02, + CacheTypeInstruction = 0x03, + CacheTypeData = 0x04, + CacheTypeUnified = 0x05 +} CACHE_TYPE_DATA; + +/// +/// Cache Information - Associativity +/// +typedef enum { + CacheAssociativityOther = 0x01, + CacheAssociativityUnknown = 0x02, + CacheAssociativityDirectMapped = 0x03, + CacheAssociativity2Way = 0x04, + CacheAssociativity4Way = 0x05, + CacheAssociativityFully = 0x06, + CacheAssociativity8Way = 0x07, + CacheAssociativity16Way = 0x08, + CacheAssociativity24Way = 0x09 +} CACHE_ASSOCIATIVITY_DATA; + /// /// Cache Information (Type 7) /// +/// he information in this structure defines the attributes of CPU cache device in the system. +/// One structure is specified for each such device, whether the device is internal to +/// or external to the CPU module. Cache modules can be associated with a processor structure +/// in one or two ways depending on the SMBIOS version. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING SocketDesignation; - UINT16 CacheConfiguration; - UINT16 MaximumCacheSize; - UINT16 InstalledSize; - UINT16 SupportedSRAMType; - UINT16 CurrentSRAMType; - UINT8 CacheSpeed; - UINT8 ErrorCorrectionType; - UINT8 SystemCacheType; - UINT8 Associativity; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING SocketDesignation; + UINT16 CacheConfiguration; + UINT16 MaximumCacheSize; + UINT16 InstalledSize; + CACHE_SRAM_TYPE_DATA SupportedSRAMType; + CACHE_SRAM_TYPE_DATA CurrentSRAMType; + UINT8 CacheSpeed; + CACHE_ERROR_TYPE_DATA ErrorCorrectionType; + CACHE_TYPE_DATA SystemCacheType; + CACHE_ASSOCIATIVITY_DATA Associativity; } SMBIOS_TABLE_TYPE7; +/// +/// Port Connector Information - Connector Types +/// +typedef enum { + PortConnectorTypeNone = 0x00, + PortConnectorTypeCentronics = 0x01, + PortConnectorTypeMiniCentronics = 0x02, + PortConnectorTypeProprietary = 0x03, + PortConnectorTypeDB25Male = 0x04, + PortConnectorTypeDB25Female = 0x05, + PortConnectorTypeDB15Male = 0x06, + PortConnectorTypeDB15Female = 0x07, + PortConnectorTypeDB9Male = 0x08, + PortConnectorTypeDB9Female = 0x09, + PortConnectorTypeRJ11 = 0x0A, + PortConnectorTypeRJ45 = 0x0B, + PortConnectorType50PinMiniScsi = 0x0C, + PortConnectorTypeMiniDin = 0x0D, + PortConnectorTypeMicriDin = 0x0E, + PortConnectorTypePS2 = 0x0F, + PortConnectorTypeInfrared = 0x10, + PortConnectorTypeHpHil = 0x11, + PortConnectorTypeUsb = 0x12, + PortConnectorTypeSsaScsi = 0x13, + PortConnectorTypeCircularDin8Male = 0x14, + PortConnectorTypeCircularDin8Female = 0x15, + PortConnectorTypeOnboardIde = 0x16, + PortConnectorTypeOnboardFloppy = 0x17, + PortConnectorType9PinDualInline = 0x18, + PortConnectorType25PinDualInline = 0x19, + PortConnectorType50PinDualInline = 0x1A, + PortConnectorType68PinDualInline = 0x1B, + PortConnectorTypeOnboardSoundInput = 0x1C, + PortConnectorTypeMiniCentronicsType14 = 0x1D, + PortConnectorTypeMiniCentronicsType26 = 0x1E, + PortConnectorTypeHeadPhoneMiniJack = 0x1F, + PortConnectorTypeBNC = 0x20, + PortConnectorType1394 = 0x21, + PortConnectorTypePC98 = 0xA0, + PortConnectorTypePC98Hireso = 0xA1, + PortConnectorTypePCH98 = 0xA2, + PortConnectorTypePC98Note = 0xA3, + PortConnectorTypePC98Full = 0xA4, + PortConnectorTypeOther = 0xFF +} MISC_PORT_CONNECTOR_TYPE; + +/// +/// Port Connector Information - Port Types +/// +typedef enum { + PortTypeNone = 0x00, + PortTypeParallelXtAtCompatible = 0x01, + PortTypeParallelPortPs2 = 0x02, + PortTypeParallelPortEcp = 0x03, + PortTypeParallelPortEpp = 0x04, + PortTypeParallelPortEcpEpp = 0x05, + PortTypeSerialXtAtCompatible = 0x06, + PortTypeSerial16450Compatible = 0x07, + PortTypeSerial16550Compatible = 0x08, + PortTypeSerial16550ACompatible = 0x09, + PortTypeScsi = 0x0A, + PortTypeMidi = 0x0B, + PortTypeJoyStick = 0x0C, + PortTypeKeyboard = 0x0D, + PortTypeMouse = 0x0E, + PortTypeSsaScsi = 0x0F, + PortTypeUsb = 0x10, + PortTypeFireWire = 0x11, + PortTypePcmciaTypeI = 0x12, + PortTypePcmciaTypeII = 0x13, + PortTypePcmciaTypeIII = 0x14, + PortTypeCardBus = 0x15, + PortTypeAccessBusPort = 0x16, + PortTypeScsiII = 0x17, + PortTypeScsiWide = 0x18, + PortTypePC98 = 0x19, + PortTypePC98Hireso = 0x1A, + PortTypePCH98 = 0x1B, + PortTypeVideoPort = 0x1C, + PortTypeAudioPort = 0x1D, + PortTypeModemPort = 0x1E, + PortTypeNetworkPort = 0x1F, + PortType8251Compatible = 0xA0, + PortType8251FifoCompatible = 0xA1, + PortTypeOther = 0xFF +} MISC_PORT_TYPE; + /// /// Port Connector Information (Type 8) /// +/// The information in this structure defines the attributes of a system port connector, +/// e.g. parallel, serial, keyboard, or mouse ports. The port¡¯s type and connector information +/// are provided. One structure is present for each port provided by the system. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING InternalReferenceDesignator; - UINT8 InternalConnectorType; - SMBIOS_TABLE_STRING ExternalReferenceDesignator; - UINT8 ExternalConnectorType; - UINT8 PortType; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING InternalReferenceDesignator; + MISC_PORT_CONNECTOR_TYPE InternalConnectorType; + SMBIOS_TABLE_STRING ExternalReferenceDesignator; + MISC_PORT_CONNECTOR_TYPE ExternalConnectorType; + MISC_PORT_TYPE PortType; } SMBIOS_TABLE_TYPE8; +/// +/// System Slots - Slot Type +/// +typedef enum { + SlotTypeOther = 0x01, + SlotTypeUnknown = 0x02, + SlotTypeIsa = 0x03, + SlotTypeMca = 0x04, + SlotTypeEisa = 0x05, + SlotTypePci = 0x06, + SlotTypePcmcia = 0x07, + SlotTypeVlVesa = 0x08, + SlotTypeProprietary = 0x09, + SlotTypeProcessorCardSlot = 0x0A, + SlotTypeProprietaryMemoryCardSlot = 0x0B, + SlotTypeIORiserCardSlot = 0x0C, + SlotTypeNuBus = 0x0D, + SlotTypePci66MhzCapable = 0x0E, + SlotTypeAgp = 0x0F, + SlotTypeApg2X = 0x10, + SlotTypeAgp4X = 0x11, + SlotTypePciX = 0x12, + SlotTypeAgp4x = 0x13, + SlotTypePC98C20 = 0xA0, + SlotTypePC98C24 = 0xA1, + SlotTypePC98E = 0xA2, + SlotTypePC98LocalBus = 0xA3, + SlotTypePC98Card = 0xA4, + SlotTypePciExpress = 0xA5, + SlotTypePciExpressX1 = 0xA6, + SlotTypePciExpressX2 = 0xA7, + SlotTypePciExpressX4 = 0xA8, + SlotTypePciExpressX8 = 0xA9, + SlotTypePciExpressX16 = 0xAA +} MISC_SLOT_TYPE; + +/// +/// System Slots - Slot Data Bus Width +/// +typedef enum { + SlotDataBusWidthOther = 0x01, + SlotDataBusWidthUnknown = 0x02, + SlotDataBusWidth8Bit = 0x03, + SlotDataBusWidth16Bit = 0x04, + SlotDataBusWidth32Bit = 0x05, + SlotDataBusWidth64Bit = 0x06, + SlotDataBusWidth128Bit = 0x07, + SlotDataBusWidth1X = 0x08, // Or X1 + SlotDataBusWidth2X = 0x09, // Or X2 + SlotDataBusWidth4X = 0x0A, // Or X4 + SlotDataBusWidth8X = 0x0B, // Or X8 + SlotDataBusWidth12X = 0x0C, // Or X12 + SlotDataBusWidth16X = 0x0D, // Or X16 + SlotDataBusWidth32X = 0x0E // Or X32 +} MISC_SLOT_DATA_BUS_WIDTH; + +/// +/// System Slots - Current Usage +/// +typedef enum { + SlotUsageOther = 0x01, + SlotUsageUnknown = 0x02, + SlotUsageAvailable = 0x03, + SlotUsageInUse = 0x04 +} MISC_SLOT_USAGE; + +/// +/// System Slots - Slot Length +/// +typedef enum { + SlotLengthOther = 0x01, + SlotLengthUnknown = 0x02, + SlotLengthShort = 0x03, + SlotLengthLong = 0x04 +} MISC_SLOT_LENGTH; + +/// +/// System Slots - Slot Characteristics 1 +/// +typedef struct { + UINT8 CharacteristicsUnknown :1; + UINT8 Provides50Volts :1; + UINT8 Provides33Volts :1; + UINT8 SharedSlot :1; + UINT8 PcCard16Supported :1; + UINT8 CardBusSupported :1; + UINT8 ZoomVideoSupported :1; + UINT8 ModemRingResumeSupported:1; +} MISC_SLOT_CHARACTERISTICS1; +/// +/// System Slots - Slot Characteristics 2 +/// +typedef struct { + UINT8 PmeSignalSupported :1; + UINT8 HotPlugDevicesSupported :1; + UINT8 SmbusSignalSupported :1; + UINT8 Reserved :5; //Set to 0. +} MISC_SLOT_CHARACTERISTICS2; + /// /// System Slots (Type 9) /// +/// 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; - UINT8 SlotDataBusWidth; - UINT8 CurrentUsage; - UINT8 SlotLength; - UINT16 SlotID; - UINT8 SlotCharacteristics1; - UINT8 SlotCharacteristics2; + 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; + UINT16 SlotID; + MISC_SLOT_CHARACTERISTICS1 SlotCharacteristics1; + MISC_SLOT_CHARACTERISTICS2 SlotCharacteristics2; // // Add for smbios 2.6 // - UINT16 SegmentGroupNum; - UINT8 BusNum; - UINT8 DevFuncNum; + UINT16 SegmentGroupNum; + UINT8 BusNum; + UINT8 DevFuncNum; } SMBIOS_TABLE_TYPE9; +/// +/// On Board Devices Information - Device Types +/// +typedef enum { + OnBoardDeviceTypeOther = 0x01, + OnBoardDeviceTypeUnknown = 0x02, + OnBoardDeviceTypeVideo = 0x03, + OnBoardDeviceTypeScsiController = 0x04, + OnBoardDeviceTypeEthernet = 0x05, + OnBoardDeviceTypeTokenRing = 0x06, + OnBoardDeviceTypeSound = 0x07 +} MISC_ONBOARD_DEVICE_TYPE; + /// /// Device Item Entry /// typedef struct { - UINT8 DeviceType; - SMBIOS_TABLE_STRING DescriptionString; + MISC_ONBOARD_DEVICE_TYPE DeviceType; + SMBIOS_TABLE_STRING DescriptionString; } DEVICE_STRUCT; /// /// On Board Devices Information (Type 10, obsolete) /// +/// Note: This structure is obsolete starting with version 2.6 specification; the Onboard Devices Extended +/// Information (Type 41) structure should be used instead . BIOS providers can choose to implement both +/// types to allow existing SMBIOS browsers to properly display the system's onboard devices information. +/// The information in this structure defines the attributes of devices that are onboard (soldered onto) +/// a system element, usually the baseboard. In general, an entry in this table implies that the BIOS +/// has some level of control over the enabling of the associated device for use by the system. +/// typedef struct { SMBIOS_STRUCTURE Hdr; DEVICE_STRUCT Device[1]; @@ -266,6 +1075,8 @@ typedef struct { /// /// 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; @@ -275,14 +1086,19 @@ typedef struct { /// /// System Configuration Options (Type 12) /// +/// This structure contains information required to configure the base board's Jumpers and Switches. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 StringCount; } SMBIOS_TABLE_TYPE12; + /// /// BIOS Language Information (Type 13) /// +/// The information in this structure defines the installable language attributes of the BIOS. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 InstallableLanguages; @@ -291,6 +1107,53 @@ typedef struct { SMBIOS_TABLE_STRING CurrentLanguages; } SMBIOS_TABLE_TYPE13; +/// +/// System Event Log - Event Log Types +/// +typedef enum { + EventLogTypeReserved = 0x00, + EventLogTypeSingleBitECC = 0x01, + EventLogTypeMultiBitECC = 0x02, + EventLogTypeParityMemErr = 0x03, + EventLogTypeBusTimeOut = 0x04, + EventLogTypeIOChannelCheck = 0x05, + EventLogTypeSoftwareNMI = 0x06, + EventLogTypePOSTMemResize = 0x07, + EventLogTypePOSTErr = 0x08, + EventLogTypePCIParityErr = 0x09, + EventLogTypePCISystemErr = 0x0A, + EventLogTypeCPUFailure = 0x0B, + EventLogTypeEISATimeOut = 0x0C, + EventLogTypeMemLogDisabled = 0x0D, + EventLogTypeLoggingDisabled = 0x0E, + EventLogTypeSysLimitExce = 0x10, + EventLogTypeAsyncHWTimer = 0x11, + EventLogTypeSysConfigInfo = 0x12, + EventLogTypeHDInfo = 0x13, + EventLogTypeSysReconfig = 0x14, + EventLogTypeUncorrectCPUErr = 0x15, + EventLogTypeAreaResetAndClr = 0x16, + EventLogTypeSystemBoot = 0x17, + EventLogTypeUnused = 0x18, // 0x18 - 0x7F + EventLogTypeAvailForSys = 0x80, // 0x80 - 0xFE + EventLogTypeEndOfLog = 0xFF +} EVENT_LOG_TYPE_DATA; + +/// +/// System Event Log - Variable Data Format Types +/// +typedef enum { + EventLogVariableNone = 0x00, + EventLogVariableHandle = 0x01, + EventLogVariableMutilEvent = 0x02, + EventLogVariableMutilEventHandle = 0x03, + EventLogVariablePOSTResultBitmap = 0x04, + EventLogVariableSysManagementType = 0x05, + EventLogVariableMutliEventSysManagmentType = 0x06, + EventLogVariableUnused = 0x07, + EventLogVariableOEMAssigned = 0x80 +} EVENT_LOG_TYPE_DATA; + /// /// Group Item Entry /// @@ -299,26 +1162,35 @@ typedef struct { UINT16 ItemHandle; } GROUP_STRUCT; +/// +/// Event Log Type Descriptors +/// +typedef struct { + EVENT_LOG_TYPE_DATA LogType; + 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; -/// -/// Event Log Type Descriptors -/// -typedef struct { - UINT8 LogType; - UINT8 DataFormatType; -} EVENT_LOG_TYPE; - /// /// System Event Log (Type 15) /// +/// The presence of this structure within the SMBIOS data returned for a system indicates +/// that the system supports an event log. An event log is a fixed-length area within a +/// non-volatile storage element, starting with a fixed-length (and vendor-specific) header +/// record, followed by one or more variable-length log records. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT16 LogAreaLength; @@ -334,63 +1206,229 @@ typedef struct { EVENT_LOG_TYPE EventLogTypeDescriptors[1]; } SMBIOS_TABLE_TYPE15; +/// +/// Physical Memory Array - Location +/// +typedef enum { + MemoryArrayLocationOther = 0x01, + MemoryArrayLocationUnknown = 0x02, + MemoryArrayLocationSystemBoard = 0x03, + MemoryArrayLocationIsaAddonCard = 0x04, + MemoryArrayLocationEisaAddonCard = 0x05, + MemoryArrayLocationPciAddonCard = 0x06, + MemoryArrayLocationMcaAddonCard = 0x07, + MemoryArrayLocationPcmciaAddonCard = 0x08, + MemoryArrayLocationProprietaryAddonCard = 0x09, + MemoryArrayLocationNuBus = 0x0A, + MemoryArrayLocationPc98C20AddonCard = 0xA0, + MemoryArrayLocationPc98C24AddonCard = 0xA1, + MemoryArrayLocationPc98EAddonCard = 0xA2, + MemoryArrayLocationPc98LocalBusAddonCard = 0xA3 +} MEMORY_ARRAY_LOCATION; + +/// +/// Physical Memory Array - Use +/// +typedef enum { + MemoryArrayUseOther = 0x01, + MemoryArrayUseUnknown = 0x02, + MemoryArrayUseSystemMemory = 0x03, + MemoryArrayUseVideoMemory = 0x04, + MemoryArrayUseFlashMemory = 0x05, + MemoryArrayUseNonVolatileRam = 0x06, + MemoryArrayUseCacheMemory = 0x07 +} MEMORY_ARRAY_USE; + +/// +/// Physical Memory Array - Error Correction Types +/// +typedef enum { + MemoryErrorCorrectionOther = 0x01, + MemoryErrorCorrectionUnknown = 0x02, + MemoryErrorCorrectionNone = 0x03, + MemoryErrorCorrectionParity = 0x04, + MemoryErrorCorrectionSingleBitEcc = 0x05, + MemoryErrorCorrectionMultiBitEcc = 0x06, + MemoryErrorCorrectionCrc = 0x07 +} MEMORY_ERROR_CORRECTION; + /// /// Physical Memory Array (Type 16) /// +/// This structure describes a collection of memory devices that operate +/// together to form a memory address space. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT8 Location; - UINT8 Use; - UINT8 MemoryErrorCorrection; - UINT32 MaximumCapacity; - UINT16 MemoryErrorInformationHandle; - UINT16 NumberOfMemoryDevices; + SMBIOS_STRUCTURE Hdr; + MEMORY_ARRAY_LOCATION Location; + MEMORY_ARRAY_USE Use; + MEMORY_ERROR_CORRECTION MemoryErrorCorrection; + UINT32 MaximumCapacity; + UINT16 MemoryErrorInformationHandle; + UINT16 NumberOfMemoryDevices; } SMBIOS_TABLE_TYPE16; +/// +/// Memory Device - Form Factor +/// +typedef enum { + MemoryFormFactorOther = 0x01, + MemoryFormFactorUnknown = 0x02, + MemoryFormFactorSimm = 0x03, + MemoryFormFactorSip = 0x04, + MemoryFormFactorChip = 0x05, + MemoryFormFactorDip = 0x06, + MemoryFormFactorZip = 0x07, + MemoryFormFactorProprietaryCard = 0x08, + MemoryFormFactorDimm = 0x09, + MemoryFormFactorTsop = 0x0A, + MemoryFormFactorRowOfChips = 0x0B, + MemoryFormFactorRimm = 0x0C, + MemoryFormFactorSodimm = 0x0D, + MemoryFormFactorSrimm = 0x0E, + MemoryFormFactorFbDimm = 0x0F +} MEMORY_FORM_FACTOR; + +/// +/// Memory Device - Type +/// +typedef enum { + MemoryTypeOther = 0x01, + MemoryTypeUnknown = 0x02, + MemoryTypeDram = 0x03, + MemoryTypeEdram = 0x04, + MemoryTypeVram = 0x05, + MemoryTypeSram = 0x06, + MemoryTypeRam = 0x07, + MemoryTypeRom = 0x08, + MemoryTypeFlash = 0x09, + MemoryTypeEeprom = 0x0A, + MemoryTypeFeprom = 0x0B, + MemoryTypeEprom = 0x0C, + MemoryTypeCdram = 0x0D, + MemoryType3Dram = 0x0E, + MemoryTypeSdram = 0x0F, + MemoryTypeSgram = 0x10, + MemoryTypeRdram = 0x11, + MemoryTypeDdr = 0x12, + MemoryTypeDdr2 = 0x13, + MemoryTypeDdr2FbDimm = 0x14 +} MEMORY_DEVICE_TYPE; + +typedef struct { + UINT16 Reserved :1; + UINT16 Other :1; + UINT16 Unknown :1; + UINT16 FastPaged :1; + UINT16 StaticColumn :1; + UINT16 PseudoStatic :1; + UINT16 Rambus :1; + UINT16 Synchronous :1; + UINT16 Cmos :1; + UINT16 Edo :1; + UINT16 WindowDram :1; + UINT16 CacheDram :1; + UINT16 Nonvolatile :1; + UINT16 Reserved1 :3; +} MEMORY_DEVICE_TYPE_DETAIL; + /// /// 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 +/// socket is currently populated. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT16 MemoryArrayHandle; - UINT16 MemoryErrorInformationHandle; - UINT16 TotalWidth; - UINT16 DataWidth; - UINT16 Size; - UINT8 FormFactor; - UINT8 DeviceSet; - SMBIOS_TABLE_STRING DeviceLocator; - SMBIOS_TABLE_STRING BankLocator; - UINT8 MemoryType; - UINT16 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; + MEMORY_FORM_FACTOR FormFactor; + UINT8 DeviceSet; + SMBIOS_TABLE_STRING DeviceLocator; + SMBIOS_TABLE_STRING BankLocator; + MEMORY_DEVICE_TYPE MemoryType; + 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; } SMBIOS_TABLE_TYPE17; +/// +/// 32-bit Memory Error Information - Error Type +/// +typedef enum { + MemoryErrorOther = 0x01, + MemoryErrorUnknown = 0x02, + MemoryErrorOk = 0x03, + MemoryErrorBadRead = 0x04, + MemoryErrorParity = 0x05, + MemoryErrorSigleBit = 0x06, + MemoryErrorDoubleBit = 0x07, + MemoryErrorMultiBit = 0x08, + MemoryErrorNibble = 0x09, + MemoryErrorChecksum = 0x0A, + MemoryErrorCrc = 0x0B, + MemoryErrorCorrectSingleBit = 0x0C, + MemoryErrorCorrected = 0x0D, + MemoryErrorUnCorrectable = 0x0E +} MEMORY_ERROR_TYPE; + +/// +/// 32-bit Memory Error Information - Error Granularity +/// +typedef enum { + MemoryGranularityOther = 0x01, + MemoryGranularityOtherUnknown = 0x02, + MemoryGranularityDeviceLevel = 0x03, + MemoryGranularityMemPartitionLevel = 0x04 +} MEMORY_ERROR_GRANULARITY; + +/// +/// 32-bit Memory Error Information - Error Operation +/// +typedef enum { + MemoryErrorOperationOther = 0x01, + MemoryErrorOperationUnknown = 0x02, + MemoryErrorOperationRead = 0x03, + MemoryErrorOperationWrite = 0x04, + MemoryErrorOperationPartialWrite = 0x05 +} MEMORY_ERROR_OPERATION; + /// /// 32-bit Memory Error Information (Type 18) +/// +/// This structure identifies the specifics of an error that might be detected +/// within a Physical Memory Array. /// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT8 ErrorType; - UINT8 ErrorGranularity; - UINT8 ErrorOperation; - UINT32 VendorSyndrome; - UINT32 MemoryArrayErrorAddress; - UINT32 DeviceErrorAddress; - UINT32 ErrorResolution; + SMBIOS_STRUCTURE Hdr; + MEMORY_ERROR_TYPE ErrorType; + MEMORY_ERROR_GRANULARITY ErrorGranularity; + MEMORY_ERROR_OPERATION ErrorOperation; + UINT32 VendorSyndrome; + UINT32 MemoryArrayErrorAddress; + UINT32 DeviceErrorAddress; + UINT32 ErrorResolution; } SMBIOS_TABLE_TYPE18; /// /// Memory Array Mapped Address (Type 19) /// +/// This structure provides the address mapping for a Physical Memory Array. +/// One structure is present for each contiguous address range described. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT32 StartingAddress; @@ -402,6 +1440,9 @@ typedef struct { /// /// 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. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT32 StartingAddress; @@ -413,41 +1454,101 @@ typedef struct { UINT8 InterleavedDataDepth; } SMBIOS_TABLE_TYPE20; +/// +/// Built-in Pointing Device - Type +/// +typedef enum { + PointingDeviceTypeOther = 0x01, + PointingDeviceTypeUnknown = 0x02, + PointingDeviceTypeMouse = 0x03, + PointingDeviceTypeTrackBall = 0x04, + PointingDeviceTypeTrackPoint = 0x05, + PointingDeviceTypeGlidePoint = 0x06, + PointingDeviceTouchPad = 0x07, + PointingDeviceTouchScreen = 0x08, + PointingDeviceOpticalSensor = 0x09 +} BUILTIN_POINTING_DEVICE_TYPE; + +/// +/// Built-in Pointing Device - Interface +/// +typedef enum { + PointingDeviceInterfaceOther = 0x01, + PointingDeviceInterfaceUnknown = 0x02, + PointingDeviceInterfaceSerial = 0x03, + PointingDeviceInterfacePs2 = 0x04, + PointingDeviceInterfaceInfrared = 0x05, + PointingDeviceInterfaceHpHil = 0x06, + PointingDeviceInterfaceBusMouse = 0x07, + PointingDeviceInterfaceADB = 0x08, + PointingDeviceInterfaceBusMouseDB9 = 0xA0, + PointingDeviceInterfaceBusMouseMicroDin = 0xA1, + PointingDeviceInterfaceUsb = 0xA2 +} BUILTIN_POINTING_DEVICE_INTERFACE; + /// /// 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! +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT8 Type; - UINT8 Interface; - UINT8 NumberOfButtons; + SMBIOS_STRUCTURE Hdr; + BUILTIN_POINTING_DEVICE_TYPE Type; + BUILTIN_POINTING_DEVICE_INTERFACE Interface; + UINT8 NumberOfButtons; } SMBIOS_TABLE_TYPE21; +/// +/// Portable Battery - Device Chemistry +/// +typedef enum { + PortableBatteryDeviceChemistryOther = 0x01, + PortableBatteryDeviceChemistryUnknown = 0x02, + PortableBatteryDeviceChemistryLeadAcid = 0x03, + PortableBatteryDeviceChemistryNickelCadmium = 0x04, + PortableBatteryDeviceChemistryNickelMetalHydride = 0x05, + PortableBatteryDeviceChemistryLithiumIon = 0x06, + PortableBatteryDeviceChemistryZincAir = 0x07, + PortableBatteryDeviceChemistryLithiumPolymer = 0x08 +} PORTABLE_BATTERY_DEVICE_CHEMISTRY; + /// /// Portable Battery (Type 22) /// +/// This structure describes the attributes of the portable battery(s) for the system. +/// The structure contains the static attributes for the group. Each structure describes +/// a single battery pack¡¯s attributes. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Location; - SMBIOS_TABLE_STRING Manufacturer; - SMBIOS_TABLE_STRING ManufactureDate; - SMBIOS_TABLE_STRING SerialNumber; - SMBIOS_TABLE_STRING DeviceName; - UINT8 DeviceChemistry; - UINT16 DeviceCapacity; - UINT16 DesignVoltage; - SMBIOS_TABLE_STRING SBDSVersionNumber; - UINT8 MaximumErrorInBatteryData; - UINT16 SBDSSerialNumber; - UINT16 SBDSManufactureDate; - SMBIOS_TABLE_STRING SBDSDeviceChemistry; - UINT8 DesignCapacityMultiplier; - UINT32 OEMSpecific; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Location; + SMBIOS_TABLE_STRING Manufacturer; + SMBIOS_TABLE_STRING ManufactureDate; + SMBIOS_TABLE_STRING SerialNumber; + SMBIOS_TABLE_STRING DeviceName; + PORTABLE_BATTERY_DEVICE_CHEMISTRY DeviceChemistry; + UINT16 DeviceCapacity; + UINT16 DesignVoltage; + SMBIOS_TABLE_STRING SBDSVersionNumber; + UINT8 MaximumErrorInBatteryData; + UINT16 SBDSSerialNumber; + UINT16 SBDSManufactureDate; + SMBIOS_TABLE_STRING SBDSDeviceChemistry; + UINT8 DesignCapacityMultiplier; + UINT32 OEMSpecific; } SMBIOS_TABLE_TYPE22; /// /// System Reset (Type 23) /// +/// This structure describes whether Automatic System Reset functions enabled (Status). +/// 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. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 Capabilities; @@ -460,6 +1561,8 @@ typedef struct { /// /// Hardware Security (Type 24) /// +/// This structure describes the system-wide hardware security settings. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 HardwareSecuritySettings; @@ -468,6 +1571,11 @@ typedef struct { /// /// 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. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 NextScheduledPowerOnMonth; @@ -478,68 +1586,116 @@ typedef struct { } SMBIOS_TABLE_TYPE25; /// -/// Voltage Probe (Type 26) +/// Voltage Probe - Location and Status /// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Description; - UINT8 LocationAndStatus; - UINT16 MaximumValue; - UINT16 MinimumValue; - UINT16 Resolution; - UINT16 Tolerance; - UINT16 Accuracy; - UINT32 OEMDefined; - UINT16 NominalValue; + UINT8 VoltageProbeSite :5; + UINT8 VoltageProbeStatus :3; +} MISC_VOLTAGE_PROBE_LOCATION; + +/// +/// Voltage Probe (Type 26) +/// +/// This describes the attributes for a voltage probe in the system. +/// Each structure describes a single voltage probe. +/// +typedef struct { + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Description; + MISC_VOLTAGE_PROBE_LOCATION LocationAndStatus; + UINT16 MaximumValue; + UINT16 MinimumValue; + UINT16 Resolution; + UINT16 Tolerance; + UINT16 Accuracy; + UINT32 OEMDefined; + UINT16 NominalValue; } SMBIOS_TABLE_TYPE26; +/// +/// Cooling Device - Device Type and Status +/// +typedef struct { + UINT8 CoolingDevice :5; + UINT8 CoolingDeviceStatus :3; +} MISC_COOLING_DEVICE_TYPE; + /// /// Cooling Device (Type 27) /// +/// This structure describes the attributes for a cooling device in the system. +/// Each structure describes a single cooling device. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT16 TemperatureProbeHandle; - UINT8 DeviceTypeAndStatus; - UINT8 CoolingUnitGroup; - UINT32 OEMDefined; - UINT16 NominalSpeed; + SMBIOS_STRUCTURE Hdr; + UINT16 TemperatureProbeHandle; + MISC_COOLING_DEVICE_TYPE DeviceTypeAndStatus; + UINT8 CoolingUnitGroup; + UINT32 OEMDefined; + UINT16 NominalSpeed; } SMBIOS_TABLE_TYPE27; +/// +/// Temperature Probe - Location and Status +/// +typedef struct { + UINT8 TemperatureProbeSite :5; + UINT8 TemperatureProbeStatus :3; +} MISC_TEMPERATURE_PROBE_LOCATION; + /// /// Temperature Probe (Type 28) /// +/// This structure describes the attributes for a temperature probe in the system. +/// Each structure describes a single temperature probe. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Description; - UINT8 LocationAndStatus; - UINT16 MaximumValue; - UINT16 MinimumValue; - UINT16 Resolution; - UINT16 Tolerance; - UINT16 Accuracy; - UINT32 OEMDefined; - UINT16 NominalValue; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Description; + MISC_TEMPERATURE_PROBE_LOCATION LocationAndStatus; + UINT16 MaximumValue; + UINT16 MinimumValue; + UINT16 Resolution; + UINT16 Tolerance; + UINT16 Accuracy; + UINT32 OEMDefined; + UINT16 NominalValue; } SMBIOS_TABLE_TYPE28; +/// +/// Electrical Current Probe - Location and Status +/// +typedef struct { + UINT8 ElectricalCurrentProbeSite :5; + UINT8 ElectricalCurrentProbeStatus :3; +} MISC_ELECTRICAL_CURRENT_PROBE_LOCATION; + /// /// Electrical Current Probe (Type 29) /// +/// This structure describes the attributes for an electrical current probe in the system. +/// Each structure describes a single electrical current probe. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Description; - UINT8 LocationAndStatus; - UINT16 MaximumValue; - UINT16 MinimumValue; - UINT16 Resolution; - UINT16 Tolerance; - UINT16 Accuracy; - UINT32 OEMDefined; - UINT16 NominalValue; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Description; + MISC_ELECTRICAL_CURRENT_PROBE_LOCATION LocationAndStatus; + UINT16 MaximumValue; + UINT16 MinimumValue; + UINT16 Resolution; + UINT16 Tolerance; + UINT16 Accuracy; + UINT32 OEMDefined; + UINT16 NominalValue; } SMBIOS_TABLE_TYPE29; /// /// Out-of-Band Remote Access (Type 30) /// +/// This structure describes the attributes and policy settings of a hardware facility +/// that may be used to gain remote access to a hardware system when the operating system +/// is not available due to power-down status, hardware failures, or boot failures. +/// typedef struct { SMBIOS_STRUCTURE Hdr; SMBIOS_TABLE_STRING ManufacturerName; @@ -549,6 +1705,8 @@ typedef struct { /// /// Boot Integrity Services (BIS) Entry Point (Type 31) /// +/// Structure type 31 (decimal) is reserved for use by the Boot Integrity Services (BIS). +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 Checksum; @@ -560,43 +1718,109 @@ typedef struct { UINT32 Reserved4; } SMBIOS_TABLE_TYPE31; +/// +/// System Boot Information - System Boot Status +/// +typedef enum { + BootInformationStatusNoError = 0x00, + BootInformationStatusNoBootableMedia = 0x01, + BootInformationStatusNormalOSFailedLoading = 0x02, + BootInformationStatusFirmwareDetectedFailure = 0x03, + BootInformationStatusOSDetectedFailure = 0x04, + BootInformationStatusUserRequestedBoot = 0x05, + BootInformationStatusSystemSecurityViolation = 0x06, + BootInformationStatusPreviousRequestedImage = 0x07, + BootInformationStatusWatchdogTimerExpired = 0x08, + BootInformationStatusStartReserved = 0x09, + BootInformationStatusStartOemSpecific = 0x80, + BootInformationStatusStartProductSpecific = 0xC0 +} MISC_BOOT_INFORMATION_STATUS_DATA_TYPE; + /// /// System Boot Information (Type 32) /// +/// The client system firmware, e.g. BIOS, communicates the System Boot Status to the +/// client's Pre-boot Execution Environment (PXE) boot image or OS-present management +/// application via this structure. When used in the PXE environment, for example, +/// this code identifies the reason the PXE was initiated and can be used by boot-image +/// software to further automate an enterprise¡¯s PXE sessions. For example, an enterprise +/// could choose to automatically download a hardware-diagnostic image to a client whose +/// reason code indicated either a firmware- or operating system-detected hardware failure. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT8 Reserved[6]; - UINT8 BootStatus[1]; + SMBIOS_STRUCTURE Hdr; + UINT8 Reserved[6]; + MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootStatus; } SMBIOS_TABLE_TYPE32; /// /// 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; - UINT8 ErrorType; - UINT8 ErrorGranularity; - UINT8 ErrorOperation; - UINT32 VendorSyndrome; - UINT64 MemoryArrayErrorAddress; - UINT64 DeviceErrorAddress; - UINT32 ErrorResolution; + 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 + UINT32 VendorSyndrome; + UINT64 MemoryArrayErrorAddress; + UINT64 DeviceErrorAddress; + UINT32 ErrorResolution; } SMBIOS_TABLE_TYPE33; +/// +/// Management Device - Type +/// +typedef enum { + ManagementDeviceTypeOther = 0x01, + ManagementDeviceTypeUnknown = 0x02, + ManagementDeviceTypeLm75 = 0x03, + ManagementDeviceTypeLm78 = 0x04, + ManagementDeviceTypeLm79 = 0x05, + ManagementDeviceTypeLm80 = 0x06, + ManagementDeviceTypeLm81 = 0x07, + ManagementDeviceTypeAdm9240 = 0x08, + ManagementDeviceTypeDs1780 = 0x09, + ManagementDeviceTypeMaxim1617 = 0x0A, + ManagementDeviceTypeGl518Sm = 0x0B, + ManagementDeviceTypeW83781D = 0x0C, + ManagementDeviceTypeHt82H791 = 0x0D +} MISC_MANAGEMENT_DEVICE_TYPE; + +/// +/// Management Device - Address Type +/// +typedef enum { + ManagementDeviceAddressTypeOther = 0x01, + ManagementDeviceAddressTypeUnknown = 0x02, + ManagementDeviceAddressTypeIOPort = 0x03, + ManagementDeviceAddressTypeMemory = 0x04, + ManagementDeviceAddressTypeSmbus = 0x05 +} MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE; + /// /// 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 +/// probes as defined by one or more Management Device Component structures. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING Description; - UINT8 Type; - UINT32 Address; - UINT8 AddressType; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING Description; + MISC_MANAGEMENT_DEVICE_TYPE Type; + UINT32 Address; + MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE AddressType; } 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. +/// typedef struct { SMBIOS_STRUCTURE Hdr; SMBIOS_TABLE_STRING Description; @@ -608,6 +1832,9 @@ typedef struct { /// /// 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. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT16 LowerThresholdNonCritical; @@ -626,9 +1853,23 @@ typedef struct { UINT16 DeviceHandle; } MEMORY_DEVICE; +/// +/// Memory Channel - Channel Type +/// +typedef enum { + MemoryChannelTypeOther = 0x01, + MemoryChannelTypeUnknown = 0x02, + MemoryChannelTypeRambus = 0x03, + MemoryChannelTypeSyncLink = 0x04 +} MEMORY_CHANNEL_TYPE; + /// /// Memory Channel (Type 37) /// +/// The information in this structure provides the correlation between a Memory Channel +/// and its associated Memory Devices. Each device presents one or more loads to the channel; +/// the sum of all device loads cannot exceed the channel's defined maximum. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 ChannelType; @@ -637,12 +1878,26 @@ typedef struct { MEMORY_DEVICE MemoryDevice[1]; } SMBIOS_TABLE_TYPE37; +/// +/// IPMI Device Information - BMC Interface Type +/// +typedef enum { + IPMIDeviceInfoInterfaceTypeUnknown = 0x00, + IPMIDeviceInfoInterfaceTypeKCS = 0x01, // Keyboard Controller Style + IPMIDeviceInfoInterfaceTypeSMIC = 0x02, // Server Management Interface Chip + IPMIDeviceInfoInterfaceTypeBT = 0x03, // Block Transfer + IPMIDeviceInfoInterfaceTypeReserved = 0x04 +} BMC_INTERFACE_TYPE; + /// /// IPMI Device Information (Type 38) /// +/// The information in this structure defines the attributes of an +/// Intelligent Platform Management Interface (IPMI) Baseboard Management Controller (BMC). +/// typedef struct { SMBIOS_STRUCTURE Hdr; - UINT8 InterfaceType; + BMC_INTERFACE_TYPE InterfaceType; UINT8 IPMISpecificationRevision; UINT8 I2CSlaveAddress; UINT8 NVStorageDeviceAddress; @@ -652,23 +1907,39 @@ typedef struct { } SMBIOS_TABLE_TYPE38; /// -/// System Power Supply (Type 39) +/// System Power Supply - Power Supply Characteristics /// typedef struct { - SMBIOS_STRUCTURE Hdr; - UINT8 PowerUnitGroup; - SMBIOS_TABLE_STRING Location; - SMBIOS_TABLE_STRING DeviceName; - SMBIOS_TABLE_STRING Manufacturer; - SMBIOS_TABLE_STRING SerialNumber; - SMBIOS_TABLE_STRING AssetTagNumber; - SMBIOS_TABLE_STRING ModelPartNumber; - SMBIOS_TABLE_STRING RevisionLevel; - UINT16 MaxPowerCapacity; - UINT16 PowerSupplyCharacteristics; - UINT16 InputVoltageProbeHandle; - UINT16 CoolingDeviceHandle; - UINT16 InputCurrentProbeHandle; + UINT16 PowerSupplyHotReplaceable:1; + UINT16 PowerSupplyPresent :1; + UINT16 PowerSupplyUnplugged :1; + UINT16 InputVoltageRangeSwitch :4; + UINT16 PowerSupplyStatus :3; + UINT16 PowerSupplyType :4; + UINT16 Reserved :2; +} SYS_POWER_SUPPLY_CHARACTERISTICS; + +/// +/// 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. +/// +typedef struct { + SMBIOS_STRUCTURE Hdr; + UINT8 PowerUnitGroup; + SMBIOS_TABLE_STRING Location; + SMBIOS_TABLE_STRING DeviceName; + SMBIOS_TABLE_STRING Manufacturer; + SMBIOS_TABLE_STRING SerialNumber; + SMBIOS_TABLE_STRING AssetTagNumber; + SMBIOS_TABLE_STRING ModelPartNumber; + SMBIOS_TABLE_STRING RevisionLevel; + UINT16 MaxPowerCapacity; + SYS_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics; + UINT16 InputVoltageProbeHandle; + UINT16 CoolingDeviceHandle; + UINT16 InputCurrentProbeHandle; } SMBIOS_TABLE_TYPE39; /// @@ -685,23 +1956,47 @@ typedef struct { /// /// Additional Information (Type 40) /// +/// This structure is intended to provide additional information for handling unspecified +/// enumerated values and interim field updates in another structure. +/// typedef struct { SMBIOS_STRUCTURE Hdr; UINT8 NumberOfAdditionalInformationEntries; ADDITIONAL_INFORMATION_ENTRY AdditionalInfoEntries[1]; } SMBIOS_TABLE_TYPE40; +/// +/// Onboard Devices Extended Information - Onboard Device Types +/// +typedef enum{ + OnBoardDeviceExtendedTypeOther = 0x01, + OnBoardDeviceExtendedTypeUnknown = 0x02, + OnBoardDeviceExtendedTypeVideo = 0x03, + OnBoardDeviceExtendedTypeScsiController = 0x04, + OnBoardDeviceExtendedTypeEthernet = 0x05, + OnBoardDeviceExtendedTypeTokenRing = 0x06, + OnBoardDeviceExtendedTypeSound = 0x07, + OnBoardDeviceExtendedTypePATAController = 0x08, + OnBoardDeviceExtendedTypeSATAController = 0x09, + OnBoardDeviceExtendedTypeSASController = 0x0A +} ONBOARD_DEVICE_EXTENDED_INFO_TYPE; + /// /// 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. +/// typedef struct { - SMBIOS_STRUCTURE Hdr; - SMBIOS_TABLE_STRING ReferenceDesignation; - UINT8 DeviceType; - UINT8 DeviceTypeInstance; - UINT16 SegmentGroupNum; - UINT8 BusNum; - UINT8 DevFuncNum; + SMBIOS_STRUCTURE Hdr; + SMBIOS_TABLE_STRING ReferenceDesignation; + ONBOARD_DEVICE_EXTENDED_INFO_TYPE DeviceType; + UINT8 DeviceTypeInstance; + UINT16 SegmentGroupNum; + UINT8 BusNum; + UINT8 DevFuncNum; } SMBIOS_TABLE_TYPE41; ///