summaryrefslogtreecommitdiff
path: root/ReferenceCode/Haswell/Include/CpuRegs.h
blob: ed92b70262593cb44ceb627d6f6595ea42631dbc (plain)
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
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
/** @file
  Conventions:
  - Prefixes:
    Definitions beginning with "MSR_" are MSRs
    Definitions beginning with "R_" are registers
    Definitions beginning with "B_" are bits within registers
    Definitions beginning with "V_" are meaningful values of bits within the registers
    Definitions beginning with "S_" are register sizes
    Definitions beginning with "N_" are the bit position

@copyright
  Copyright (c) 2004 - 2013 Intel Corporation. All rights reserved
  This software and associated documentation (if any) is furnished
  under a license and may only be used or copied in accordance
  with the terms of the license. Except as permitted by such
  license, no part of this software or documentation may be
  reproduced, stored in a retrieval system, or transmitted in any
  form or by any means without the express written consent of
  Intel Corporation.

  This file contains an 'Intel Peripheral Driver' and is
  licensed for Intel CPUs and chipsets under the terms of your
  license agreement with Intel or your vendor.  This file may
  be modified by the user, subject to additional terms of the
  license agreement
**/
#ifndef _CPU_REGS_H_
#define _CPU_REGS_H_

#include "CommonIncludes.h"

//
// Local APIC defines
//
#define APIC_REGISTER_LOCAL_ID_OFFSET         0x00000020
#define APIC_REGISTER_APIC_VERSION_OFFSET     0x00000030
#define APIC_REGISTER_SPURIOUS_VECTOR_OFFSET  0x000000F0
#define APIC_REGISTER_ICR_LOW_OFFSET          0x00000300
#define APIC_REGISTER_ICR_HIGH_OFFSET         0x00000310
#define APIC_REGISTER_LINT0_VECTOR_OFFSET     0x00000350
#define APIC_REGISTER_LINT1_VECTOR_OFFSET     0x00000360

#define BROADCAST_MODE_SPECIFY_CPU            0x00
#define BROADCAST_MODE_ALL_INCLUDING_SELF     0x01
#define BROADCAST_MODE_ALL_EXCLUDING_SELF     0x02

#ifndef DELIVERY_MODE_REMOTE_READ

#define DELIVERY_MODE_FIXED           0x00
#define DELIVERY_MODE_LOWEST_PRIORITY 0x01
#define DELIVERY_MODE_SMI             0x02
#define DELIVERY_MODE_REMOTE_READ     0x03
#define DELIVERY_MODE_NMI             0x04
#define DELIVERY_MODE_INIT            0x05
#define DELIVERY_MODE_SIPI            0x06
#define DELIVERY_MODE_MAX             0x07

#define TRIGGER_MODE_EDGE             0x00
#define TRIGGER_MODE_LEVEL            0x01

#endif

#define CACHE_UNCACHEABLE               0
#define CACHE_WRITECOMBINING            1
#define CACHE_WRITETHROUGH              4
#define CACHE_WRITEPROTECTED            5
#define CACHE_WRITEBACK                 6

#define CPUID_SIGNATURE                 0x0
#define CPUID_VERSION_INFO              0x1
#define CPUID_FUNCTION_4                0x4
#define CPU_CACHE_TYPE_MASK             0x1F
#define CPU_CACHE_LEVEL_MASK            0x07
#define CPU_CACHE_ASSOCIATIVITY_MASK    0x03FF
#define CPU_CACHE_PARTITION_MASK        0x03FF
#define CPU_CACHE_LINE_SIZE_MASK        0x0FFF
#define B_CPUID_VERSION_INFO_ECX_MWAIT  BIT3
#define B_CPUID_VERSION_INFO_ECX_VME    BIT5
#define B_CPUID_VERSION_INFO_ECX_SME    BIT6
#define B_CPUID_VERSION_INFO_ECX_EIST   BIT7
#define B_CPUID_VERSION_INFO_ECX_TM2    BIT8
#define B_CPUID_VERSION_INFO_ECX_DCA    BIT18
#define B_CPUID_VERSION_INFO_ECX_AES    BIT25
#define B_CPUID_VERSION_INFO_ECX_XAPIC  BIT21
#define B_CPUID_VERSION_INFO_EDX_XD     BIT20
#define B_CPUID_VERSION_INFO_EDX_HT     BIT28
#define B_CPUID_VERSION_INFO_EDX_TM1    BIT29

#define CPUID_CACHE_INFO                0x2
#define CPUID_SERIAL_NUMBER             0x3
#define CPUID_CACHE_PARAMS              0x4

