1 /* $NoKeywords */
2 /**
3  * @file
4  *
5  * MemIscp.h
6  *
7  * Contains common Memory Training ISCP-related structures and defines.
8  *
9  * @xrefitem bom "File Content Label" "Release Content"
10  * @e project: FDK
11  * @e sub-project: UEFI
12  * @e version: $Revision: 317558 $ @e date: $Date: 2015-04-24 17:20:55 -0700 (Fri, 24 Apr 2015) $
13  *
14  */
15 /*****************************************************************************
16 *
17 *  Copyright 2013 - 2016 ADVANCED MICRO DEVICES, INC.  All Rights Reserved.
18 *
19 *  This program and the accompanying materials are licensed and made available
20 *  under the terms and conditions of the BSD License which accompanies this
21 *  distribution. The full text of the license may be found at
22 *  http://opensource.org/licenses/bsd-license.php
23 *
24 *  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
25 *  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
26 *  IMPLIED.
27 *
28 ***************************************************************************/
29 
30 //#########################################################################
31 //#########################################################################
32 //#########################################################################
33 //        NOTE: This file shared between SCP and UEFI, make sure all     //
34 //              changes are reflected in both copies.                    //
35 //#########################################################################
36 //#########################################################################
37 //#########################################################################
38 
39 #ifndef CPUISCP_H_
40 #define CPUISCP_H_
41 
42 #ifdef __cplusplus
43   extern "C" {
44   #endif
45 
46 /*----------------------------------------------------------------------------------------
47  *                             M O D U L E S    U S E D
48  *----------------------------------------------------------------------------------------
49  */
50   #include <ProcessorBind.h>  // Included just so this file can be built into both the RTOS
51                               // and UEFI without needing separate copies for both build
52                               // environments.
53 
54 
55 /*----------------------------------------------------------------------------------------
56  *                  T Y P E D E F S     A N D     S T R U C T U R E S
57  *----------------------------------------------------------------------------------------
58  */
59 
60   /// Processor ID
61   typedef struct {
62     UINT32                   ProcIDMsd;            ///< Processor ID Msd
63     UINT32                   ProcIDLsd;            ///< Processor ID Lsd
64   } ISCP_PROC_ID;
65 
66   /// Processor Type
67   typedef enum {
68     ISCP_CPU_TYPE_OTHER = 1,                       ///< Other
69     ISCP_CPU_TYPE_UNKNOWN,                         ///< Unknown
70     ISCP_CPU_TYPE_CENTRAL_PROCESSOR,               ///< Central Processor
71     ISCP_CPU_TYPE_MATH_COPROCESSOR,                ///< Math Coprocessor
72     ISCP_CPU_TYPE_DSP_PROCESSOR,                   ///< DSP Processor
73     ISCP_CPU_TYPE_VIDEO_PROCESSOR                  ///< Video Processor
74   } ISCP_PROCESSOR_TYPE;
75 
76   /// Processor Information - Processor Family.
77   typedef enum {
78     ISCP_ProcessorFamilyOther                  = 0x01,  ///< Processor Family - Other
79     ISCP_ProcessorFamilyUnknown                = 0x02,  ///< Processor Family - Unknown
80     ISCP_ProcessorFamily8086                   = 0x03,  ///< Processor Family - 8086
81     ISCP_ProcessorFamily80286                  = 0x04,  ///< Processor Family - 80286
82     ISCP_ProcessorFamilyIntel386               = 0x05,  ///< Processor Family - Intel 386
83     ISCP_ProcessorFamilyIntel486               = 0x06,  ///< Processor Family - Intel 486
84     ISCP_ProcessorFamily8087                   = 0x07,  ///< Processor Family - 8087
85     ISCP_ProcessorFamily80287                  = 0x08,  ///< Processor Family - 80287
86     ISCP_ProcessorFamily80387                  = 0x09,  ///< Processor Family - 80387
87     ISCP_ProcessorFamily80487                  = 0x0A,  ///< Processor Family - 80487
88     ISCP_ProcessorFamilyPentium                = 0x0B,  ///< Processor Family - Pentium
89     ISCP_ProcessorFamilyPentiumPro             = 0x0C,  ///< Processor Family - Pentium Pro
90     ISCP_ProcessorFamilyPentiumII              = 0x0D,  ///< Processor Family - Pentium II
91     ISCP_ProcessorFamilyPentiumMMX             = 0x0E,  ///< Processor Family - Pentium MMX
92     ISCP_ProcessorFamilyCeleron                = 0x0F,  ///< Processor Family - Celeron
93     ISCP_ProcessorFamilyPentiumIIXeon          = 0x10,  ///< Processor Family - Pentium II Xeon
94     ISCP_ProcessorFamilyPentiumIII             = 0x11,  ///< Processor Family - Pentium III
95     ISCP_ProcessorFamilyM1                     = 0x12,  ///< Processor Family - M1
96     ISCP_ProcessorFamilyM2                     = 0x13,  ///< Processor Family - M2
97     ISCP_ProcessorFamilyIntelCeleronM          = 0x14,  ///< Processor Family - Intel Celeron
98     ISCP_ProcessorFamilyIntelPentium4Ht        = 0x15,  ///< Processor Family - Intel Pentium 4Ht
99     ISCP_ProcessorFamilyAmdDuron               = 0x18,  ///< Processor Family - AMD Duron
100     ISCP_ProcessorFamilyK5                     = 0x19,  ///< Processor Family - K5
101     ISCP_ProcessorFamilyK6                     = 0x1A,  ///< Processor Family - K6
102     ISCP_ProcessorFamilyK6_2                   = 0x1B,  ///< Processor Family - K6-2
103     ISCP_ProcessorFamilyK6_3                   = 0x1C,  ///< Processor Family - K6-3
104     ISCP_ProcessorFamilyAmdAthlon              = 0x1D,  ///< Processor Family - AMD Athlon
105     ISCP_ProcessorFamilyAmd29000               = 0x1E,  ///< Processor Family - AMD 29000
106     ISCP_ProcessorFamilyK6_2Plus               = 0x1F,  ///< Processor Family - K6-2 Plus
107     ISCP_ProcessorFamilyPowerPC                = 0x20,  ///< Processor Family - Power PC
108     ISCP_ProcessorFamilyPowerPC601             = 0x21,  ///< Processor Family - Power PC 601
109     ISCP_ProcessorFamilyPowerPC603             = 0x22,  ///< Processor Family - Power PC 603
110     ISCP_ProcessorFamilyPowerPC603Plus         = 0x23,  ///< Processor Family - Power PC 603 Plus
111     ISCP_ProcessorFamilyPowerPC604             = 0x24,  ///< Processor Family - Power PC 604
112     ISCP_ProcessorFamilyPowerPC620             = 0x25,  ///< Processor Family - Power PC 620
113     ISCP_ProcessorFamilyPowerPCx704            = 0x26,  ///< Processor Family - Power PC x704
114     ISCP_ProcessorFamilyPowerPC750             = 0x27,  ///< Processor Family - Power PC 750
115     ISCP_ProcessorFamilyIntelCoreDuo           = 0x28,  ///< Processor Family - Intel Core Duo
116     ISCP_ProcessorFamilyIntelCoreDuoMobile     = 0x29,  ///< Processor Family - Intel core Duo Mobile
117     ISCP_ProcessorFamilyIntelCoreSoloMobile    = 0x2A,  ///< Processor Family - Intel Core Solo Mobile
118     ISCP_ProcessorFamilyIntelAtom              = 0x2B,  ///< Processor Family - Intel Atom
119     ISCP_ProcessorFamilyAlpha                  = 0x30,  ///< Processor Family - Alpha
120     ISCP_ProcessorFamilyAlpha21064             = 0x31,  ///< Processor Family - Alpha 21064
121     ISCP_ProcessorFamilyAlpha21066             = 0x32,  ///< Processor Family - Alpha 21166
122     ISCP_ProcessorFamilyAlpha21164             = 0x33,  ///< Processor Family - Alpha 21164
123     ISCP_ProcessorFamilyAlpha21164PC           = 0x34,  ///< Processor Family - Alpha 21164PC
124     ISCP_ProcessorFamilyAlpha21164a            = 0x35,  ///< Processor Family - Alpha 21164a
125     ISCP_ProcessorFamilyAlpha21264             = 0x36,  ///< Processor Family - Alpha 21264
126     ISCP_ProcessorFamilyAlpha21364             = 0x37,  ///< Processor Family - Alpha 21364
127     ISCP_ProcessorFamilyAmdTurionIIUltraDualCoreMobileM    = 0x38,  ///< Processor Family - AMD Turion II Ultra Dual Core Mobile M
128     ISCP_ProcessorFamilyAmdTurionIIDualCoreMobileM         = 0x39,  ///< Processor Family - AMD Turion II Dual Core Mobile M
129     ISCP_ProcessorFamilyAmdAthlonIIDualCoreM   = 0x3A,  ///< Processor Family - AMD Athlon II Dual Core M
130     ISCP_ProcessorFamilyAmdOpteron6100Series   = 0x3B,  ///< Processor Family - AMD Opteron 6100 Series
131     ISCP_ProcessorFamilyAmdOpteron4100Series   = 0x3C,  ///< Processor Family - AMD Opteron 4100 Series
132     ISCP_ProcessorFamilyAmdOpteron6200Series   = 0x3D,  ///< Processor Family - AMD Opteron 6200 Series
133     ISCP_ProcessorFamilyAmdOpteron4200Series   = 0x3E,  ///< Processor Family - AMD Opteron 4200 Series
134     ISCP_ProcessorFamilyAmdFxSeries            = 0x3F,  ///< Processor Family - AMD FX Series
135     ISCP_ProcessorFamilyMips                   = 0x40,  ///< Processor Family - MIPs
136     ISCP_ProcessorFamilyMIPSR4000              = 0x41,  ///< Processor Family - MIPs R4000
137     ISCP_ProcessorFamilyMIPSR4200              = 0x42,  ///< Processor Family - MIPs R4200
138     ISCP_ProcessorFamilyMIPSR4400              = 0x43,  ///< Processor Family - MIPs R4400
139     ISCP_ProcessorFamilyMIPSR4600              = 0x44,  ///< Processor Family - MIPs R4600
140     ISCP_ProcessorFamilyMIPSR10000             = 0x45,  ///< Processor Family - MIPs R10000
141     ISCP_ProcessorFamilyAmdCSeries             = 0x46,  ///< Processor Family - AMD C Series
142     ISCP_ProcessorFamilyAmdESeries             = 0x47,  ///< Processor Family - AMD E Series
143     ISCP_ProcessorFamilyAmdASeries             = 0x48,  ///< Processor Family - AMD A Series
144     ISCP_ProcessorFamilyAmdGSeries             = 0x49,  ///< Processor Family - AMD G Series
145     ISCP_ProcessorFamilyAmdZSeries             = 0x4A,  ///< Processor Family - AMD Z Series
146     ISCP_ProcessorFamilyAmdRSeries             = 0x4B,  ///< Processor Family - AMD R Series
147     ISCP_ProcessorFamilyAmdOpteron4300         = 0x4C,  ///< Processor Family - AMD Opteron 4300
148     ISCP_ProcessorFamilyAmdOpteron6300         = 0x4D,  ///< Processor Family - AMD Opteron 6300
149     ISCP_ProcessorFamilyAmdOpteron3300         = 0x4E,  ///< Processor Family - AMD Opteron 3300
150     ISCP_ProcessorFamilyAmdFireProSeries       = 0x4F,  ///< Processor Family - AMD Fire Pro Series
151     ISCP_ProcessorFamilySparc                  = 0x50,  ///< Processor Family - Sparc
152     ISCP_ProcessorFamilySuperSparc             = 0x51,  ///< Processor Family - Super Sparc
153     ISCP_ProcessorFamilymicroSparcII           = 0x52,  ///< Processor Family - Sparc II
154     ISCP_ProcessorFamilymicroSparcIIep         = 0x53,  ///< Processor Family - Sparc IIep
155     ISCP_ProcessorFamilyUltraSparc             = 0x54,  ///< Processor Family - Ultra Sparc
156     ISCP_ProcessorFamilyUltraSparcII           = 0x55,  ///< Processor Family - Ultra Sparc II
157     ISCP_ProcessorFamilyUltraSparcIii          = 0x56,  ///< Processor Family - Ultra Sparc Iii
158     ISCP_ProcessorFamilyUltraSparcIII          = 0x57,  ///< Processor Family - Ultra Sparc III
159     ISCP_ProcessorFamilyUltraSparcIIIi         = 0x58,  ///< Processor Family - Ultra Sparc IIIi
160     ISCP_ProcessorFamily68040                  = 0x60,  ///< Processor Family - 68040
161     ISCP_ProcessorFamily68xxx                  = 0x61,  ///< Processor Family - 68xxx
162     ISCP_ProcessorFamily68000                  = 0x62,  ///< Processor Family - 68000
163     ISCP_ProcessorFamily68010                  = 0x63,  ///< Processor Family - 68010
164     ISCP_ProcessorFamily68020                  = 0x64,  ///< Processor Family - 68020
165     ISCP_ProcessorFamily68030                  = 0x65,  ///< Processor Family - 68030
166     ISCP_ProcessorFamilyAmdOpteronASeries      = 0x69,  ///< Processor Family - AMD Opteron A Series
167     ISCP_ProcessorFamilyHobbit                 = 0x70,  ///< Processor Family - Hobbit
168     ISCP_ProcessorFamilyCrusoeTM5000           = 0x78,  ///< Processor Family - Crusoe TM5000
169     ISCP_ProcessorFamilyCrusoeTM3000           = 0x79,  ///< Processor Family - Crusoe TM3000
170     ISCP_ProcessorFamilyEfficeonTM8000         = 0x7A,  ///< Processor Family - Efficeon TM8000
171     ISCP_ProcessorFamilyWeitek                 = 0x80,  ///< Processor Family - Weitek
172     ISCP_ProcessorFamilyItanium                = 0x82,  ///< Processor Family - Itanium
173     ISCP_ProcessorFamilyAmdAthlon64            = 0x83,  ///< Processor Family - AMD Athlon64
174     ISCP_ProcessorFamilyAmdOpteron             = 0x84,  ///< Processor Family - AMD Opeteron
175     ISCP_ProcessorFamilyAmdSempron             = 0x85,  ///< Processor Family - AMD Sempron
176     ISCP_ProcessorFamilyAmdTurion64Mobile      = 0x86,  ///< Processor Family - AMD Turion 64 Modbile
177     ISCP_ProcessorFamilyDualCoreAmdOpteron     = 0x87,  ///< Processor Family - AMD Dual Core Opteron
178     ISCP_ProcessorFamilyAmdAthlon64X2DualCore  = 0x88,  ///< Processor Family - AMD Athlon 64 X2 Dual Core
179     ISCP_ProcessorFamilyAmdTurion64X2Mobile    = 0x89,  ///< Processor Family - AMD Turion 64 X2 Mobile
180     ISCP_ProcessorFamilyQuadCoreAmdOpteron     = 0x8A,  ///< Processor Family - AMD Quad Core Opteron
181     ISCP_ProcessorFamilyThirdGenerationAmdOpteron = 0x8B,  ///< Processor Family - AMD 3rd Generation Opteron
182     ISCP_ProcessorFamilyAmdPhenomFxQuadCore    = 0x8C,  ///< Processor Family - AMD Phenom FX Quad Core
183     ISCP_ProcessorFamilyAmdPhenomX4QuadCore    = 0x8D,  ///< Processor Family - AMD Phenom X4 Quad Core
184     ISCP_ProcessorFamilyAmdPhenomX2DualCore    = 0x8E,  ///< Processor Family - AMD Phenom X2 Quad Core
185     ISCP_ProcessorFamilyAmdAthlonX2DualCore    = 0x8F,  ///< Processor Family - AMD Athlon X2 Dual Core
186     ISCP_ProcessorFamilyPARISC                 = 0x90,  ///< Processor Family - PARISC
187     ISCP_ProcessorFamilyPaRisc8500             = 0x91,  ///< Processor Family - PARISC 8500
188     ISCP_ProcessorFamilyPaRisc8000             = 0x92,  ///< Processor Family - PARISC 8000
189     ISCP_ProcessorFamilyPaRisc7300LC           = 0x93,  ///< Processor Family - PARISC 7300LC
190     ISCP_ProcessorFamilyPaRisc7200             = 0x94,  ///< Processor Family - PARISC 7200
191     ISCP_ProcessorFamilyPaRisc7100LC           = 0x95,  ///< Processor Family - PARISC 7100LC
192     ISCP_ProcessorFamilyPaRisc7100             = 0x96,  ///< Processor Family - PARISC 7100
193     ISCP_ProcessorFamilyV30                    = 0xA0,  ///< Processor Family - V30
194     ISCP_ProcessorFamilyQuadCoreIntelXeon3200Series  = 0xA1,  ///< Processor Family - Intel Quad Core Xeon 3200 Series
195     ISCP_ProcessorFamilyDualCoreIntelXeon3000Series  = 0xA2,  ///< Processor Family - Intel Dual Core Xeon 3000 Series
196     ISCP_ProcessorFamilyQuadCoreIntelXeon5300Series  = 0xA3,  ///< Processor Family - Intel Quad Core Xeon 5300 Series
197     ISCP_ProcessorFamilyDualCoreIntelXeon5100Series  = 0xA4,  ///< Processor Family - Intel Dual Core Xeon 5100 Series
198     ISCP_ProcessorFamilyDualCoreIntelXeon5000Series  = 0xA5,  ///< Processor Family - Intel Dual Core Xeon 5000 Series
199     ISCP_ProcessorFamilyDualCoreIntelXeonLV          = 0xA6,  ///< Processor Family - Intel Dual Core Xeon LV
200     ISCP_ProcessorFamilyDualCoreIntelXeonULV         = 0xA7,  ///< Processor Family - Intel Dual Core Xeon ULV
201     ISCP_ProcessorFamilyDualCoreIntelXeon7100Series  = 0xA8,  ///< Processor Family - Intel Quad Core Xeon 7100 Series
202     ISCP_ProcessorFamilyQuadCoreIntelXeon5400Series  = 0xA9,  ///< Processor Family - Intel Quad Core Xeon 5400 Series
203     ISCP_ProcessorFamilyQuadCoreIntelXeon            = 0xAA,  ///< Processor Family - Intel Quad Core Xeon
204     ISCP_ProcessorFamilyDualCoreIntelXeon5200Series  = 0xAB,  ///< Processor Family - Intel Dual Core Xeon 5200 Series
205     ISCP_ProcessorFamilyDualCoreIntelXeon7200Series  = 0xAC,  ///< Processor Family - Intel Dual Core Xeon 7200 Series
206     ISCP_ProcessorFamilyQuadCoreIntelXeon7300Series  = 0xAD,  ///< Processor Family - Intel Quad Core Xeon 7300 Series
207     ISCP_ProcessorFamilyQuadCoreIntelXeon7400Series  = 0xAE,  ///< Processor Family - Intel Quad Core Xeon 7400 Series
208     ISCP_ProcessorFamilyMultiCoreIntelXeon7400Series = 0xAF,  ///< Processor Family - Intel Multi-Core Xeon 7400 Series
209     ISCP_ProcessorFamilyPentiumIIIXeon               = 0xB0,  ///< Processor Family - Intel Pentium III Xeon
210     ISCP_ProcessorFamilyPentiumIIISpeedStep          = 0xB1,  ///< Processor Family - Intel Pentium III Speed Step
211     ISCP_ProcessorFamilyPentium4                     = 0xB2,  ///< Processor Family - Pentium 4
212     ISCP_ProcessorFamilyIntelXeon                    = 0xB3,  ///< Processor Family - Intel Xeon
213     ISCP_ProcessorFamilyAS400                        = 0xB4,  ///< Processor Family - AS400
214     ISCP_ProcessorFamilyIntelXeonMP                  = 0xB5,  ///< Processor Family - Intel Xeon MP
215     ISCP_ProcessorFamilyAMDAthlonXP                  = 0xB6,  ///< Processor Family - AMD Athlon XP
216     ISCP_ProcessorFamilyAMDAthlonMP                  = 0xB7,  ///< Processor Family - AMD Athlon MP
217     ISCP_ProcessorFamilyIntelItanium2                = 0xB8,  ///< Processor Family - Intel Itanum2
218     ISCP_ProcessorFamilyIntelPentiumM                = 0xB9,  ///< Processor Family - Intel Pentium M
219     ISCP_ProcessorFamilyIntelCeleronD                = 0xBA,  ///< Processor Family - Intel Celeron D
220     ISCP_ProcessorFamilyIntelPentiumD                = 0xBB,  ///< Processor Family - Intel Pentium D
221     ISCP_ProcessorFamilyIntelPentiumEx               = 0xBC,  ///< Processor Family - Intel pentium Ex
222     ISCP_ProcessorFamilyIntelCoreSolo                = 0xBD,  ///< Processor Family - Intel Core Solo
223     ISCP_ProcessorFamilyReserved                     = 0xBE,  ///< Processor Family - Reserved
224     ISCP_ProcessorFamilyIntelCore2                   = 0xBF,  ///< Processor Family - Intel Core 2
225     ISCP_ProcessorFamilyIntelCore2Solo               = 0xC0,  ///< Processor Family - Intel Core 2 Solo
226     ISCP_ProcessorFamilyIntelCore2Extreme            = 0xC1,  ///< Processor Family - Intel Core 2 Extreme
227     ISCP_ProcessorFamilyIntelCore2Quad               = 0xC2,  ///< Processor Family - Intel Core 2 Quad
228     ISCP_ProcessorFamilyIntelCore2ExtremeMobile      = 0xC3,  ///< Processor Family - Intel Core 2 Extremem Mobile
229     ISCP_ProcessorFamilyIntelCore2DuoMobile          = 0xC4,  ///< Processor Family - Intel core 2 Duo Mobile
230     ISCP_ProcessorFamilyIntelCore2SoloMobile         = 0xC5,  ///< Processor Family - Intel Core 2 Solo Mobile
231     ISCP_ProcessorFamilyIntelCoreI7                  = 0xC6,  ///< Processor Family - Intel Core I7
232     ISCP_ProcessorFamilyDualCoreIntelCeleron         = 0xC7,  ///< Processor Family - Intel Dual Core Celeron
233     ISCP_ProcessorFamilyIBM390                       = 0xC8,  ///< Processor Family - IBM 390
234     ISCP_ProcessorFamilyG4                           = 0xC9,  ///< Processor Family - G4
235     ISCP_ProcessorFamilyG5                           = 0xCA,  ///< Processor Family - G5
236     ISCP_ProcessorFamilyG6                           = 0xCB,  ///< Processor Family - G6
237     ISCP_ProcessorFamilyzArchitecture                = 0xCC,  ///< Processor Family - zArchitecture
238     ISCP_ProcessorFamilyIntelCoreI5                  = 0xCD,  ///< Processor Family - Intel Core I5
239     ISCP_ProcessorFamilyIntelCoreI3                  = 0xCE,  ///< Processor Family - Intel Core I3
240     ISCP_ProcessorFamilyViaC7M                       = 0xD2,  ///< Processor Family - Via C7M
241     ISCP_ProcessorFamilyViaC7D                       = 0xD3,  ///< Processor Family - Via C7D
242     ISCP_ProcessorFamilyViaC7                        = 0xD4,  ///< Processor Family - Via C7
243     ISCP_ProcessorFamilyViaEden                      = 0xD5,  ///< Processor Family - Via Eden
244     ISCP_ProcessorFamilyMultiCoreIntelXeon           = 0xD6,  ///< Processor Family - Intel Multi-core Xeon
245     ISCP_ProcessorFamilyDualCoreIntelXeon3Series     = 0xD7,  ///< Processor Family - Intel Dual-core Xeon 3-Series
246     ISCP_ProcessorFamilyQuadCoreIntelXeon3Series     = 0xD8,  ///< Processor Family - Intel Quad-core Xeon 3-Series
247     ISCP_ProcessorFamilyViaNano                      = 0xD9,  ///< Processor Family - Via Nano
248     ISCP_ProcessorFamilyDualCoreIntelXeon5Series     = 0xDA,  ///< Processor Family - Intel Dual-core Xeon 5-Series
249     ISCP_ProcessorFamilyQuadCoreIntelXeon5Series     = 0xDB,  ///< Processor Family - Intel Quad-core Xeon 5-Series
250     ISCP_ProcessorFamilyDualCoreIntelXeon7Series     = 0xDD,  ///< Processor Family - Intel Dual-core Xeon 7-Series
251     ISCP_ProcessorFamilyQuadCoreIntelXeon7Series     = 0xDE,  ///< Processor Family - Intel Quad-core Xeon 7-Series
252     ISCP_ProcessorFamilyMultiCoreIntelXeon7Series    = 0xDF,  ///< Processor Family - Intel Multi-core Xeon 7-Series
253     ISCP_ProcessorFamilyMultiCoreIntelXeon3400Series = 0xE0,  ///< Processor Family - Intel Multi-core Xeon 3400-Series
254     ISCP_ProcessorFamilyAmdOpteron3000Series         = 0xE4,  ///< Processor Family - AMD Opteron 3000 Series
255     ISCP_ProcessorFamilyAmdSempronII                 = 0xE5,  ///< Processor Family - AMD Sempron II
256     ISCP_ProcessorFamilyEmbeddedAmdOpteronQuadCore   = 0xE6,  ///< Processor Family - AMD Embedded Opteron Quad Core
257     ISCP_ProcessorFamilyAmdPhenomTripleCore          = 0xE7,  ///< Processor Family - AMD Phonon Triple Core
258     ISCP_ProcessorFamilyAmdTurionUltraDualCoreMobile = 0xE8,  ///< Processor Family - AMD Turion Ultra Dual Core Mobile
259     ISCP_ProcessorFamilyAmdTurionDualCoreMobile      = 0xE9,  ///< Processor Family - AMD Turion Dual Core Mobile
260     ISCP_ProcessorFamilyAmdAthlonDualCore            = 0xEA,  ///< Processor Family - AMD Turion Dual Core Mobile
261     ISCP_ProcessorFamilyAmdSempronSI                 = 0xEB,  ///< Processor Family - AMD Sempron SI
262     ISCP_ProcessorFamilyAmdPhenomII                  = 0xEC,  ///< Processor Family - AMD Phenon II
263     ISCP_ProcessorFamilyAmdAthlonII                  = 0xED,  ///< Processor Family - AMD Athlon II
264     ISCP_ProcessorFamilySixCoreAmdOpteron            = 0xEE,  ///< Processor Family - AMD 6-Core Opteron
265     ISCP_ProcessorFamilyAmdSempronM                  = 0xEF,  ///< Processor Family - AMD Sempon M
266     ISCP_ProcessorFamilyi860                         = 0xFA,  ///< Processor Family - i860
267     ISCP_ProcessorFamilyi960                         = 0xFB,  ///< Processor Family - i960
268     ISCP_ProcessorFamilyIndicatorFamily2             = 0xFE,  ///< Processor Family - Indicator Family 2
269     ISCP_ProcessorFamilyReserved1                    = 0xFF   ///< Processor Family - Reserved
270   } ISCP_PROCESSOR_FAMILY_DATA;
271 
272   /// Processor Information2 - Processor Family2.
273   typedef enum {
274     ISCP_ProcessorFamilySH3                   = 0x0104,  ///< ProcessorFamily - SH3
275     ISCP_ProcessorFamilySH4                   = 0x0105,  ///< ProcessorFamily - SH4
276     ISCP_ProcessorFamilyARM                   = 0x0118,  ///< ProcessorFamily - ARM
277     ISCP_ProcessorFamilyStrongARM             = 0x0119,  ///< ProcessorFamily - Strong ARM
278     ISCP_ProcessorFamily6x86                  = 0x012C,  ///< ProcessorFamily - x86
279     ISCP_ProcessorFamilyMediaGX               = 0x012D,  ///< ProcessorFamily - Media GX
280     ISCP_ProcessorFamilyMII                   = 0x012E,  ///< ProcessorFamily - MII
281     ISCP_ProcessorFamilyWinChip               = 0x0140,  ///< ProcessorFamily - WinChip
282     ISCP_ProcessorFamilyDSP                   = 0x015E,  ///< ProcessorFamily - DSP
283     ISCP_ProcessorFamilyVideoProcessor        = 0x01F4   ///< ProcessorFamily - Video Processor
284   } ISCP_PROCESSOR_FAMILY2_DATA;
285 
286   /// Processor Information - Processor Upgrade.
287   typedef enum {
288     ISCP_ProcessorUpgradeOther         = 0x01,          ///< Processor Upgrade - Other
289     ISCP_ProcessorUpgradeUnknown       = 0x02,          ///< Processor Upgrade - Unknown
290     ISCP_ProcessorUpgradeDaughterBoard = 0x03,          ///< Processor Upgrade - Daughter Board
291     ISCP_ProcessorUpgradeZIFSocket     = 0x04,          ///< Processor Upgrade - ZIF Socket
292     ISCP_ProcessorUpgradePiggyBack     = 0x05,          ///< Processor Upgrade - Piggyback
293     ISCP_ProcessorUpgradeNone          = 0x06,          ///< Processor Upgrade - None
294     ISCP_ProcessorUpgradeLIFSocket     = 0x07,          ///< Processor Upgrade - LIF Socket
295     ISCP_ProcessorUpgradeSlot1         = 0x08,          ///< Processor Upgrade - Slot 1
296     ISCP_ProcessorUpgradeSlot2         = 0x09,          ///< Processor Upgrade - Slot 2
297     ISCP_ProcessorUpgrade370PinSocket  = 0x0A,          ///< Processor Upgrade - 370 Pin Socket
298     ISCP_ProcessorUpgradeSlotA         = 0x0B,          ///< Processor Upgrade - Slot A
299     ISCP_ProcessorUpgradeSlotM         = 0x0C,          ///< Processor Upgrade - Slot M
300     ISCP_ProcessorUpgradeSocket423     = 0x0D,          ///< Processor Upgrade - Socket 423
301     ISCP_ProcessorUpgradeSocketA       = 0x0E,          ///< Processor Upgrade - Socket A
302     ISCP_ProcessorUpgradeSocket478     = 0x0F,          ///< Processor Upgrade - Socket 478
303     ISCP_ProcessorUpgradeSocket754     = 0x10,          ///< Processor Upgrade - Socket 754
304     ISCP_ProcessorUpgradeSocket940     = 0x11,          ///< Processor Upgrade - Socket 940
305     ISCP_ProcessorUpgradeSocket939     = 0x12,          ///< Processor Upgrade - Socket 939
306     ISCP_ProcessorUpgradeSocketmPGA604 = 0x13,          ///< Processor Upgrade - PGA 604
307     ISCP_ProcessorUpgradeSocketLGA771  = 0x14,          ///< Processor Upgrade - LGA 771
308     ISCP_ProcessorUpgradeSocketLGA775  = 0x15,          ///< Processor Upgrade - LGA 775
309     ISCP_ProcessorUpgradeSocketS1      = 0x16,          ///< Processor Upgrade - S1
310     ISCP_ProcessorUpgradeAM2           = 0x17,          ///< Processor Upgrade - AM2
311     ISCP_ProcessorUpgradeF1207         = 0x18,          ///< Processor Upgrade - F1207
312     ISCP_ProcessorSocketLGA1366        = 0x19,          ///< Processor Upgrade - LGA 1366
313     ISCP_ProcessorUpgradeSocketG34     = 0x1A,          ///< Processor Upgrade - G34
314     ISCP_ProcessorUpgradeSocketAM3     = 0x1B,          ///< Processor Upgrade - AM3
315     ISCP_ProcessorUpgradeSocketC32     = 0x1C,          ///< Processor Upgrade - C32
316     ISCP_ProcessorUpgradeSocketLGA1156 = 0x1D,          ///< Processor Upgrade - LGA 1156
317     ISCP_ProcessorUpgradeSocketLGA1567 = 0x1E,          ///< Processor Upgrade - LGA 1567
318     ISCP_ProcessorUpgradeSocketPGA988A = 0x1F,          ///< Processor Upgrade - PGA 988A
319     ISCP_ProcessorUpgradeSocketBGA1288 = 0x20,          ///< Processor Upgrade - PGA 1288
320     ISCP_ProcessorUpgradeSocketrPGA988B = 0x21,         ///< Processor Upgrade - PGA 988B
321     ISCP_ProcessorUpgradeSocketBGA1023 = 0x22,          ///< Processor Upgrade - BGA 1023
322     ISCP_ProcessorUpgradeSocketBGA1224 = 0x23,          ///< Processor Upgrade - BGA 1224
323     ISCP_ProcessorUpgradeSocketLGA1155 = 0x24,          ///< Processor Upgrade - LGA 1155
324     ISCP_ProcessorUpgradeSocketLGA1356 = 0x25,          ///< Processor Upgrade - LGA 1356
325     ISCP_ProcessorUpgradeSocketLGA2011 = 0x26,          ///< Processor Upgrade - LGA 2011
326     ISCP_ProcessorUpgradeSocketFS1     = 0x27,          ///< Processor Upgrade - FS1
327     ISCP_ProcessorUpgradeSocketFS2     = 0x28,          ///< Processor Upgrade - FS2
328     ISCP_ProcessorUpgradeSocketFM1     = 0x29,          ///< Processor Upgrade - FM1
329     ISCP_ProcessorUpgradeSocketFM2     = 0x2A,          ///< Processor Upgrade - FM2
330     ISCP_ProcessorUpgradeSocketLGA2011_3 = 0x2B,        ///< Processor Upgrade - LGA 2011-3
331     ISCP_ProcessorUpgradeSocketLGA1356_3 = 0x2C         ///< Processor Upgrade - LGA 1356-3
332   } ISCP_PROCESSOR_UPGRADE;
333 
334   /// CPU Information - Characteristics.
335   typedef struct {
336     UINT16  Reserved0                 :1;          ///< CPU Information - Reserved
337     UINT16  Unknown                   :1;          ///< CPU Information - Unknown
338     UINT16  Capable64Bit              :1;          ///< CPU Information - Capable 64-Bit
339     UINT16  MultiCore                 :1;          ///< CPU Information - Multi-core
340     UINT16  HardwareThread            :1;          ///< CPU Information - Hardware Thread
341     UINT16  ExecuteProtection         :1;          ///< CPU Information - Execute Protection
342     UINT16  EnhancedVirtualization    :1;          ///< CPU Information - Enhanced Virtualization
343     UINT16  PowerPerformanceControl   :1;          ///< CPU Information - Power Performance Control
344     UINT16  Reserved8_15              :8;          ///< CPU Information - Reserved
345   } ISCP_PROCESSOR_CHARACTERISTICS;
346 
347   /// CPU Information - CPU Status.
348   typedef enum {
349     ISCP_CPU_STATUS_UNKNOWN = 0,                     ///< CPU Status - Unknown
350     ISCP_CPU_STATUS_ENABLED,                         ///< CPU Status - Enabled
351     ISCP_CPU_STATUS_DISABLED_BY_USER,                ///< CPU Status - Disabled by user
352     ISCP_CPU_STATUS_DISABLED_BY_BIOS,                ///< CPU Status - Disabled by BIOS
353     ISCP_CPU_STATUS_IDLE,                            ///< CPU Status - Idle
354     ISCP_CPU_STATUS_RESERVED_5,                      ///< CPU Status - Reserved
355     ISCP_CPU_STATUS_RESERVED_6,                      ///< CPU Status - Reserved
356     ISCP_CPU_STATUS_OTHER                            ///< CPU Status - Other
357   } ISCP_CPU_STATUS;
358 
359 
360   /// CPU Information - Status.
361   typedef struct {
362     UINT16  CpuStatus                 :3;            ///< CPU Status
363     UINT16  Reserved3_5               :3;            ///< Reserved Bits[5:3]
364     UINT16  CpuSocketPopulated        :1;            ///< CPU Socket Populated
365     UINT16  Reserved7_15              :9;            ///< Reserved Bits[15:9]
366   } PROCESSOR_STATUS;
367 
368   /// Cache Information - Operation Mode.
369   typedef enum {
370     ISCP_CACHE_OPERATION_MODE_WRITE_THROUGH = 0,          ///< Cache Operation Mode Write Through
371     ISCP_CACHE_OPERATION_MODE_WRITE_BACK,                 ///< Cache Operation Mode Write Back
372     ISCP_CACHE_OPERATION_MODE_VARIES_WITH_MEMORY_ADDRESS, ///< Cache Operation Mode Varies with Memory Address
373     ISCP_CACHE_OPERATION_MODE_UNKNOWN,                    ///< Cache Operation Mode Unknown
374   } ISCP_CACHE_OPERATION_MODE;
375 
376   /// Cache Information - Location.
377   typedef enum {
378     ISCP_CACHE_LOCATION_INTERNAL = 0,               ///< Cache Location Internal
379     ISCP_CACHE_LOCATION_EXTERNAL,                   ///< Cache Location External
380     ISCP_CACHE_LOCATION_RESERVED,                   ///< Cache Location Reserved
381     ISCP_CACHE_LOCATION_UNKNOWN,                    ///< Cache Location Unknown
382   } ISCP_CACHE_LOCATION;
383 
384   /// Cache Information - Level.
385   typedef enum {
386     ISCP_CACHE_LEVEL_1 = 0,                         ///< Cache Level 1
387     ISCP_CACHE_LEVEL_2,                             ///< Cache Level 2
388     ISCP_CACHE_LEVEL_3,                             ///< Cache Level 3
389     ISCP_CACHE_LEVEL_4,                             ///< Cache Level 4
390   } ISCP_CACHE_LEVEL;
391 
392   /// Cache Information - Configuration.
393   typedef struct {
394     UINT16  CacheLevel                :3;            ///< Cache Level
395     UINT16  CacheSocketd              :1;            ///< Cache Socket ID
396     UINT16  Reserved_4                :1;            ///< Cache Reserved
397     UINT16  Location                  :2;            ///< Cache Location
398     UINT16  EnabledDisabled           :1;            ///< Cache Enabled / Disabled
399     UINT16  OperationMode             :2;            ///< Operation Mode
400     UINT16  Reserved10_15             :6;            ///< Cache Reserved
401   } ISCP_CACHE_CONFIGURATION;
402 
403   /// Cache Information - SRAM Type.
404   typedef struct {
405     UINT16  Other                :1;                 ///< SRAM Type - Other
406     UINT16  Unknown              :1;                 ///< SRAM Type - Unknown
407     UINT16  NonBurst             :1;                 ///< SRAM Type - NonBurst
408     UINT16  Burst                :1;                 ///< SRAM Type - Burst
409     UINT16  PipelineBurst        :1;                 ///< SRAM Type - Pipeline Burst
410     UINT16  Synchronous          :1;                 ///< SRAM Type - Synchronous
411     UINT16  Asynchronous         :1;                 ///< SRAM Type - Asynchronous
412     UINT16  Reserved7_15         :9;                 ///< SRAM Type - Reserved
413   } ISCP_CACHE_SRAM_TYPE;
414 
415   /// Cache Information - Error Correction Type.
416   typedef enum {
417     ISCP_ECC_TYPE_OTHER = 1,                         ///< ECC Type - Other
418     ISCP_ECC_TYPE_UNKNOWN,                           ///< ECC Type - Unknown
419     ISCP_ECC_TYPE_NONE,                              ///< ECC Type - None
420     ISCP_ECC_TYPE_PARITY,                            ///< ECC Type - Parity
421     ISCP_ECC_TYPE_SINGLE_BIT,                        ///< ECC Type - Single-Bit
422     ISCP_ECC_TYPE_MULTI_BIT                          ///< ECC Type - Multi-Bit
423   } ISCP_CACHE_ECC_TYPE;
424 
425   /// Cache Information - System Cache Type.
426   typedef enum {
427     ISCP_SYSTEM_CACHE_TYPE_OTHER  = 1,               ///< System Cache Type - Other
428     ISCP_SYSTEM_CACHE_TYPE_UNKNOWN,                  ///< System Cache Type - Unknown
429     ISCP_SYSTEM_CACHE_TYPE_INSTRUCTION,              ///< System Cache Type - Instruction
430     ISCP_SYSTEM_CACHE_TYPE_DATA,                     ///< System Cache Type - Data
431     ISCP_SYSTEM_CACHE_TYPE_UNIFIED                   ///< System Cache Type - Unified
432   } ISCP_SYSTEM_CACHE_TYPE;
433 
434   /// Cache Information - Associativity.
435   typedef enum {
436     ISCP_CACHE_ASSOCIATIVITY_OTHER = 1,                 ///< Cache Associativity - Other
437     ISCP_CACHE_ASSOCIATIVITY_UNKNOWN,                   ///< Cache Associativity - Unknown
438     ISCP_CACHE_ASSOCIATIVITY_DIRECT_MAPPED,             ///< Cache Associativity - Direct Mapped
439     ISCP_CACHE_ASSOCIATIVITY_2_WAY_SET_ASSOCIATIVE,     ///< Cache Associativity - 2-way Set Assciative
440     ISCP_CACHE_ASSOCIATIVITY_4_WAY_SET_ASSOCIATIVE,     ///< Cache Associativity - 4-way Set Assciative
441     ISCP_CACHE_ASSOCIATIVITY_FULLY_ASSOCIATIVE,         ///< Cache Associativity - Fully Assciative
442     ISCP_CACHE_ASSOCIATIVITY_8_WAY_SET_ASSOCIATIVE,     ///< Cache Associativity - 8-way Set Assciative
443     ISCP_CACHE_ASSOCIATIVITY_16_WAY_SET_ASSOCIATIVE,    ///< Cache Associativity - 16-way Set Assciative
444     ISCP_CACHE_ASSOCIATIVITY_12_WAY_SET_ASSOCIATIVE,    ///< Cache Associativity - 12-way Set Assciative
445     ISCP_CACHE_ASSOCIATIVITY_24_WAY_SET_ASSOCIATIVE,    ///< Cache Associativity - 24-way Set Assciative
446     ISCP_CACHE_ASSOCIATIVITY_32_WAY_SET_ASSOCIATIVE,    ///< Cache Associativity - 32-way Set Assciative
447     ISCP_CACHE_ASSOCIATIVITY_48_WAY_SET_ASSOCIATIVE,    ///< Cache Associativity - 48-way Set Assciative
448     ISCP_CACHE_ASSOCIATIVITY_64_WAY_SET_ASSOCIATIVE,    ///< Cache Associativity - 64-way Set Assciative
449     ISCP_CACHE_ASSOCIATIVITY_20_WAY_SET_ASSOCIATIVE     ///< Cache Associativity - 20-way Set Assciative
450   } ISCP_CACHE_ASSOCIATIVITY;
451 
452   /// DMI TYPE 4 - CPU Information
453   typedef struct {
454     UINT16                    T4ProcType;               ///< Processor Type
455     UINT16                    T4ProcFamily;             ///< Processor Family
456     ISCP_PROC_ID              T4ProcId;                 ///< Processor Id
457     UINT16                    T4Voltage;                ///< Processor Voltage
458     UINT16                    T4ExternalClock;          ///< Processor External Clock
459     UINT16                    T4MaxSpeed;               ///< Processor Maximum Speed
460     UINT16                    T4CurrentSpeed;           ///< Processor Current Speed
461     UINT16                    T4Status;                 ///< Processor Status
462     UINT16                    T4ProcUpgrade;            ///< Processor Upgrade
463     UINT16                    T4CoreCount;              ///< Processor Core Count
464     UINT16                    T4CoreEnabled;            ///< Processor Core Enabled
465     UINT16                    T4ThreadCount;            ///< Processor Thread Count
466     UINT16                    T4ProcCharacteristics;    ///< Processor Characteristics
467     UINT16                    T4ProcFamily2;            ///< Processor Family 2
468     UINT16                    T4CoreCount2;             ///< Processor Core Count 2
469     UINT16                    T4CoreEnabled2;           ///< Processor Core Enabled 2
470     UINT16                    T4ThreadCount2;           ///< Processor Thread Count 2
471     UINT8                     T4SerialNumber[8];        ///< Processor Serial Number
472   } ISCP_TYPE4_SMBIOS_INFO;
473 
474   /// DMI Type 7 - Cache Information
475   typedef struct {
476     UINT16                    T7CacheCfg;               ///< Cache Configuration
477     UINT16                    T7MaxCacheSize;           ///< Maximum Cache Size
478     UINT16                    T7InstallSize;            ///< Cache Install Size
479     UINT16                    T7SupportedSramType;      ///< Supported SRAM Type
480     UINT16                    T7CurrentSramType;        ///< Current SRAM Type
481     UINT16                    T7CacheSpeed;             ///< Cache Speed in nanoseconds
482     UINT16                    T7ErrorCorrectionType;    ///< Cache Error Correction Type
483     UINT16                    T7SystemCacheType;        ///< System Cache Type
484     UINT16                    T7Associativity;          ///< Cache Associativity
485   } ISCP_TYPE7_SMBIOS_INFO;
486 
487   #ifdef __cplusplus
488   }
489 #endif
490 
491 
492 #endif /* CPUISCP_H_ */
493