+///\r
+/// Processor Information - Processor Type\r
+///\r
+typedef enum {\r
+ ProcessorOther = 0x01,\r
+ ProcessorUnknown = 0x02,\r
+ CentralProcessor = 0x03,\r
+ MathProcessor = 0x04,\r
+ DspProcessor = 0x05,\r
+ VideoProcessor = 0x06\r
+} PROCESSOR_TYPE_DATA;\r
+\r
+///\r
+/// Processor Information - Processor Family\r
+///\r
+typedef enum {\r
+ ProcessorFamilyOther = 0x01, \r
+ ProcessorFamilyUnknown = 0x02,\r
+ ProcessorFamily8086 = 0x03, \r
+ ProcessorFamily80286 = 0x04,\r
+ ProcessorFamilyIntel386 = 0x05, \r
+ ProcessorFamilyIntel486 = 0x06,\r
+ ProcessorFamily8087 = 0x07,\r
+ ProcessorFamily80287 = 0x08,\r
+ ProcessorFamily80387 = 0x09, \r
+ ProcessorFamily80487 = 0x0A,\r
+ ProcessorFamilyPentium = 0x0B, \r
+ ProcessorFamilyPentiumPro = 0x0C,\r
+ ProcessorFamilyPentiumII = 0x0D,\r
+ ProcessorFamilyPentiumMMX = 0x0E,\r
+ ProcessorFamilyCeleron = 0x0F,\r
+ ProcessorFamilyPentiumIIXeon = 0x10,\r
+ ProcessorFamilyPentiumIII = 0x11, \r
+ ProcessorFamilyM1 = 0x12,\r
+ ProcessorFamilyM2 = 0x13,\r
+ ProcessorFamilyM1Reserved2 = 0x14,\r
+ ProcessorFamilyM1Reserved3 = 0x15,\r
+ ProcessorFamilyM1Reserved4 = 0x16,\r
+ ProcessorFamilyM1Reserved5 = 0x17,\r
+ ProcessorFamilyAmdDuron = 0x18,\r
+ ProcessorFamilyK5 = 0x19, \r
+ ProcessorFamilyK6 = 0x1A,\r
+ ProcessorFamilyK6_2 = 0x1B,\r
+ ProcessorFamilyK6_3 = 0x1C,\r
+ ProcessorFamilyAmdAthlon = 0x1D,\r
+ ProcessorFamilyAmd29000 = 0x1E,\r
+ ProcessorFamilyK6_2Plus = 0x1F,\r
+ ProcessorFamilyPowerPC = 0x20,\r
+ ProcessorFamilyPowerPC601 = 0x21,\r
+ ProcessorFamilyPowerPC603 = 0x22,\r
+ ProcessorFamilyPowerPC603Plus = 0x23,\r
+ ProcessorFamilyPowerPC604 = 0x24,\r
+ ProcessorFamilyPowerPC620 = 0x25,\r
+ ProcessorFamilyPowerPCx704 = 0x26,\r
+ ProcessorFamilyPowerPC750 = 0x27,\r
+ ProcessorFamilyAlpha3 = 0x30,\r
+ ProcessorFamilyAlpha21064 = 0x31,\r
+ ProcessorFamilyAlpha21066 = 0x32,\r
+ ProcessorFamilyAlpha21164 = 0x33,\r
+ ProcessorFamilyAlpha21164PC = 0x34,\r
+ ProcessorFamilyAlpha21164a = 0x35,\r
+ ProcessorFamilyAlpha21264 = 0x36,\r
+ ProcessorFamilyAlpha21364 = 0x37,\r
+ ProcessorFamilyMips = 0x40,\r
+ ProcessorFamilyMIPSR4000 = 0x41,\r
+ ProcessorFamilyMIPSR4200 = 0x42,\r
+ ProcessorFamilyMIPSR4400 = 0x43,\r
+ ProcessorFamilyMIPSR4600 = 0x44,\r
+ ProcessorFamilyMIPSR10000 = 0x45,\r
+ ProcessorFamilySparc = 0x50,\r
+ ProcessorFamilySuperSparc = 0x51,\r
+ ProcessorFamilymicroSparcII = 0x52,\r
+ ProcessorFamilymicroSparcIIep = 0x53,\r
+ ProcessorFamilyUltraSparc = 0x54,\r
+ ProcessorFamilyUltraSparcII = 0x55,\r
+ ProcessorFamilyUltraSparcIIi = 0x56,\r
+ ProcessorFamilyUltraSparcIII = 0x57,\r
+ ProcessorFamilyUltraSparcIIIi = 0x58,\r
+ ProcessorFamily68040 = 0x60,\r
+ ProcessorFamily68xxx = 0x61,\r
+ ProcessorFamily68000 = 0x62,\r
+ ProcessorFamily68010 = 0x63,\r
+ ProcessorFamily68020 = 0x64,\r
+ ProcessorFamily68030 = 0x65,\r
+ ProcessorFamilyHobbit = 0x70,\r
+ ProcessorFamilyCrusoeTM5000 = 0x78,\r
+ ProcessorFamilyCrusoeTM3000 = 0x79,\r
+ ProcessorFamilyEfficeonTM8000 = 0x7A,\r
+ ProcessorFamilyWeitek = 0x80,\r
+ ProcessorFamilyItanium = 0x82,\r
+ ProcessorFamilyAmdAthlon64 = 0x83,\r
+ ProcessorFamilyAmdOpteron = 0x84,\r
+ ProcessorFamilyAmdSempron = 0x85,\r
+ ProcessorFamilyAmdTurion64Mobile = 0x86,\r
+ ProcessorFamilyDualCoreAmdOpteron = 0x87,\r
+ ProcessorFamilyAmdAthlon64X2DualCore = 0x88,\r
+ ProcessorFamilyAmdTurion64X2Mobile = 0x89,\r
+ ProcessorFamilyPARISC = 0x90,\r
+ ProcessorFamilyPaRisc8500 = 0x91,\r
+ ProcessorFamilyPaRisc8000 = 0x92,\r
+ ProcessorFamilyPaRisc7300LC = 0x93,\r
+ ProcessorFamilyPaRisc7200 = 0x94,\r
+ ProcessorFamilyPaRisc7100LC = 0x95,\r
+ ProcessorFamilyPaRisc7100 = 0x96,\r
+ ProcessorFamilyV30 = 0xA0,\r
+ ProcessorFamilyPentiumIIIXeon = 0xB0,\r
+ ProcessorFamilyPentiumIIISpeedStep = 0xB1,\r
+ ProcessorFamilyPentium4 = 0xB2,\r
+ ProcessorFamilyIntelXeon = 0xB3,\r
+ ProcessorFamilyAS400 = 0xB4,\r
+ ProcessorFamilyIntelXeonMP = 0xB5,\r
+ ProcessorFamilyAMDAthlonXP = 0xB6,\r
+ ProcessorFamilyAMDAthlonMP = 0xB7,\r
+ ProcessorFamilyIntelItanium2 = 0xB8,\r
+ ProcessorFamilyIntelPentiumM = 0xB9,\r
+ ProcessorFamilyIntelCeleronD = 0xBA,\r
+ ProcessorFamilyIntelPentiumD = 0xBB,\r
+ ProcessorFamilyIntelPentiumEx = 0xBC,\r
+ ProcessorFamilyIntelCoreSolo = 0xBD, ///< SMBIOS spec 2.6 correct this value\r
+ ProcessorFamilyReserved = 0xBE,\r
+ ProcessorFamilyIntelCore2 = 0xBF,\r
+ ProcessorFamilyIBM390 = 0xC8,\r
+ ProcessorFamilyG4 = 0xC9,\r
+ ProcessorFamilyG5 = 0xCA,\r
+ ProcessorFamilyG6 = 0xCB,\r
+ ProcessorFamilyzArchitectur = 0xCC,\r
+ ProcessorFamilyViaC7M = 0xD2,\r
+ ProcessorFamilyViaC7D = 0xD3,\r
+ ProcessorFamilyViaC7 = 0xD4,\r
+ ProcessorFamilyViaEden = 0xD5,\r
+ ProcessorFamilyi860 = 0xFA,\r
+ ProcessorFamilyi960 = 0xFB,\r
+ ProcessorFamilyIndicatorFamily2 = 0xFE,\r
+ ProcessorFamilyReserved1 = 0xFF\r
+} PROCESSOR_FAMILY_DATA;\r
+\r
+///\r
+/// Processor Information - Voltage \r
+///\r
+typedef struct {\r
+ UINT8 ProcessorVoltageCapability5V :1; \r
+ UINT8 ProcessorVoltageCapability3_3V :1; \r
+ UINT8 ProcessorVoltageCapability2_9V :1; \r
+ UINT8 ProcessorVoltageCapabilityReserved :1; ///< Bit 3, must be zero.\r
+ UINT8 ProcessorVoltageReserved :3; ///< Bits 4-6, must be zero.\r
+ UINT8 ProcessorVoltageIndicateLegacy :1;\r
+} PROCESSOR_VOLTAGE;\r
+\r
+///\r
+/// Processor Information - Processor Upgrade \r
+///\r
+typedef enum {\r
+ ProcessorUpgradeOther = 0x01,\r
+ ProcessorUpgradeUnknown = 0x02,\r
+ ProcessorUpgradeDaughterBoard = 0x03,\r
+ ProcessorUpgradeZIFSocket = 0x04,\r
+ ProcessorUpgradePiggyBack = 0x05, ///< Replaceable\r
+ ProcessorUpgradeNone = 0x06,\r
+ ProcessorUpgradeLIFSocket = 0x07,\r
+ ProcessorUpgradeSlot1 = 0x08,\r
+ ProcessorUpgradeSlot2 = 0x09,\r
+ ProcessorUpgrade370PinSocket = 0x0A,\r
+ ProcessorUpgradeSlotA = 0x0B,\r
+ ProcessorUpgradeSlotM = 0x0C,\r
+ ProcessorUpgradeSocket423 = 0x0D,\r
+ ProcessorUpgradeSocketA = 0x0E, ///< Socket 462\r
+ ProcessorUpgradeSocket478 = 0x0F,\r
+ ProcessorUpgradeSocket754 = 0x10,\r
+ ProcessorUpgradeSocket940 = 0x11,\r
+ ProcessorUpgradeSocket939 = 0x12,\r
+ ProcessorUpgradeSocketmPGA604 = 0x13,\r
+ ProcessorUpgradeSocketLGA771 = 0x14,\r
+ ProcessorUpgradeSocketLGA775 = 0x15,\r
+ ProcessorUpgradeSocketS1 = 0x16,\r
+ ProcessorUpgradeAM2 = 0x17,\r
+ ProcessorUpgradeF1207 = 0x18\r
+} PROCESSOR_UPGRADE;\r
+\r
+///\r
+/// Processor ID Field Description\r
+///\r
+typedef struct {\r
+ UINT32 ProcessorSteppingId:4;\r
+ UINT32 ProcessorModel: 4;\r
+ UINT32 ProcessorFamily: 4;\r
+ UINT32 ProcessorType: 2;\r
+ UINT32 ProcessorReserved1: 2;\r
+ UINT32 ProcessorXModel: 4;\r
+ UINT32 ProcessorXFamily: 8;\r
+ UINT32 ProcessorReserved2: 4;\r
+} PROCESSOR_SIGNATURE;\r
+\r
+typedef struct {\r
+ UINT32 ProcessorFpu :1;\r
+ UINT32 ProcessorVme :1;\r
+ UINT32 ProcessorDe :1;\r
+ UINT32 ProcessorPse :1;\r
+ UINT32 ProcessorTsc :1;\r
+ UINT32 ProcessorMsr :1;\r
+ UINT32 ProcessorPae :1;\r
+ UINT32 ProcessorMce :1;\r
+ UINT32 ProcessorCx8 :1;\r
+ UINT32 ProcessorApic :1;\r
+ UINT32 ProcessorReserved1 :1;\r
+ UINT32 ProcessorSep :1;\r
+ UINT32 ProcessorMtrr :1;\r
+ UINT32 ProcessorPge :1;\r
+ UINT32 ProcessorMca :1;\r
+ UINT32 ProcessorCmov :1;\r
+ UINT32 ProcessorPat :1;\r
+ UINT32 ProcessorPse36 :1;\r
+ UINT32 ProcessorPsn :1;\r
+ UINT32 ProcessorClfsh :1;\r
+ UINT32 ProcessorReserved2 :1;\r
+ UINT32 ProcessorDs :1;\r
+ UINT32 ProcessorAcpi :1;\r
+ UINT32 ProcessorMmx :1;\r
+ UINT32 ProcessorFxsr :1;\r
+ UINT32 ProcessorSse :1;\r
+ UINT32 ProcessorSse2 :1;\r
+ UINT32 ProcessorSs :1;\r
+ UINT32 ProcessorReserved3 :1;\r
+ UINT32 ProcessorTm :1;\r
+ UINT32 ProcessorReserved4 :2;\r
+} PROCESSOR_FEATURE_FLAGS;\r
+\r
+typedef struct {\r
+ PROCESSOR_SIGNATURE Signature;\r
+ PROCESSOR_FEATURE_FLAGS FeatureFlags;\r
+} PROCESSOR_ID_DATA;\r
+\r
+///\r
+/// Processor Information (Type 4)\r
+///\r
+/// The information in this structure defines the attributes of a single processor; \r
+/// a separate structure instance is provided for each system processor socket/slot. \r
+/// For example, a system with an IntelDX2 processor would have a single \r
+/// structure instance while a system with an IntelSX2 processor would have a structure\r
+/// to describe the main CPU and a second structure to describe the 80487 co-processor. \r
+///\r