//
// CPU ID Instruction defines
//
#define V_CPUID_CACHE_TYPE_MASK         0x1F
#define B_CPUID_CACHE_TYPE_DATA         0x1
#define B_CPUID_CACHE_TYPE_INSTRUCTION  0x2
#define B_CPUID_CACHE_TYPE_UNIFIED      0x3
#define V_CPUID_CACHE_LEVEL_MASK        0xE0
#define B_CPUID_CACHE_LEVEL_SHIFT       5
#define B_CPUID_CACHE_PARAMS_WAYS_SHIFT                               22
#define B_CPUID_CACHE_PARAMS_PARTITIONS_SHIFT                         12
#define CPUID_MONITOR_MWAIT_PARAMS                                    0x5
#define B_CPUID_MONITOR_MWAIT_ECX_EXTENSIONS                          BIT0
#define B_CPUID_MONITOR_MWAIT_EDX_CSTATE                              BIT0
#define V_CPUID_MONITOR_MWAIT_EDX_ENHANCED_CSTATE                     0x2
#define CPUID_POWER_MANAGEMENT_PARAMS                                 0x6
#define B_CPUID_POWER_MANAGEMENT_EAX_TURBO                            BIT1
#define B_CPUID_POWER_MANAGEMENT_EAX_FINE_GRAINED_CLOCK_MODULATION    BIT5
#define B_CPUID_POWER_MANAGEMENT_ECX_ENERGY_EFFICIENT_POLICY_SUPPORT  BIT3
#define CPUID_REV7                                                    0x7
#define CPUID_REV8                                                    0x8
#define CPUID_DCA_PARAMS                                              0x9
#define CPUID_REVA                                                    0xA
#define CPUID_CORE_TOPOLOGY                                           0xB
#define CPUID_EXTENDED_FUNCTION                                       0x80000000
#define CPUID_EXTENDED_CPU_SIG                                        0x80000001
#define CPUID_BRAND_STRING1                                           0x80000002
#define CPUID_BRAND_STRING2                                           0x80000003
#define CPUID_BRAND_STRING3                                           0x80000004
#define CPUID_L2_CACHE_FEATURE                                        0x80000006
#define CPUID_VIR_PHY_ADDRESS_SIZE                                    0x80000008

