]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Include/Register/Msr/AtomMsr.h
UefiCpuPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / UefiCpuPkg / Include / Register / Msr / AtomMsr.h
CommitLineData
a646000f
MK
1/** @file\r
2 MSR Definitions for the Intel(R) Atom(TM) Processor Family.\r
3\r
4 Provides defines for Machine Specific Registers(MSR) indexes. Data structures\r
5 are provided for MSRs that contain one or more bit fields. If the MSR value\r
6 returned is a single 32-bit or 64-bit value, then a data structure is not\r
7 provided for that MSR.\r
8\r
ba1a2d11 9 Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>\r
0acd8697 10 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a646000f
MK
11\r
12 @par Specification Reference:\r
ba1a2d11
ED
13 Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,\r
14 May 2018, Volume 4: Model-Specific-Registers (MSR)\r
a646000f
MK
15\r
16**/\r
17\r
18#ifndef __ATOM_MSR_H__\r
19#define __ATOM_MSR_H__\r
20\r
21#include <Register/ArchitecturalMsr.h>\r
22\r
f4c982bf
JF
23/**\r
24 Is Intel(R) Atom(TM) Processor Family?\r
25\r
26 @param DisplayFamily Display Family ID\r
27 @param DisplayModel Display Model ID\r
28\r
29 @retval TRUE Yes, it is.\r
30 @retval FALSE No, it isn't.\r
31**/\r
32#define IS_ATOM_PROCESSOR(DisplayFamily, DisplayModel) \\r
33 (DisplayFamily == 0x06 && \\r
34 ( \\r
35 DisplayModel == 0x1C || \\r
36 DisplayModel == 0x26 || \\r
37 DisplayModel == 0x27 || \\r
38 DisplayModel == 0x35 || \\r
39 DisplayModel == 0x36 \\r
40 ) \\r
41 )\r
42\r
a646000f
MK
43/**\r
44 Shared. Model Specific Platform ID (R).\r
45\r
46 @param ECX MSR_ATOM_PLATFORM_ID (0x00000017)\r
47 @param EAX Lower 32-bits of MSR value.\r
48 Described by the type MSR_ATOM_PLATFORM_ID_REGISTER.\r
49 @param EDX Upper 32-bits of MSR value.\r
50 Described by the type MSR_ATOM_PLATFORM_ID_REGISTER.\r
51\r
52 <b>Example usage</b>\r
53 @code\r
54 MSR_ATOM_PLATFORM_ID_REGISTER Msr;\r
55\r
56 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_PLATFORM_ID);\r
57 @endcode\r
800a651d 58 @note MSR_ATOM_PLATFORM_ID is defined as MSR_PLATFORM_ID in SDM.\r
a646000f
MK
59**/\r
60#define MSR_ATOM_PLATFORM_ID 0x00000017\r
61\r
62/**\r
63 MSR information returned for MSR index #MSR_ATOM_PLATFORM_ID\r
64**/\r
65typedef union {\r
66 ///\r
67 /// Individual bit fields\r
68 ///\r
69 struct {\r
70 UINT32 Reserved1:8;\r
71 ///\r
72 /// [Bits 12:8] Maximum Qualified Ratio (R) The maximum allowed bus ratio.\r
73 ///\r
74 UINT32 MaximumQualifiedRatio:5;\r
75 UINT32 Reserved2:19;\r
76 UINT32 Reserved3:32;\r
77 } Bits;\r
78 ///\r
79 /// All bit fields as a 32-bit value\r
80 ///\r
81 UINT32 Uint32;\r
82 ///\r
83 /// All bit fields as a 64-bit value\r
84 ///\r
85 UINT64 Uint64;\r
86} MSR_ATOM_PLATFORM_ID_REGISTER;\r
87\r
88\r
89/**\r
90 Shared. Processor Hard Power-On Configuration (R/W) Enables and disables\r
91 processor features; (R) indicates current processor configuration.\r
92\r
93 @param ECX MSR_ATOM_EBL_CR_POWERON (0x0000002A)\r
94 @param EAX Lower 32-bits of MSR value.\r
95 Described by the type MSR_ATOM_EBL_CR_POWERON_REGISTER.\r
96 @param EDX Upper 32-bits of MSR value.\r
97 Described by the type MSR_ATOM_EBL_CR_POWERON_REGISTER.\r
98\r
99 <b>Example usage</b>\r
100 @code\r
101 MSR_ATOM_EBL_CR_POWERON_REGISTER Msr;\r
102\r
103 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_EBL_CR_POWERON);\r
104 AsmWriteMsr64 (MSR_ATOM_EBL_CR_POWERON, Msr.Uint64);\r
105 @endcode\r
800a651d 106 @note MSR_ATOM_EBL_CR_POWERON is defined as MSR_EBL_CR_POWERON in SDM.\r
a646000f
MK
107**/\r
108#define MSR_ATOM_EBL_CR_POWERON 0x0000002A\r
109\r
110/**\r
111 MSR information returned for MSR index #MSR_ATOM_EBL_CR_POWERON\r
112**/\r
113typedef union {\r
114 ///\r
115 /// Individual bit fields\r
116 ///\r
117 struct {\r
118 UINT32 Reserved1:1;\r
119 ///\r
120 /// [Bit 1] Data Error Checking Enable (R/W) 1 = Enabled; 0 = Disabled\r
121 /// Always 0.\r
122 ///\r
123 UINT32 DataErrorCheckingEnable:1;\r
124 ///\r
125 /// [Bit 2] Response Error Checking Enable (R/W) 1 = Enabled; 0 = Disabled\r
126 /// Always 0.\r
127 ///\r
128 UINT32 ResponseErrorCheckingEnable:1;\r
129 ///\r
130 /// [Bit 3] AERR# Drive Enable (R/W) 1 = Enabled; 0 = Disabled Always 0.\r
131 ///\r
132 UINT32 AERR_DriveEnable:1;\r
133 ///\r
134 /// [Bit 4] BERR# Enable for initiator bus requests (R/W) 1 = Enabled; 0 =\r
135 /// Disabled Always 0.\r
136 ///\r
137 UINT32 BERR_Enable:1;\r
138 UINT32 Reserved2:1;\r
139 UINT32 Reserved3:1;\r
140 ///\r
141 /// [Bit 7] BINIT# Driver Enable (R/W) 1 = Enabled; 0 = Disabled Always 0.\r
142 ///\r
143 UINT32 BINIT_DriverEnable:1;\r
144 UINT32 Reserved4:1;\r
145 ///\r
146 /// [Bit 9] Execute BIST (R/O) 1 = Enabled; 0 = Disabled.\r
147 ///\r
148 UINT32 ExecuteBIST:1;\r
149 ///\r
150 /// [Bit 10] AERR# Observation Enabled (R/O) 1 = Enabled; 0 = Disabled\r
151 /// Always 0.\r
152 ///\r
153 UINT32 AERR_ObservationEnabled:1;\r
154 UINT32 Reserved5:1;\r
155 ///\r
156 /// [Bit 12] BINIT# Observation Enabled (R/O) 1 = Enabled; 0 = Disabled\r
157 /// Always 0.\r
158 ///\r
159 UINT32 BINIT_ObservationEnabled:1;\r
160 UINT32 Reserved6:1;\r
161 ///\r
162 /// [Bit 14] 1 MByte Power on Reset Vector (R/O) 1 = 1 MByte; 0 = 4 GBytes.\r
163 ///\r
164 UINT32 ResetVector:1;\r
165 UINT32 Reserved7:1;\r
166 ///\r
167 /// [Bits 17:16] APIC Cluster ID (R/O) Always 00B.\r
168 ///\r
169 UINT32 APICClusterID:2;\r
170 UINT32 Reserved8:2;\r
171 ///\r
172 /// [Bits 21:20] Symmetric Arbitration ID (R/O) Always 00B.\r
173 ///\r
174 UINT32 SymmetricArbitrationID:2;\r
175 ///\r
176 /// [Bits 26:22] Integer Bus Frequency Ratio (R/O).\r
177 ///\r
178 UINT32 IntegerBusFrequencyRatio:5;\r
179 UINT32 Reserved9:5;\r
180 UINT32 Reserved10:32;\r
181 } Bits;\r
182 ///\r
183 /// All bit fields as a 32-bit value\r
184 ///\r
185 UINT32 Uint32;\r
186 ///\r
187 /// All bit fields as a 64-bit value\r
188 ///\r
189 UINT64 Uint64;\r
190} MSR_ATOM_EBL_CR_POWERON_REGISTER;\r
191\r
192\r
193/**\r
0f16be6d
HW
194 Unique. Last Branch Record n From IP (R/W) One of eight pairs of last branch\r
195 record registers on the last branch record stack. The From_IP part of the\r
196 stack contains pointers to the source instruction . See also: - Last Branch\r
197 Record Stack TOS at 1C9H - Section 17.5.\r
a646000f
MK
198\r
199 @param ECX MSR_ATOM_LASTBRANCH_n_FROM_IP\r
200 @param EAX Lower 32-bits of MSR value.\r
201 @param EDX Upper 32-bits of MSR value.\r
202\r
203 <b>Example usage</b>\r
204 @code\r
205 UINT64 Msr;\r
206\r
207 Msr = AsmReadMsr64 (MSR_ATOM_LASTBRANCH_0_FROM_IP);\r
208 AsmWriteMsr64 (MSR_ATOM_LASTBRANCH_0_FROM_IP, Msr);\r
209 @endcode\r
800a651d
JF
210 @note MSR_ATOM_LASTBRANCH_0_FROM_IP is defined as MSR_LASTBRANCH_0_FROM_IP in SDM.\r
211 MSR_ATOM_LASTBRANCH_1_FROM_IP is defined as MSR_LASTBRANCH_1_FROM_IP in SDM.\r
212 MSR_ATOM_LASTBRANCH_2_FROM_IP is defined as MSR_LASTBRANCH_2_FROM_IP in SDM.\r
213 MSR_ATOM_LASTBRANCH_3_FROM_IP is defined as MSR_LASTBRANCH_3_FROM_IP in SDM.\r
214 MSR_ATOM_LASTBRANCH_4_FROM_IP is defined as MSR_LASTBRANCH_4_FROM_IP in SDM.\r
215 MSR_ATOM_LASTBRANCH_5_FROM_IP is defined as MSR_LASTBRANCH_5_FROM_IP in SDM.\r
216 MSR_ATOM_LASTBRANCH_6_FROM_IP is defined as MSR_LASTBRANCH_6_FROM_IP in SDM.\r
217 MSR_ATOM_LASTBRANCH_7_FROM_IP is defined as MSR_LASTBRANCH_7_FROM_IP in SDM.\r
a646000f
MK
218 @{\r
219**/\r
220#define MSR_ATOM_LASTBRANCH_0_FROM_IP 0x00000040\r
221#define MSR_ATOM_LASTBRANCH_1_FROM_IP 0x00000041\r
222#define MSR_ATOM_LASTBRANCH_2_FROM_IP 0x00000042\r
223#define MSR_ATOM_LASTBRANCH_3_FROM_IP 0x00000043\r
224#define MSR_ATOM_LASTBRANCH_4_FROM_IP 0x00000044\r
225#define MSR_ATOM_LASTBRANCH_5_FROM_IP 0x00000045\r
226#define MSR_ATOM_LASTBRANCH_6_FROM_IP 0x00000046\r
227#define MSR_ATOM_LASTBRANCH_7_FROM_IP 0x00000047\r
228/// @}\r
229\r
230\r
231/**\r
0f16be6d
HW
232 Unique. Last Branch Record n To IP (R/W) One of eight pairs of last branch\r
233 record registers on the last branch record stack. The To_IP part of the\r
234 stack contains pointers to the destination instruction.\r
a646000f
MK
235\r
236 @param ECX MSR_ATOM_LASTBRANCH_n_TO_IP\r
237 @param EAX Lower 32-bits of MSR value.\r
238 @param EDX Upper 32-bits of MSR value.\r
239\r
240 <b>Example usage</b>\r
241 @code\r
242 UINT64 Msr;\r
243\r
244 Msr = AsmReadMsr64 (MSR_ATOM_LASTBRANCH_0_TO_IP);\r
245 AsmWriteMsr64 (MSR_ATOM_LASTBRANCH_0_TO_IP, Msr);\r
246 @endcode\r
800a651d
JF
247 @note MSR_ATOM_LASTBRANCH_0_TO_IP is defined as MSR_LASTBRANCH_0_TO_IP in SDM.\r
248 MSR_ATOM_LASTBRANCH_1_TO_IP is defined as MSR_LASTBRANCH_1_TO_IP in SDM.\r
249 MSR_ATOM_LASTBRANCH_2_TO_IP is defined as MSR_LASTBRANCH_2_TO_IP in SDM.\r
250 MSR_ATOM_LASTBRANCH_3_TO_IP is defined as MSR_LASTBRANCH_3_TO_IP in SDM.\r
251 MSR_ATOM_LASTBRANCH_4_TO_IP is defined as MSR_LASTBRANCH_4_TO_IP in SDM.\r
252 MSR_ATOM_LASTBRANCH_5_TO_IP is defined as MSR_LASTBRANCH_5_TO_IP in SDM.\r
253 MSR_ATOM_LASTBRANCH_6_TO_IP is defined as MSR_LASTBRANCH_6_TO_IP in SDM.\r
254 MSR_ATOM_LASTBRANCH_7_TO_IP is defined as MSR_LASTBRANCH_7_TO_IP in SDM.\r
a646000f
MK
255 @{\r
256**/\r
257#define MSR_ATOM_LASTBRANCH_0_TO_IP 0x00000060\r
258#define MSR_ATOM_LASTBRANCH_1_TO_IP 0x00000061\r
259#define MSR_ATOM_LASTBRANCH_2_TO_IP 0x00000062\r
260#define MSR_ATOM_LASTBRANCH_3_TO_IP 0x00000063\r
261#define MSR_ATOM_LASTBRANCH_4_TO_IP 0x00000064\r
262#define MSR_ATOM_LASTBRANCH_5_TO_IP 0x00000065\r
263#define MSR_ATOM_LASTBRANCH_6_TO_IP 0x00000066\r
264#define MSR_ATOM_LASTBRANCH_7_TO_IP 0x00000067\r
265/// @}\r
266\r
267\r
268/**\r
269 Shared. Scalable Bus Speed(RO) This field indicates the intended scalable\r
270 bus clock speed for processors based on Intel Atom microarchitecture:.\r
271\r
272 @param ECX MSR_ATOM_FSB_FREQ (0x000000CD)\r
273 @param EAX Lower 32-bits of MSR value.\r
274 Described by the type MSR_ATOM_FSB_FREQ_REGISTER.\r
275 @param EDX Upper 32-bits of MSR value.\r
276 Described by the type MSR_ATOM_FSB_FREQ_REGISTER.\r
277\r
278 <b>Example usage</b>\r
279 @code\r
280 MSR_ATOM_FSB_FREQ_REGISTER Msr;\r
281\r
282 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_FSB_FREQ);\r
283 @endcode\r
800a651d 284 @note MSR_ATOM_FSB_FREQ is defined as MSR_FSB_FREQ in SDM.\r
a646000f
MK
285**/\r
286#define MSR_ATOM_FSB_FREQ 0x000000CD\r
287\r
288/**\r
289 MSR information returned for MSR index #MSR_ATOM_FSB_FREQ\r
290**/\r
291typedef union {\r
292 ///\r
293 /// Individual bit fields\r
294 ///\r
295 struct {\r
296 ///\r
297 /// [Bits 2:0] - Scalable Bus Speed\r
298 ///\r
299 /// Atom Processor Family\r
300 /// ---------------------\r
301 /// 111B: 083 MHz (FSB 333)\r
302 /// 101B: 100 MHz (FSB 400)\r
303 /// 001B: 133 MHz (FSB 533)\r
304 /// 011B: 167 MHz (FSB 667)\r
305 ///\r
306 /// 133.33 MHz should be utilized if performing calculation with\r
307 /// System Bus Speed when encoding is 001B.\r
308 /// 166.67 MHz should be utilized if performing calculation with\r
309 /// System Bus Speed when\r
310 /// encoding is 011B.\r
311 ///\r
312 UINT32 ScalableBusSpeed:3;\r
313 UINT32 Reserved1:29;\r
314 UINT32 Reserved2:32;\r
315 } Bits;\r
316 ///\r
317 /// All bit fields as a 32-bit value\r
318 ///\r
319 UINT32 Uint32;\r
320 ///\r
321 /// All bit fields as a 64-bit value\r
322 ///\r
323 UINT64 Uint64;\r
324} MSR_ATOM_FSB_FREQ_REGISTER;\r
325\r
326\r
327/**\r
328 Shared.\r
329\r
330 @param ECX MSR_ATOM_BBL_CR_CTL3 (0x0000011E)\r
331 @param EAX Lower 32-bits of MSR value.\r
332 Described by the type MSR_ATOM_BBL_CR_CTL3_REGISTER.\r
333 @param EDX Upper 32-bits of MSR value.\r
334 Described by the type MSR_ATOM_BBL_CR_CTL3_REGISTER.\r
335\r
336 <b>Example usage</b>\r
337 @code\r
338 MSR_ATOM_BBL_CR_CTL3_REGISTER Msr;\r
339\r
340 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_BBL_CR_CTL3);\r
341 AsmWriteMsr64 (MSR_ATOM_BBL_CR_CTL3, Msr.Uint64);\r
342 @endcode\r
800a651d 343 @note MSR_ATOM_BBL_CR_CTL3 is defined as MSR_BBL_CR_CTL3 in SDM.\r
a646000f
MK
344**/\r
345#define MSR_ATOM_BBL_CR_CTL3 0x0000011E\r
346\r
347/**\r
348 MSR information returned for MSR index #MSR_ATOM_BBL_CR_CTL3\r
349**/\r
350typedef union {\r
351 ///\r
352 /// Individual bit fields\r
353 ///\r
354 struct {\r
355 ///\r
356 /// [Bit 0] L2 Hardware Enabled (RO) 1 = If the L2 is hardware-enabled 0 =\r
357 /// Indicates if the L2 is hardware-disabled.\r
358 ///\r
359 UINT32 L2HardwareEnabled:1;\r
360 UINT32 Reserved1:7;\r
361 ///\r
362 /// [Bit 8] L2 Enabled. (R/W) 1 = L2 cache has been initialized 0 =\r
363 /// Disabled (default) Until this bit is set the processor will not\r
364 /// respond to the WBINVD instruction or the assertion of the FLUSH# input.\r
365 ///\r
366 UINT32 L2Enabled:1;\r
367 UINT32 Reserved2:14;\r
368 ///\r
369 /// [Bit 23] L2 Not Present (RO) 1. = L2 Present 2. = L2 Not Present.\r
370 ///\r
371 UINT32 L2NotPresent:1;\r
372 UINT32 Reserved3:8;\r
373 UINT32 Reserved4:32;\r
374 } Bits;\r
375 ///\r
376 /// All bit fields as a 32-bit value\r
377 ///\r
378 UINT32 Uint32;\r
379 ///\r
380 /// All bit fields as a 64-bit value\r
381 ///\r
382 UINT64 Uint64;\r
383} MSR_ATOM_BBL_CR_CTL3_REGISTER;\r
384\r
385\r
386/**\r
387 Shared.\r
388\r
389 @param ECX MSR_ATOM_PERF_STATUS (0x00000198)\r
390 @param EAX Lower 32-bits of MSR value.\r
391 Described by the type MSR_ATOM_PERF_STATUS_REGISTER.\r
392 @param EDX Upper 32-bits of MSR value.\r
393 Described by the type MSR_ATOM_PERF_STATUS_REGISTER.\r
394\r
395 <b>Example usage</b>\r
396 @code\r
397 MSR_ATOM_PERF_STATUS_REGISTER Msr;\r
398\r
399 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_PERF_STATUS);\r
400 AsmWriteMsr64 (MSR_ATOM_PERF_STATUS, Msr.Uint64);\r
401 @endcode\r
800a651d 402 @note MSR_ATOM_PERF_STATUS is defined as MSR_PERF_STATUS in SDM.\r
a646000f
MK
403**/\r
404#define MSR_ATOM_PERF_STATUS 0x00000198\r
405\r
406/**\r
407 MSR information returned for MSR index #MSR_ATOM_PERF_STATUS\r
408**/\r
409typedef union {\r
410 ///\r
411 /// Individual bit fields\r
412 ///\r
413 struct {\r
414 ///\r
415 /// [Bits 15:0] Current Performance State Value.\r
416 ///\r
417 UINT32 CurrentPerformanceStateValue:16;\r
418 UINT32 Reserved1:16;\r
419 UINT32 Reserved2:8;\r
420 ///\r
421 /// [Bits 44:40] Maximum Bus Ratio (R/O) Indicates maximum bus ratio\r
422 /// configured for the processor.\r
423 ///\r
424 UINT32 MaximumBusRatio:5;\r
425 UINT32 Reserved3:19;\r
426 } Bits;\r
427 ///\r
428 /// All bit fields as a 64-bit value\r
429 ///\r
430 UINT64 Uint64;\r
431} MSR_ATOM_PERF_STATUS_REGISTER;\r
432\r
433\r
434/**\r
435 Shared.\r
436\r
437 @param ECX MSR_ATOM_THERM2_CTL (0x0000019D)\r
438 @param EAX Lower 32-bits of MSR value.\r
439 Described by the type MSR_ATOM_THERM2_CTL_REGISTER.\r
440 @param EDX Upper 32-bits of MSR value.\r
441 Described by the type MSR_ATOM_THERM2_CTL_REGISTER.\r
442\r
443 <b>Example usage</b>\r
444 @code\r
445 MSR_ATOM_THERM2_CTL_REGISTER Msr;\r
446\r
447 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_THERM2_CTL);\r
448 AsmWriteMsr64 (MSR_ATOM_THERM2_CTL, Msr.Uint64);\r
449 @endcode\r
800a651d 450 @note MSR_ATOM_THERM2_CTL is defined as MSR_THERM2_CTL in SDM.\r
a646000f
MK
451**/\r
452#define MSR_ATOM_THERM2_CTL 0x0000019D\r
453\r
454/**\r
455 MSR information returned for MSR index #MSR_ATOM_THERM2_CTL\r
456**/\r
457typedef union {\r
458 ///\r
459 /// Individual bit fields\r
460 ///\r
461 struct {\r
462 UINT32 Reserved1:16;\r
463 ///\r
464 /// [Bit 16] TM_SELECT (R/W) Mode of automatic thermal monitor: 1. =\r
465 /// Thermal Monitor 1 (thermally-initiated on-die modulation of the\r
466 /// stop-clock duty cycle) 2. = Thermal Monitor 2 (thermally-initiated\r
467 /// frequency transitions) If bit 3 of the IA32_MISC_ENABLE register is\r
468 /// cleared, TM_SELECT has no effect. Neither TM1 nor TM2 are enabled.\r
469 ///\r
470 UINT32 TM_SELECT:1;\r
471 UINT32 Reserved2:15;\r
472 UINT32 Reserved3:32;\r
473 } Bits;\r
474 ///\r
475 /// All bit fields as a 32-bit value\r
476 ///\r
477 UINT32 Uint32;\r
478 ///\r
479 /// All bit fields as a 64-bit value\r
480 ///\r
481 UINT64 Uint64;\r
482} MSR_ATOM_THERM2_CTL_REGISTER;\r
483\r
484\r
485/**\r
486 Unique. Enable Misc. Processor Features (R/W) Allows a variety of processor\r
487 functions to be enabled and disabled.\r
488\r
489 @param ECX MSR_ATOM_IA32_MISC_ENABLE (0x000001A0)\r
490 @param EAX Lower 32-bits of MSR value.\r
491 Described by the type MSR_ATOM_IA32_MISC_ENABLE_REGISTER.\r
492 @param EDX Upper 32-bits of MSR value.\r
493 Described by the type MSR_ATOM_IA32_MISC_ENABLE_REGISTER.\r
494\r
495 <b>Example usage</b>\r
496 @code\r
497 MSR_ATOM_IA32_MISC_ENABLE_REGISTER Msr;\r
498\r
499 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_IA32_MISC_ENABLE);\r
500 AsmWriteMsr64 (MSR_ATOM_IA32_MISC_ENABLE, Msr.Uint64);\r
501 @endcode\r
800a651d 502 @note MSR_ATOM_IA32_MISC_ENABLE is defined as IA32_MISC_ENABLE in SDM.\r
a646000f
MK
503**/\r
504#define MSR_ATOM_IA32_MISC_ENABLE 0x000001A0\r
505\r
506/**\r
507 MSR information returned for MSR index #MSR_ATOM_IA32_MISC_ENABLE\r
508**/\r
509typedef union {\r
510 ///\r
511 /// Individual bit fields\r
512 ///\r
513 struct {\r
514 ///\r
ba1a2d11 515 /// [Bit 0] Fast-Strings Enable See Table 2-2.\r
a646000f
MK
516 ///\r
517 UINT32 FastStrings:1;\r
518 UINT32 Reserved1:2;\r
519 ///\r
520 /// [Bit 3] Unique. Automatic Thermal Control Circuit Enable (R/W) See\r
ba1a2d11 521 /// Table 2-2. Default value is 0.\r
a646000f
MK
522 ///\r
523 UINT32 AutomaticThermalControlCircuit:1;\r
524 UINT32 Reserved2:3;\r
525 ///\r
ba1a2d11 526 /// [Bit 7] Shared. Performance Monitoring Available (R) See Table 2-2.\r
a646000f
MK
527 ///\r
528 UINT32 PerformanceMonitoring:1;\r
529 UINT32 Reserved3:1;\r
530 UINT32 Reserved4:1;\r
531 ///\r
532 /// [Bit 10] Shared. FERR# Multiplexing Enable (R/W) 1 = FERR# asserted by\r
533 /// the processor to indicate a pending break event within the processor 0\r
534 /// = Indicates compatible FERR# signaling behavior This bit must be set\r
535 /// to 1 to support XAPIC interrupt model usage.\r
536 ///\r
537 UINT32 FERR:1;\r
538 ///\r
ba1a2d11 539 /// [Bit 11] Shared. Branch Trace Storage Unavailable (RO) See Table 2-2.\r
a646000f
MK
540 ///\r
541 UINT32 BTS:1;\r
542 ///\r
0f16be6d 543 /// [Bit 12] Shared. Processor Event Based Sampling Unavailable (RO) See\r
ba1a2d11 544 /// Table 2-2.\r
a646000f
MK
545 ///\r
546 UINT32 PEBS:1;\r
547 ///\r
548 /// [Bit 13] Shared. TM2 Enable (R/W) When this bit is set (1) and the\r
549 /// thermal sensor indicates that the die temperature is at the\r
550 /// pre-determined threshold, the Thermal Monitor 2 mechanism is engaged.\r
551 /// TM2 will reduce the bus to core ratio and voltage according to the\r
552 /// value last written to MSR_THERM2_CTL bits 15:0.\r
553 /// When this bit is clear (0, default), the processor does not change\r
554 /// the VID signals or the bus to core ratio when the processor enters a\r
555 /// thermally managed state. The BIOS must enable this feature if the\r
556 /// TM2 feature flag (CPUID.1:ECX[8]) is set; if the TM2 feature flag is\r
557 /// not set, this feature is not supported and BIOS must not alter the\r
558 /// contents of the TM2 bit location. The processor is operating out of\r
559 /// specification if both this bit and the TM1 bit are set to 0.\r
560 ///\r
561 UINT32 TM2:1;\r
562 UINT32 Reserved5:2;\r
563 ///\r
564 /// [Bit 16] Shared. Enhanced Intel SpeedStep Technology Enable (R/W) See\r
ba1a2d11 565 /// Table 2-2.\r
a646000f
MK
566 ///\r
567 UINT32 EIST:1;\r
568 UINT32 Reserved6:1;\r
569 ///\r
ba1a2d11 570 /// [Bit 18] Shared. ENABLE MONITOR FSM (R/W) See Table 2-2.\r
a646000f
MK
571 ///\r
572 UINT32 MONITOR:1;\r
573 UINT32 Reserved7:1;\r
574 ///\r
575 /// [Bit 20] Shared. Enhanced Intel SpeedStep Technology Select Lock\r
576 /// (R/WO) When set, this bit causes the following bits to become\r
577 /// read-only: - Enhanced Intel SpeedStep Technology Select Lock (this\r
578 /// bit), - Enhanced Intel SpeedStep Technology Enable bit. The bit must\r
579 /// be set before an Enhanced Intel SpeedStep Technology transition is\r
580 /// requested. This bit is cleared on reset.\r
581 ///\r
582 UINT32 EISTLock:1;\r
583 UINT32 Reserved8:1;\r
584 ///\r
ba1a2d11 585 /// [Bit 22] Unique. Limit CPUID Maxval (R/W) See Table 2-2.\r
a646000f
MK
586 ///\r
587 UINT32 LimitCpuidMaxval:1;\r
588 ///\r
ba1a2d11 589 /// [Bit 23] Shared. xTPR Message Disable (R/W) See Table 2-2.\r
a646000f
MK
590 ///\r
591 UINT32 xTPR_Message_Disable:1;\r
592 UINT32 Reserved9:8;\r
593 UINT32 Reserved10:2;\r
594 ///\r
ba1a2d11 595 /// [Bit 34] Unique. XD Bit Disable (R/W) See Table 2-2.\r
a646000f
MK
596 ///\r
597 UINT32 XD:1;\r
598 UINT32 Reserved11:29;\r
599 } Bits;\r
600 ///\r
601 /// All bit fields as a 64-bit value\r
602 ///\r
603 UINT64 Uint64;\r
604} MSR_ATOM_IA32_MISC_ENABLE_REGISTER;\r
605\r
606\r
607/**\r
608 Unique. Last Branch Record Stack TOS (R/W) Contains an index (bits 0-2)\r
609 that points to the MSR containing the most recent branch record. See\r
610 MSR_LASTBRANCH_0_FROM_IP (at 40H).\r
611\r
612 @param ECX MSR_ATOM_LASTBRANCH_TOS (0x000001C9)\r
613 @param EAX Lower 32-bits of MSR value.\r
614 @param EDX Upper 32-bits of MSR value.\r
615\r
616 <b>Example usage</b>\r
617 @code\r
618 UINT64 Msr;\r
619\r
620 Msr = AsmReadMsr64 (MSR_ATOM_LASTBRANCH_TOS);\r
621 AsmWriteMsr64 (MSR_ATOM_LASTBRANCH_TOS, Msr);\r
622 @endcode\r
800a651d 623 @note MSR_ATOM_LASTBRANCH_TOS is defined as MSR_LASTBRANCH_TOS in SDM.\r
a646000f
MK
624**/\r
625#define MSR_ATOM_LASTBRANCH_TOS 0x000001C9\r
626\r
627\r
628/**\r
629 Unique. Last Exception Record From Linear IP (R) Contains a pointer to the\r
630 last branch instruction that the processor executed prior to the last\r
631 exception that was generated or the last interrupt that was handled.\r
632\r
633 @param ECX MSR_ATOM_LER_FROM_LIP (0x000001DD)\r
634 @param EAX Lower 32-bits of MSR value.\r
635 @param EDX Upper 32-bits of MSR value.\r
636\r
637 <b>Example usage</b>\r
638 @code\r
639 UINT64 Msr;\r
640\r
641 Msr = AsmReadMsr64 (MSR_ATOM_LER_FROM_LIP);\r
642 @endcode\r
800a651d 643 @note MSR_ATOM_LER_FROM_LIP is defined as MSR_LER_FROM_LIP in SDM.\r
a646000f
MK
644**/\r
645#define MSR_ATOM_LER_FROM_LIP 0x000001DD\r
646\r
647\r
648/**\r
649 Unique. Last Exception Record To Linear IP (R) This area contains a pointer\r
650 to the target of the last branch instruction that the processor executed\r
651 prior to the last exception that was generated or the last interrupt that\r
652 was handled.\r
653\r
654 @param ECX MSR_ATOM_LER_TO_LIP (0x000001DE)\r
655 @param EAX Lower 32-bits of MSR value.\r
656 @param EDX Upper 32-bits of MSR value.\r
657\r
658 <b>Example usage</b>\r
659 @code\r
660 UINT64 Msr;\r
661\r
662 Msr = AsmReadMsr64 (MSR_ATOM_LER_TO_LIP);\r
663 @endcode\r
800a651d 664 @note MSR_ATOM_LER_TO_LIP is defined as MSR_LER_TO_LIP in SDM.\r
a646000f
MK
665**/\r
666#define MSR_ATOM_LER_TO_LIP 0x000001DE\r
667\r
668\r
669/**\r
ba1a2d11 670 Unique. See Table 2-2. See Section 18.6.2.4, "Processor Event Based Sampling\r
a646000f
MK
671 (PEBS).".\r
672\r
673 @param ECX MSR_ATOM_PEBS_ENABLE (0x000003F1)\r
674 @param EAX Lower 32-bits of MSR value.\r
675 Described by the type MSR_ATOM_PEBS_ENABLE_REGISTER.\r
676 @param EDX Upper 32-bits of MSR value.\r
677 Described by the type MSR_ATOM_PEBS_ENABLE_REGISTER.\r
678\r
679 <b>Example usage</b>\r
680 @code\r
681 MSR_ATOM_PEBS_ENABLE_REGISTER Msr;\r
682\r
683 Msr.Uint64 = AsmReadMsr64 (MSR_ATOM_PEBS_ENABLE);\r
684 AsmWriteMsr64 (MSR_ATOM_PEBS_ENABLE, Msr.Uint64);\r
685 @endcode\r
800a651d 686 @note MSR_ATOM_PEBS_ENABLE is defined as MSR_PEBS_ENABLE in SDM.\r
a646000f
MK
687**/\r
688#define MSR_ATOM_PEBS_ENABLE 0x000003F1\r
689\r
690/**\r
691 MSR information returned for MSR index #MSR_ATOM_PEBS_ENABLE\r
692**/\r
693typedef union {\r
694 ///\r
695 /// Individual bit fields\r
696 ///\r
697 struct {\r
698 ///\r
699 /// [Bit 0] Enable PEBS on IA32_PMC0. (R/W).\r
700 ///\r
701 UINT32 Enable:1;\r
702 UINT32 Reserved1:31;\r
703 UINT32 Reserved2:32;\r
704 } Bits;\r
705 ///\r
706 /// All bit fields as a 32-bit value\r
707 ///\r
708 UINT32 Uint32;\r
709 ///\r
710 /// All bit fields as a 64-bit value\r
711 ///\r
712 UINT64 Uint64;\r
713} MSR_ATOM_PEBS_ENABLE_REGISTER;\r
714\r
715\r
a646000f
MK
716/**\r
717 Package. Package C2 Residency Note: C-state values are processor specific\r
718 C-state code names, unrelated to MWAIT extension C-state parameters or ACPI\r
719 C-States. Package. Package C2 Residency Counter. (R/O) Time that this\r
720 package is in processor-specific C2 states since last reset. Counts at 1 Mhz\r
721 frequency.\r
722\r
723 @param ECX MSR_ATOM_PKG_C2_RESIDENCY (0x000003F8)\r
724 @param EAX Lower 32-bits of MSR value.\r
725 @param EDX Upper 32-bits of MSR value.\r
726\r
727 <b>Example usage</b>\r
728 @code\r
729 UINT64 Msr;\r
730\r
731 Msr = AsmReadMsr64 (MSR_ATOM_PKG_C2_RESIDENCY);\r
732 AsmWriteMsr64 (MSR_ATOM_PKG_C2_RESIDENCY, Msr);\r
733 @endcode\r
800a651d 734 @note MSR_ATOM_PKG_C2_RESIDENCY is defined as MSR_PKG_C2_RESIDENCY in SDM.\r
a646000f
MK
735**/\r
736#define MSR_ATOM_PKG_C2_RESIDENCY 0x000003F8\r
737\r
738\r
739/**\r
740 Package. Package C4 Residency Note: C-state values are processor specific\r
741 C-state code names, unrelated to MWAIT extension C-state parameters or ACPI\r
742 C-States. Package. Package C4 Residency Counter. (R/O) Time that this\r
743 package is in processor-specific C4 states since last reset. Counts at 1 Mhz\r
744 frequency.\r
745\r
746 @param ECX MSR_ATOM_PKG_C4_RESIDENCY (0x000003F9)\r
747 @param EAX Lower 32-bits of MSR value.\r
748 @param EDX Upper 32-bits of MSR value.\r
749\r
750 <b>Example usage</b>\r
751 @code\r
752 UINT64 Msr;\r
753\r
754 Msr = AsmReadMsr64 (MSR_ATOM_PKG_C4_RESIDENCY);\r
755 AsmWriteMsr64 (MSR_ATOM_PKG_C4_RESIDENCY, Msr);\r
756 @endcode\r
800a651d 757 @note MSR_ATOM_PKG_C4_RESIDENCY is defined as MSR_PKG_C4_RESIDENCY in SDM.\r
a646000f
MK
758**/\r
759#define MSR_ATOM_PKG_C4_RESIDENCY 0x000003F9\r
760\r
761\r
762/**\r
763 Package. Package C6 Residency Note: C-state values are processor specific\r
764 C-state code names, unrelated to MWAIT extension C-state parameters or ACPI\r
765 C-States. Package. Package C6 Residency Counter. (R/O) Time that this\r
766 package is in processor-specific C6 states since last reset. Counts at 1 Mhz\r
767 frequency.\r
768\r
769 @param ECX MSR_ATOM_PKG_C6_RESIDENCY (0x000003FA)\r
770 @param EAX Lower 32-bits of MSR value.\r
771 @param EDX Upper 32-bits of MSR value.\r
772\r
773 <b>Example usage</b>\r
774 @code\r
775 UINT64 Msr;\r
776\r
777 Msr = AsmReadMsr64 (MSR_ATOM_PKG_C6_RESIDENCY);\r
778 AsmWriteMsr64 (MSR_ATOM_PKG_C6_RESIDENCY, Msr);\r
779 @endcode\r
800a651d 780 @note MSR_ATOM_PKG_C6_RESIDENCY is defined as MSR_PKG_C6_RESIDENCY in SDM.\r
a646000f
MK
781**/\r
782#define MSR_ATOM_PKG_C6_RESIDENCY 0x000003FA\r
783\r
784#endif\r