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