//
// MSR defines
//
#define MSR_IA32_PLATFORM_ID                                          0x00000017
#define MSR_IA32_APIC_BASE                                            0x0000001B
#define B_MSR_IA32_APIC_BASE_G_XAPIC                                  BIT11
#define B_MSR_IA32_APIC_BASE_M_XAPIC                                  BIT10
#define B_MSR_IA32_APIC_BASE_BSP                                      BIT8
#define PIC_THREAD_CONTROL                                            0x0000002E
#define B_PIC_THREAD_CONTROL_TPR_DIS                                  BIT10
#define MSR_CORE_THREAD_COUNT                                         0x00000035
#define N_CORE_COUNT_OFFSET                                           16
#define B_THREAD_COUNT_MASK                                           0xFFFF
#define MSR_SOCKET_ID_MSR                                             0x00000039
#define MSR_IA32_FEATURE_CONTROL                                      0x0000003A
#define B_MSR_IA32_FEATURE_CONTROL_LOCK                               BIT0
#define B_MSR_IA32_FEATURE_CONTROL_ELT                                BIT1
#define B_MSR_IA32_FEATURE_CONTROL_EVT                                BIT2
#define B_MSR_IA32_FEATURE_CONTROL_SLFE                               (BIT8 | BIT9 | BIT10 | BIT11 | BIT12 | BIT13 | BIT14)
#define B_MSR_IA32_FEATURE_CONTROL_SGE                                BIT15
#define MSR_IA32_SMM_SAVE_CONTROL                                     0x0000003E
#define B_MSR_IA32_SMM_SAVE_CONTROL_SFPPE                             BIT0
#define MSR_IA32_BIOS_UPDT_TRIG                                       0x00000079
#define MSR_IA32_BIOS_SIGN_ID                                         0x0000008B
#define MSR_IA32_SMM_MONITOR_CONTROL                                  0x0000009B
#define MSR_IA32_PMC0_MSR                                             0x000000C1
#define MSR_IA32_PMC1_MSR                                             0x000000C2
#define MSR_IA32_PMC2_MSR                                             0x000000C3
#define MSR_IA32_PMC3_MSR                                             0x000000C4
#define MSR_IA32_PMC4_MSR                                             0x000000C5
#define MSR_IA32_PMC5_MSR                                             0x000000C6
#define MSR_IA32_PMC6_MSR                                             0x000000C7
#define MSR_IA32_PMC7_MSR                                             0x000000C8
#define MSR_PLATFORM_INFO                                             0x000000CE
#define N_PLATFORM_INFO_MIN_RATIO                                     40
#define B_PLATFORM_INFO_RATIO_MASK                                    0xFF
#define N_PLATFORM_INFO_MAX_RATIO                                     8
#define B_MSR_PLATFORM_INFO_PFAT_AVAIL                                BIT35
#define N_MSR_PLATFORM_INFO_CONFIG_TDP_NUM_LEVELS_OFFSET              33
#define V_CONFIG_TDP_NUM_LEVELS_MASK                                  (BIT34 | BIT33)
#define B_PLATFORM_INFO_TDC_TDP_LIMIT                                 BIT29
#define N_PLATFORM_INFO_RATIO_LIMIT                                   28
#define B_PLATFORM_INFO_RATIO_LIMIT                                   BIT28
#define B_FIVR_RFI_TUNING_AVAIL                                       BIT25
#define B_PLATFORM_INFO_SMM_SAVE_CONTROL                              BIT16
#define N_PLATFORM_INFO_PROG_TCC_ACTIVATION_OFFSET                    30
#define B_PLATFORM_INFO_PROG_TCC_ACTIVATION_OFFSET                    BIT30
#define B_PLATFORM_INFO_TIMED_MWAIT_SUPPORTED                         BIT37
#define MSR_PMG_CST_CONFIG                                            0x000000E2
#define B_CST_CONTROL_LOCK                                            BIT15
#define B_IO_MWAIT_REDIRECTION_ENABLE                                 BIT10
#define B_TIMED_MWAIT_ENABLE                                          BIT31
#define B_PACKAGE_C_STATE_LIMIT                                       (BIT3 | BIT2 | BIT1 | BIT0)
#define V_CSTATE_LIMIT_C1                                             0x01
#define V_CSTATE_LIMIT_C3                                             0x02
#define V_CSTATE_LIMIT_C6                                             0x03
#define V_CSTATE_LIMIT_C7                                             0x04
#define V_CSTATE_LIMIT_C7S                                            0x05
#define V_CSTATE_LIMIT_C8                                             0x06
#define V_CSTATE_LIMIT_C9                                             0x07
#define V_CSTATE_LIMIT_C10                                            0x08
#define B_C3_AUTO_DEMOTION_ENABLE                                     BIT25
#define B_C1_AUTO_DEMOTION_ENABLE                                     BIT26
#define B_C3_AUTO_UNDEMOTION_ENABLE                                   BIT27
#define B_C1_AUTO_UNDEMOTION_ENABLE                                   BIT28
#define B_PKG_CSTATE_DEMOTION_ENABLE                                  BIT29
#define B_PKG_CSTATE_UNDEMOTION_ENABLE                                BIT30
#define MSR_RFI_TUNNING                                               0x000000E3
#define V_FREQ_TUNNING_MASK                                           0xFFFF
#define MSR_PMG_IO_CAPTURE_BASE                                       0x000000E4
#define B_MSR_PMG_CST_RANGE                                           (BIT18 | BIT17 | BIT16)
#define V_IO_CAPT_LVL2                                                (0x0 << 16)   ///< C3
#define V_IO_CAPT_LVL3                                                (0x1 << 16)   ///< C6
#define V_IO_CAPT_LVL4                                                (0x2 << 16)   ///< C7
#define V_IO_CAPT_LVL5                                                (0x3 << 16)   ///< C8
#define V_IO_CAPT_LVL6                                                (0x4 << 16)   ///< C9
#define V_IO_CAPT_LVL7                                                (0x5 << 16)   ///< C10
#define V_IO_CAPT_LVL2_BASE_ADDR_MASK                                 0xFFFF
#define IA32_MTRR_CAP                                                 0x000000FE
#define B_IA32_MTRR_VARIABLE_SUPPORT                                  0xFF
#define B_IA32_MTRR_CAP_FIXED_SUPPORT                                 BIT8
#define B_IA32_MTRR_CAP_SMRR_SUPPORT                                  BIT11
#define B_IA32_MTRR_CAP_EMRR_SUPPORT                                  BIT12
#define MSR_PLAT_FRMW_PROT_CTRL                                       0x00000110
#define B_MSR_PLAT_FRMW_PROT_CTRL_LK                                  BIT0
#define B_MSR_PLAT_FRMW_PROT_CTRL_EN                                  BIT1
#define B_MSR_PLAT_FRMW_PROT_CTRL_S1                                  BIT2
#define MSR_PLAT_FRMW_PROT_HASH_0                                     0x00000111
#define MSR_PLAT_FRMW_PROT_HASH_1                                     0x00000112
#define MSR_PLAT_FRMW_PROT_HASH_2                                     0x00000113
#define MSR_PLAT_FRMW_PROT_HASH_3                                     0x00000114
#define MSR_PLAT_FRMW_PROT_TRIG_PARAM                                 0x00000115
#define N_MSR_PLAT_FRMW_PROT_TRIG_PARAM_STATUS_OFFSET                 0
#define V_MSR_PLAT_FRMW_PROT_TRIG_PARAM_STATUS_MASK                   0x000000000000FFFF
#define N_MSR_PLAT_FRMW_PROT_TRIG_PARAM_DATA_OFFSET                   16
#define V_MSR_PLAT_FRMW_PROT_TRIG_PARAM_DATA_MASK                     0x000000000000FFFF
#define N_MSR_PLAT_FRMW_PROT_TRIG_PARAM_TERMINAL_OFFSET               32
#define V_MSR_PLAT_FRMW_PROT_TRIG_PARAM_TERMINAL_MASK                 0x000000000000FFFF
#define B_MSR_PLAT_FRMW_PROT_TRIG_PARAM_SE                            BIT62
#define N_MSR_PLAT_FRMW_PROT_TRIG_PARAM_SE_OFFSET                     62
#define MSR_PLAT_FRMW_PROT_TRIGGER                                    0x00000116
#define MSR_PLAT_FRMW_PROT_PASSWD                                     0x00000117
#define MSR_SPCL_CHIPSET_USAGE_ADDR                                   0x000001FE
#define MSR_IA32_FEATURE_CONFIG                                       0x0000013C
#define B_IA32_FEATURE_CONFIG_AES_DIS                                 BIT1
#define B_IA32_FEATURE_CONFIG_LOCK                                    BIT0
#define IA32_MCG_CAP                                                  0x00000179
#define IA32_MCG_STATUS                                               0x0000017A
#define MSR_FLEX_RATIO                                                0x00000194
#define N_FLEX_RATIO                                                  8
#define B_FLEX_RATIO                                                  (0xFF << 8)
#define B_FLEX_EN                                                     BIT16
#define B_MAX_EXTRA_VOLTAGE                                           0xFF
#define N_OVERCLOCKING_BINS                                           17
#define B_OVERCLOCKING_BINS                                           (0x7 << 17)
#define B_OVERCLOCKING_LOCK                                           BIT20
#define RATIO_FLEX_CLEAR_MASK                                         0xFFFFFFFFFFFF00FFULL
#define MSR_IA32_PERF_STS                                             0x00000198
#define N_IA32_PERF_STSP_STATE_TARGET                                 8
#define B_IA32_PERF_STSP_STATE_MASK                                   0xFF
#define MSR_IA32_PERF_CTRL                                            0x00000199
#define N_IA32_PERF_CTRLP_STATE_TARGET                                8
#define B_IA32_PERF_CTRLP_STATE_TARGET                                (0x7F << 8)
#define B_IA32_PERF_CTRL_TURBO_DIS                                    BIT32
#define MSR_IA32_CLOCK_MODULATION                                     0x0000019A
#define IA32_THERM_INTERRUPT                                          0x0000019B
#define B_IA32_THERM_INTERRUPT_VIE                                    BIT4
#define MSR_IA32_THERM_STATUS                                         0x0000019C
#define MSR_IA32_MISC_ENABLE                                          0x000001A0
#define B_MSR_IA32_MISC_ENABLE_FSE                                    BIT0
#define B_MSR_IA32_MISC_ENABLE_TME                                    BIT3
#define N_MSR_IA32_MISC_ENABLE_EIST_OFFSET                            16
#define B_MSR_IA32_MISC_ENABLE_EIST                                   BIT16
#define B_MSR_IA32_MISC_ENABLE_MONITOR                                BIT18
#define B_MSR_IA32_MISC_ENABLE_CPUID_MAX                              BIT22
#define B_MSR_IA32_MISC_ENABLE_TPR_DIS                                BIT23
#define B_MSR_IA32_MISC_ENABLE_XD                                     BIT34
#define B_MSR_IA32_MISC_DISABLE_TURBO                                 BIT38
#define MSR_TEMPERATURE_TARGET                                        0x000001A2
#define N_MSR_TEMPERATURE_TARGET_TCC_OFFSET_LIMIT                     24
#define N_MSR_TEMPERATURE_TARGET_TCC_ACTIVATION_TEMPERATURE_OFFSET    (16)
#define B_MSR_TEMPERATURE_TARGET_TCC_ACTIVATION_TEMPERATURE_MASK      (0xFF << 16)
#define N_MSR_TEMPERATURE_TARGET_FAN_TEMP_TARGET_OFFSET               8
#define B_MSR_TEMPERATURE_TARGET_FAN_TEMP_TARGET_OFFSET               (0xFF << 8)
#define MISC_FEATURE_CONTROL                                          0x000001A4
#define B_MISC_FEATURE_CONTROL_MLC_STRP                               BIT0
#define B_MISC_FEATURE_CONTROL_MLC_SPAP                               BIT1
#define B_MISC_FEATURE_CONTROL_DCU_STRP                               BIT2
#define B_MISC_FEATURE_CONTROL_DCU_IPP                                BIT3
#define MSR_MISC_PWR_MGMT                                             0x000001AA
#define B_MSR_MISC_PWR_MGMT_EIST_HW                                   BIT0
#define B_MSR_MISC_PWR_MGMT_LTMI                                      BIT22
#define MSR_TURBO_POWER_CURRENT_LIMIT                                 0x000001AC
#define B_MSR_TURBO_POWER_CURRENT_LIMIT_TDC_EN                        BIT31
#define N_MSR_TURBO_POWER_CURRENT_LIMIT_TDC_LIMIT                     16
#define B_MSR_TURBO_POWER_CURRENT_LIMIT_TDC_LIMIT                     (0x7F << 16)
#define B_MSR_TURBO_POWER_CURRENT_LIMIT_TDP_EN                        BIT15
#define N_MSR_TURBO_POWER_CURRENT_LIMIT_TDP_LIMIT                     0
#define B_MSR_TURBO_POWER_CURRENT_LIMIT_TDP_LIMIT                     (0x7F << 0)
#define MSR_TURBO_RATIO_LIMIT                                         0x000001AD
#define N_MSR_TURBO_RATIO_LIMIT_1C                                    0
#define B_MSR_TURBO_RATIO_LIMIT_1C                                    (0xFF << 0)
#define N_MSR_TURBO_RATIO_LIMIT_2C                                    8
#define B_MSR_TURBO_RATIO_LIMIT_2C                                    (0xFF << 8)
#define N_MSR_TURBO_RATIO_LIMIT_3C                                    16
#define B_MSR_TURBO_RATIO_LIMIT_3C                                    (0xFF << 16)
#define N_MSR_TURBO_RATIO_LIMIT_4C                                    24
#define B_MSR_TURBO_RATIO_LIMIT_4C                                    (0xFF << 24)
#define MSR_IA32_ENERGY_PERFORMANCE_BIAS                              0x1B0
#define B_ENERGY_POLICY_MASK                                          0xF
#define MSR_IA32_PLATFORM_DCA_CAP                                     0x000001F8
#define B_MSR_IA32_PLATFORM_DCA_CAP_TYPE0_EN                          BIT0
#define MSR_IA32_CPU_DCA_CAP                                          0x000001F9
#define B_MSR_IA32_CPU_DCA_CAP_TYPE0_SUP                              BIT0
#define MSR_IA32_DCA_0_CAP                                            0x000001FA
#define B_MSR_IA32_CPU_DCA_CAP_ENDID                                  BIT11
#define N_MSR_IA32_CPU_DCA_CAP_DELAY                                  13
#define B_MSR_IA32_CPU_DCA_CAP_DELAY                                  (BIT13 | BIT14 | BIT15 | BIT16)
#define B_MSR_IA32_CPU_DCA_CAP_SW_LOCK                                BIT24
#define B_MSR_IA32_CPU_DCA_CAP_SW_FLUSH                               BIT25
#define B_MSR_IA32_CPU_DCA_CAP_HW_LOCK                                BIT26
#define MSR_POWER_CTL                                                 0x000001FC
#define B_MSR_POWER_CTL_BROCHOT                                       BIT0
#define B_MSR_POWER_CTL_C1E                                           BIT1
#define B_ENERGY_EFFICIENT_P_STATE_FEATURE_ENABLE                     BIT18
#define B_MSR_POWER_CTL_DISABLE_PHOT_OUT                              BIT21
#define B_MSR_POWER_CTL_PROC_HOT_RESPONSE                             BIT22
#define B_MSR_POWER_CTL_PROC_HOT_LOCK                                 BIT23
#define B_MSR_POWER_CTL_DISABLE_VR_THERMAL_ALERT                      BIT24
#define B_MSR_POWER_CTL_CSTATE_PRE_WAKE_DISABLE                       BIT30
#define MSR_FERR_CAPABILITIES                                         0x000001F1
#define B_MSR_FERR_ENABLE                                             BIT0
#define MSR_VR_CURRENT_CONFIG                                         0x00000601
#define B_CURRENT_LIMIT_LOCK                                          BIT31
#define B_CURRENT_LIMIT_MASK                                          0x1FFF
#define MSR_VR_MISC_CONFIG                                            0x603
#define N_MSR_VR_MISC_CONFIG_MIN_VID_OFFSET                           24
#define B_MSR_VR_MISC_CONFIG_MIN_VID_MASK                             0xFF
#define V_MSR_VR_MISC_CONFIG_MIN_VID_DEFAULT                          0
#define N_MSR_VR_MISC_CONFIG_IDLE_EXIT_RAMP_RATE_OFFSET               50
#define B_MSR_VR_MISC_CONFIG_IDLE_EXIT_RAMP_RATE                      BIT50
#define N_MSR_VR_MISC_CONFIG_IDLE_ENTRY_RAMP_RATE_OFFSET              51
#define B_MSR_VR_MISC_CONFIG_IDLE_ENTRY_RAMP_RATE                     BIT51
#define N_MSR_VR_MISC_CONFIG_IDLE_ENTRY_DECAY_ENABLE_OFFSET           52
#define B_MSR_VR_MISC_CONFIG_IDLE_ENTRY_DECAY_ENABLE                  BIT52
#define N_MSR_VR_MISC_CONFIG_SLOW_SLEW_RATE_CONFIG_OFFSET             53
#define B_MSR_VR_MISC_CONFIG_SLOW_SLEW_RATE_CONFIG_MASK               (BIT54 | BIT53)
#define V_MSR_VR_MISC_CONFIG_SLOW_SLEW_RATE_CONFIG_DEFAULT            1
#define V_MSR_VR_MISC_CONFIG_SLOW_SLEW_RATE_CONFIG_FAST_2             0
#define V_MSR_VR_MISC_CONFIG_SLOW_SLEW_RATE_CONFIG_FAST_4             BIT53
#define V_MSR_VR_MISC_CONFIG_SLOW_SLEW_RATE_CONFIG_FAST_8             BIT54
#define V_MSR_VR_MISC_CONFIG_SLOW_SLEW_RATE_CONFIG_FAST_16            (BIT54 | BIT53)
#define MSR_VR_MISC_CONFIG2                                           0x636
#define N_MSR_VR_MISC_CONFIG2_FAST_RAMP_VOLTAGE_OFFSET                0
#define B_MSR_VR_MISC_CONFIG2_FAST_RAMP_VOLTAGE_MASK                  0xFF
#define V_MSR_VR_MISC_CONFIG2_FAST_RAMP_VOLTAGE_DEFAULT               0x6F
#define N_MSR_VR_MISC_CONFIG2_MIN_C8_VOLTAGE_OFFSET                   8
#define B_MSR_VR_MISC_CONFIG2_MIN_C8_VOLTAGE_MASK                     0xFF
#define V_MSR_VR_MISC_CONFIG2_MIN_C8_VOLTAGE_DEFAULT                  0
#define MSR_PACKAGE_POWER_SKU_UNIT                                    0x606
#define PACKAGE_POWER_UNIT_MASK                                       0xF
#define PACKAGE_TIME_UNIT_MASK                                        0xF0000
#define MSR_C_STATE_LATENCY_CONTROL_0                                 0x60A
#define MSR_C_STATE_LATENCY_CONTROL_1                                 0x60B
#define MSR_C_STATE_LATENCY_CONTROL_2                                 0x60C
#define MSR_C_STATE_LATENCY_CONTROL_3                                 0x633
#define MSR_C_STATE_LATENCY_CONTROL_4                                 0x634
#define MSR_C_STATE_LATENCY_CONTROL_5                                 0x635
#define B_PKG_IRTL_VALID                                              BIT15
#define B_INTERRUPT_RESPONSE_TIME_LIMIT_MASK                          0x3FF
#define B_TIME_UNIT_MASK                                              (0x7 << 10)
#define N_TIME_UNIT_OFFSET                                            10
#define MSR_PACKAGE_POWER_LIMIT                                       0x610
#define MSR_PACKAGE_POWER_SKU                                         0x614
#define B_POWER_LIMIT_ENABLE                                          BIT15
#define B_CRITICAL_POWER_CLAMP_ENABLE                                 BIT16
#define B_POWER_LIMIT_LOCK                                            BIT31
#define POWER_LIMIT_MASK                                              (0x7FFF)
#define POWER_LIMIT_1_TIME_MASK                                       (0xFE0000)
#define PACKAGE_TDP_POWER_MASK                                        (0x7FFF)
#define PACKAGE_MIN_POWER_MASK                                        (0x7FFF0000)
#define PACKAGE_MAX_POWER_MASK                                        (0x7FFF)
#define MSR_PLATFORM_POWER_LIMIT                                      0x615
#define POWER_LIMIT_3_TIME_MASK                                       (0xFE0000)
#define POWER_LIMIT_3_DUTY_CYCLE_MASK                                 (0x7F000000)
#define MSR_DDR_RAPL_LIMIT                                            0x618
#define MSR_RING_RATIO_LIMIT                                          0x620
#define MSR_MAX_RING_RATIO_LIMIT_MASK                                 0x7F
#define MSR_CONFIG_TDP_NOMINAL                                        0x648
#define CONFIG_TDP_NOMINAL_RATIO_MASK                                 0xFF
#define MSR_CONFIG_TDP_LVL1                                           0x649
#define CONFIG_TDP_LVL1_RATIO_OFFSET                                  16
#define CONFIG_TDP_LVL1_RATIO_MASK                                    (0xFF << 16)
#define CONFIG_TDP_LVL1_PKG_TDP_MASK                                  (0x7FFF)
#define MSR_CONFIG_TDP_LVL2                                           0x64A
#define CONFIG_TDP_LVL2_RATIO_OFFSET                                  16
#define CONFIG_TDP_LVL2_RATIO_MASK                                    (0xFF << 16)
#define CONFIG_TDP_LVL2_PKG_TDP_MASK                                  (0x7FFF)
#define MSR_CONFIG_TDP_CONTROL                                        0x64B
#define CONFIG_TDP_CONTROL_LOCK                                       (1 << 31)
#define CONFIG_TDP_CONTROL_LVL_MASK                                   0x3
#define CONFIG_TDP_NOMINAL                                            0
#define CONFIG_TDP_LEVEL1                                             1
#define CONFIG_TDP_LEVEL2                                             2
#define MSR_TURBO_ACTIVATION_RATIO                                    0x64C
#define MSR_TURBO_ACTIVATION_RATIO_LOCK                               (1 << 31)
#define MSR_TURBO_ACTIVATION_RATIO_MASK                               0xFF
#define SMRR_PHYS_BASE                                                0x000001F2
#define SMRR_PHYS_MASK                                                0x000001F3
#define EMRR_PHYS_BASE                                                0x000001F4
#define EMRR_PHYS_MASK                                                0x000001F5
#define B_MSR_EMRR_PHYS_MASK_EN                                       BIT11
#define B_MSR_EMRR_PHYS_MASK_LOCK                                     BIT10
#define V_MAXIMUM_VARIABLE_MTRR_NUMBER                                10
#define CACHE_VARIABLE_MTRR_BASE                                      0x00000200
#define V_FIXED_MTRR_NUMBER                                           11
#define IA32_MTRR_FIX64K_00000                                        0x00000250
#define IA32_MTRR_FIX16K_80000                                        0x00000258
#define IA32_MTRR_FIX16K_A0000                                        0x00000259
#define IA32_MTRR_FIX4K_C0000                                         0x00000268
#define IA32_MTRR_FIX4K_C8000                                         0x00000269
#define IA32_MTRR_FIX4K_D0000                                         0x0000026A
#define IA32_MTRR_FIX4K_D8000                                         0x0000026B
#define IA32_MTRR_FIX4K_E0000                                         0x0000026C
#define IA32_MTRR_FIX4K_E8000                                         0x0000026D
#define IA32_MTRR_FIX4K_F0000                                         0x0000026E
#define IA32_MTRR_FIX4K_F8000                                         0x0000026F
#define MSR_IA32_CR_PAT                                               0x00000277
#define CACHE_IA32_MTRR_DEF_TYPE                                      0x000002FF
#define B_CACHE_MTRR_VALID                                            BIT11
#define B_CACHE_FIXED_MTRR_VALID                                      BIT10
#define NO_EVICT_MODE                                                 0x000002E0
#define B_NO_EVICT_MODE_SETUP                                         BIT0
#define B_NO_EVICT_MODE_RUN                                           BIT1
#define UNCORE_CR_MEMLOCK_COMMANDS                                    0x000002E2
#define B_LOCK_MEM_CFG                                                BIT1
#define EFI_PCIEXBAR                                                  0x00000300
#define B_PCIEXBAR_EN                                                 BIT0
#define B_PCIEXBAR_SIZE                                               (BIT1 | BIT2 | BIT3)
#define N_PCIEXBAR_SIZE                                               1
#define IA32_MC0_CTL                                                  0x00000400
#define IA32_MC0_STATUS                                               0x00000401
#define IA32_MC0_ADDR                                                 0x00000402
#define IA32_MC0_MISC                                                 0x00000403
#define IA32_MC8_CTL                                                  (IA32_MC0_CTL + (8 * 4))
#define IA32_MC5_STATUS                                               (IA32_MC0_STATUS + (5 * 4))
#define IA32_MC6_STATUS                                               (IA32_MC0_STATUS + (6 * 4))
#define IA32_MC7_STATUS                                               (IA32_MC0_STATUS + (7 * 4))
#define IA32_MC8_STATUS                                               (IA32_MC0_STATUS + (8 * 4))
#define MSR_IA32_VMX_BASIC                                            0x00000480
#define MSR_IA32_VMX_MISC                                             0x00000485
#define APIC_GLOBAL_ENABLE                                            0x00000800
#define EXT_XAPIC_LOGICAL_APIC_ID                                     0x00000802
#define EXT_XAPIC_VERSION                                             0x00000803
#define EXT_XAPIC_SVR                                                 0x0000080F
#define EXT_XAPIC_ICR                                                 0x00000830
#define MSR_EXT_XAPIC_LVT_THERM                                       0x00000833
#define EXT_XAPIC_LVT_LINT0                                           0x00000835
#define EXT_XAPIC_LVT_LINT1                                           0x00000836
#define MSR_IA32_DEBUG_INTERFACE                                      0x00000C80
#define B_DEBUG_INTERFACE_ENABLE                                      BIT0
#define B_DEBUG_INTERFACE_LOCK                                        BIT30
#define B_DEBUG_INTERFACE_DEBUG_STATUS                                BIT31
#define NUM_TENTHS_TO_PERCENTAGE                                      1000
#define FIVR_SSC_LOCK_BIT                                             BIT31
#define MAX_FIVR_SSC_PERCENT                                          70
//
// MSRs for SMM State Save Register
//
#define MSR_SMM_MCA_CAP                                               0x17D
#define B_TARGETED_SMI                                                BIT56
#define N_TARGETED_SMI                                                56
#define B_SMM_CPU_SVRSTR                                              BIT57
#define N_SMM_CPU_SVRSTR                                              57
#define B_SMM_CODE_ACCESS_CHK                                         BIT58
#define N_SMM_CODE_ACCESS_CHK                                         58
#define B_LONG_FLOW_INDICATION                                        BIT59
#define N_LONG_FLOW_INDICATION                                        59
#define MSR_SMM_FEATURE_CONTROL                                       0x4E0
#define B_SMM_FEATURE_CONTROL_LOCK                                    BIT0
#define B_SMM_CPU_SAVE_EN                                             BIT1
#define B_SMM_CODE_CHK_EN                                             BIT2
#define MSR_SMM_ENABLE                                                0x4E1
#define MSR_SMM_DELAYED                                               0x4E2
#define MSR_SMM_BLOCKED                                               0x4E3
#define MSR_CR0                                                       0xC00
#define MSR_CR3                                                       0xC01
#define MSR_EFLAGS                                                    0xC02
#define MSR_RIP                                                       0xC04
#define MSR_DR6                                                       0xC05
#define MSR_DR7                                                       0xC06
#define MSR_TR_LDTR                                                   0xC07
#define MSR_GS_FS                                                     0xC08
#define MSR_DS_SS                                                     0xC09
#define MSR_CS_ES                                                     0xC0A
#define MSR_IO_MISC_INFO                                              0xC0B
#define MSR_IO_MEM_ADDR                                               0xC0C
#define MSR_RDI                                                       0xC0D
#define MSR_RSI                                                       0xC0E
#define MSR_RBP                                                       0xC0F
#define MSR_RSP                                                       0xC10
#define MSR_RBX                                                       0xC11
#define MSR_RDX                                                       0xC12
#define MSR_RCX                                                       0xC13
#define MSR_RAX                                                       0xC14
#define MSR_R8                                                        0xC15
#define MSR_R9                                                        0xC16
#define MSR_R10                                                       0xC17
#define MSR_R11                                                       0xC18
#define MSR_R12                                                       0xC19
#define MSR_R13                                                       0xC1A
#define MSR_R14                                                       0xC1B
#define MSR_R15                                                       0xC1C
#define MSR_EVENT_CTL_HLT_IO                                          0xC1F
#define MSR_SMBASE                                                    0xC20
#define MSR_SMM_REVID                                                 0xC21
#define MSR_IEDBASE                                                   0xC22
#define MSR_EPTP_ENABLE                                               0xC23
#define MSR_EPTP                                                      0xC24
#define MSR_LDTR_BASE                                                 0xC2C
#define MSR_IDTR_BASE                                                 0xC2D
#define MSR_GDTR_BASE                                                 0xC2E
#define MSR_CR4                                                       0xC37
#define MSR_IO_RSI                                                    0xC40
#define MSR_IO_RCX                                                    0xC41
#define MSR_IO_RIP                                                    0xC42
#define MSR_IO_RDI                                                    0xC43
#define MSR_BC_PBEC                                                   0x139
#define B_STOP_PBET                                                   BIT0

#define MSR_BOOT_GUARD_SACM_INFO                                      0x13A
#define B_NEM_INIT                                                    BIT0
#define V_TPM_PRESENT_MASK                                            0x06
#define V_TPM_PRESENT_NO_TPM                                          0
#define V_TPM_PRESENT_DTPM_12                                         1
#define V_TPM_PRESENT_DTPM_20                                         2
#define V_TPM_PRESENT_PTT                                             3
#define B_TPM_SUCCESS                                                 BIT3
#define B_MEASURED                                                    BIT5
#define B_VERIFIED                                                    BIT6
#define TXT_PUBLIC_BASE                                               0xFED30000
#define R_CPU_BOOT_GUARD_ERRORCODE                                    0x30
#define R_CPU_BOOT_GUARD_BOOTSTATUS                                   0xA0
#define R_CPU_BOOT_GUARD_ACM_STATUS                                   0x328
#define V_CPU_BOOT_GUARD_LOAD_ACM_SUCCESS                             0x8000000000000000
#define B_BOOT_GUARD_ACM_ERRORCODE_MASK                               0x00007FF0

//
// Processor Definitions
//
#define CPUID_FULL_STEPPING                   0x0000000F
#define CPUID_FULL_FAMILY_MODEL               0x0FFF0FF0
#define CPUID_FULL_FAMILY_MODEL_STEPPING      0x0FFF0FFF
#define CPUID_FULL_FAMILY_MODEL_HASWELL       0x000306C0
#define CPUID_FULL_FAMILY_MODEL_HASWELL_ULT   0x00040650
#define CPUID_FULL_FAMILY_MODEL_CRYSTALWELL   0x00040660

#define CPUID_PROCESSOR_TOPOLOGY              0xB

typedef enum {
  EnumCpuHsw     = CPUID_FULL_FAMILY_MODEL_HASWELL,
  EnumCpuHswUlt  = CPUID_FULL_FAMILY_MODEL_HASWELL_ULT,
  EnumCpuCrw     = CPUID_FULL_FAMILY_MODEL_CRYSTALWELL,
  EnumCpuMax     = CPUID_FULL_FAMILY_MODEL
} CPU_FAMILY;

typedef enum {
  ///
  /// Haswell Family Stepping
  ///
  EnumHswA0         = 1,
  EnumHswB0,
  EnumHswC0,
  EnumHswD0,
  ///
  /// Haswell ULT Family Stepping
  ///
  EnumHswUltB0      = 0,
  EnumHswUltC0,
  ///
  /// Crystalwell Family Stepping
  ///
  EnumCrwB0         = 0,
  EnumCrwC0,
  EnumCrwD0,
  ///
  /// Max Stepping
  ///
  EnumCpuSteppingMax  = CPUID_FULL_STEPPING
} CPU_STEPPING;

typedef enum {
  EnumCpuUlt        = 0,
  EnumCpuTrad,
  EnumCpuUnknown
} CPU_SKU;

#endif