blob: 36746156438327e9cbad77c205be1905ea6cec05 [file] [log] [blame]
Anton Kochkov54c07a62012-07-04 07:35:45 +04001/*
2 * This file is part of msrtool.
3 *
4 * Copyright (C) 2012 Anton Kochkov <anton.kochkov@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
Paul Menzela46a7122013-02-23 18:37:27 +010017 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Anton Kochkov54c07a62012-07-04 07:35:45 +040018 */
19
20#include "msrtool.h"
21
Anton Kochkov59b36f12012-07-21 07:29:48 +040022int intel_nehalem_probe(const struct targetdef *target, const struct cpuid_t *id) {
Anton Kochkov54c07a62012-07-04 07:35:45 +040023 return ((0x6 == id->family) && (
24 (0x1a == id->model) ||
25 (0x1e == id->model) ||
26 (0x1f == id->model) ||
Alexander Couzensc768f922015-01-27 13:30:52 +010027 (0x2e == id->model) ||
28 (0x25 == id->model) || /* westmere */
29 (0x2c == id->model) || /* westmere */
30 (0x2f == id->model) /* westmere */
Anton Kochkov54c07a62012-07-04 07:35:45 +040031 ));
32}
33
34const struct msrdef intel_nehalem_msrs[] = {
35 {0x17, MSRTYPE_RDWR, MSR2(0,0), "IA32_PLATFORM_ID Register",
36 "Model Specific Platform ID", {
37 { 63, 11, RESERVED },
38 { 52, 3, RESERVED },
39 { 49, 37, RESERVED },
40 { 12, 5, "Maximum Qualified Ratio:", "The maximum allowed bus ratio",
41 PRESENT_DEC, {
42 { BITVAL_EOT }
43 }},
44 { 7, 8, RESERVED },
45 { BITS_EOT }
46 }},
47 /* FIXME: This MSR not documented for Nehalem */
48 {0xcd, MSRTYPE_RDONLY, MSR2(0,0), "MSR_FSB_FREQ", "Scaleable Bus Speed", {
49 /* This field indicates the intended scaleable bus clock speed */
50 { BITS_EOT }
51 }},
52 {0xce, MSRTYPE_RDONLY, MSR2(0,0), "MSR_PLATFORM_INFO", "", {
53 { 63, 16, RESERVED },
54 { 47, 8, "Maximum Efficiency Ratio", "R/O", PRESENT_DEC, {
55 { BITVAL_EOT }
56 }},
57 { 39, 10, RESERVED },
58 { 29, 1, "Programmable TDC-TDP Limit for Turbo Mode", "R/O", PRESENT_DEC, {
59 { MSR1(0), "TDC and TDP Limits for Turbo Mode are not programmable" },
60 { MSR1(1), "TDC and TDP Limits for Turbo Mode are programmable" },
61 { BITVAL_EOT }
62 }},
63 { 28, 1, "Programmable Ratio Limit for Turbo Mode", "R/O", PRESENT_DEC, {
64 { MSR1(0), "Programmable Ratio Limit for Turbo Mode is disabled" },
65 { MSR1(1), "Programmable Ratio Limit for Turbo Mode is enabled" },
66 { BITVAL_EOT }
67 }},
68 { 27, 12, RESERVED },
69 { 15, 8, "Maximum Non-Turbo Ratio", "R/O", PRESENT_DEC, {
70 /* The is ratio of the frequency that invariant TSC runs at. The invariant
71 * TSC requency can be computed by multipying this ratio by 133.33 Mhz
72 */
73 { BITVAL_EOT }
74 }},
75 { 7, 8, RESERVED },
76 { BITS_EOT }
77 }},
78 {0x11e, MSRTYPE_RDWR, MSR2(0,0), "MSR_BBL_CR_CTL3", "", {
79 { BITS_EOT }
80 }},
81 /* FIXME: There is already two 0x1ad MSRs for Nehalem in the
82 * Intel 64 and IA-32 Architectures Software Developer's Manual
83 * Volume 3C 34-91. But from decimal value of this register,
84 * we can conclude, that it was just typo, and this register
85 * have address 0x1ac.
86 */
87 {0x1ac, MSRTYPE_RDWR, MSR2(0,0), "MSR_TURBO_POWER_CURRENT_LIMIT", "", {
88 { 63, 32, RESERVED },
89 { 31, 1, "TDC Limit Override Enable", "R/W", PRESENT_BIN, {
90 { MSR1(0), "TDC Limit Override is not active" },
91 { MSR1(1), "TDC Limit Override is active" },
92 { BITVAL_EOT }
93 }},
94 { 30, 15, "TDC Limit", "R/W", PRESENT_HEX, {
95 /* TDC Limit in 1/8 Amp granularity */
96 { BITVAL_EOT }
97 }},
98 { 15, 1, "TDP Limit Override Enable", "R/W", PRESENT_BIN, {
99 { MSR1(0), "TDP Limit Override is not active" },
100 { MSR1(1), "TDP Limit Override is active" },
101 { BITVAL_EOT }
102 }},
103 { 14, 15, "TDP Limit", "R/W", PRESENT_HEX, {
104 /* TDP Limit in 1/8 Watt granularity */
105 { BITVAL_EOT }
106 }},
107 { BITS_EOT }
108 }},
109 {0x1ad, MSRTYPE_RDWR, MSR2(0,0), "MSR_TURBO_RATIO_LIMIT",
110 "Maximum Ratio Limit of Turbo Mode", {
111 // "RO" if MSR_PLATFORM_INFO.[28] = 0
112 // "RW" if MSR_PLATFORM_INFO.[23] = 1
113 { 63, 32, RESERVED },
114 { 31, 8, "Maximum Ratio Limit for 4C", "R/O", PRESENT_HEX, {
115 // Maximum Turbo Ratio Limit of 4 core active
116 { BITVAL_EOT }
117 }},
118 { 23, 8, "Maximum Ratio Limit for 3C", "R/O", PRESENT_HEX, {
119 // Maximum Turbo Ratio Limit of 3 core active
120 { BITVAL_EOT }
121 }},
122 { 15, 8, "Maximum Ratio Limit for 2C", "R/O", PRESENT_HEX, {
123 // Maximum Turbo Ratio Limit of 2 core active
124 { BITVAL_EOT }
125 }},
126 { 7, 8, "Maximum Ratio Limit for 1C", "R/O", PRESENT_HEX, {
127 // Maximum Turbo Ratio Limit of 1 core active
128 { BITVAL_EOT }
129 }},
130 { BITS_EOT }
131 }},
132 {0x280, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC0_CTL2", "", {
133 { 63, 33, RESERVED },
134 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
135 { BITVAL_EOT }
136 }},
137 { 29, 15, RESERVED },
138 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
139 { BITVAL_EOT }
140 }},
141 { BITS_EOT }
142 }},
143 {0x281, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_CTL2", "", {
144 { 63, 33, RESERVED },
145 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
146 { BITVAL_EOT }
147 }},
148 { 29, 15, RESERVED },
149 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
150 { BITVAL_EOT }
151 }},
152 { BITS_EOT }
153 }},
154 {0x286, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC6_CTL2", "", {
155 { 63, 33, RESERVED },
156 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
157 { BITVAL_EOT }
158 }},
159 { 29, 15, RESERVED },
160 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
161 { BITVAL_EOT }
162 }},
163 { BITS_EOT }
164 }},
165 {0x287, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC7_CTL2", "", {
166 { 63, 33, RESERVED },
167 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
168 { BITVAL_EOT }
169 }},
170 { 29, 15, RESERVED },
171 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
172 { BITVAL_EOT }
173 }},
174 { BITS_EOT }
175 }},
176 {0x288, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC8_CTL2", "", {
177 { 63, 33, RESERVED },
178 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
179 { BITVAL_EOT }
180 }},
181 { 29, 15, RESERVED },
182 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
183 { BITVAL_EOT }
184 }},
185 { BITS_EOT }
186 }},
187 {0x3f8, MSRTYPE_RDONLY, MSR2(0,0), "MSR_PKG_C3_RESIDENCY", "", {
188 { 63, 64, "Package C3 Residency Counter", "R/O", PRESENT_DEC, {
189 /* Value since last reset that this package is in C3 states.
190 * Count at the same frequency as the TSC.
191 */
192 { BITVAL_EOT }
193 }},
194 { BITS_EOT }
195 }},
196 {0x3f9, MSRTYPE_RDONLY, MSR2(0,0), "MSR_PKG_C6_RESIDENCY", "", {
197 { BITS_EOT }
198 }},
199 {0x3fa, MSRTYPE_RDONLY, MSR2(0,0), "MSR_PKG_C7_RESIDENCY", "", {
200 { BITS_EOT }
201 }},
202 {0x418, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC6_CTL", "", {
203 { BITS_EOT }
204 }},
205 {0x419, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC6_STATUS", "", {
206 { BITS_EOT }
207 }},
208 {0x41a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC6_ADDR", "", {
209 { BITS_EOT }
210 }},
211 {0x41b, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC6_MISC", "", {
212 { BITS_EOT }
213 }},
214 {0x41c, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC7_CTL", "", {
215 { BITS_EOT }
216 }},
217 {0x41d, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC7_STATUS", "", {
218 { BITS_EOT }
219 }},
220 {0x41e, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC7_ADDR", "", {
221 { BITS_EOT }
222 }},
223 {0x41f, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC7_MISC", "", {
224 { BITS_EOT }
225 }},
226 {0x420, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC8_CTL", "", {
227 { BITS_EOT }
228 }},
229 {0x421, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC8_STATUS", "", {
230 { BITS_EOT }
231 }},
232 {0x422, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC8_ADDR", "", {
233 { BITS_EOT }
234 }},
235 {0x423, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC8_MISC", "", {
236 { BITS_EOT }
237 }},
238
239/* ==========================================================================
240 * Per core MSRs
241 * ==========================================================================
242 */
243
244 {0x0, MSRTYPE_RDWR, MSR2(0,0), "IA32_P5_MC_ADDR", "Pentium Processor\
245 Machine-Check Exception Address", {
246 { BITS_EOT }
247 }},
248 {0x1, MSRTYPE_RDWR, MSR2(0,0), "IA32_P5_MC_TYPE", "Pentium Processor\
249 Machine-Check Exception Type", {
250 { BITS_EOT }
251 }},
252 {0x6, MSRTYPE_RDWR, MSR2(0,0), "IA32_MONITOR_FILTER_SIZE", "", {
253 { BITS_EOT }
254 }},
255 {0x10, MSRTYPE_RDWR, MSR2(0,0), "IA32_TIME_STEP_COUNTER", "TSC", {
256 { BITS_EOT }
257 }},
258 {0x1b, MSRTYPE_RDWR, MSR2(0,0), "IA32_APIC_BASE", "APIC BASE", {
259 /* In Intel's manual there is MAXPHYWID,
260 * which determine index of highest bit of
261 * APIC Base itself, so marking it as
262 * 'RESERVED'.
263 */
264 { 63, 52, RESERVED },
265 { 11, 1, "APIC Global Enable", "R/W", PRESENT_BIN, {
266 { BITVAL_EOT }
267 }},
268 { 10, 1, "x2APIC mode", "R/W", PRESENT_BIN, {
269 { MSR1(0), "x2APIC mode is disabled" },
270 { MSR1(1), "x2APIC mode is enabled" },
271 { BITVAL_EOT }
272 }},
273 { 9, 1, RESERVED },
274 { 8, 1, "BSP Flag", "R/W", PRESENT_BIN, {
275 { BITVAL_EOT }
276 }},
277 { 7, 8, RESERVED },
278 { BITS_EOT }
279 }},
280 {0x34, MSRTYPE_RDONLY, MSR2(0,0), "MSR_SMI_COUNT", "SMI Counter register", {
281 { 63, 32, RESERVED },
282 { 31, 32, "SMI Count", "R/O", PRESENT_HEX, {
283 { BITVAL_EOT }
284 }},
285 { BITS_EOT }
286 }},
287 /* if CPUID.01H: ECX[bit 5 or bit 6] = 1 */
288 {0x3a, MSRTYPE_RDWR, MSR2(0,0), "IA32_FEATURE_CONTROL",
289 "Control features in Intel 64Processor", {
290 { 63, 48, RESERVED },
291 /* if CPUID.01H: ECX[6] = 1 */
292 { 15, 1, "SENTER Global Enable", "R/WL", PRESENT_BIN, {
293 { MSR1(0), "SENTER leaf functions are disabled" },
294 { MSR1(1), "SENTER leaf functions are enabled" },
295 { BITVAL_EOT }
296 }},
297 /* if CPUID.01H: ECX[6] = 1 */
298 { 14, 7, "SENTER Local Function Enables", "R/WL", PRESENT_BIN, {
299 { BITVAL_EOT }
300 }},
301 { 7, 5, RESERVED },
302 /* if CPUID.01H: ECX[5 or 6] = 1 */
303 { 2, 1, "VMX outside of SMX operation", "R/WL", PRESENT_BIN, {
304 /* This bit enables VMX for system executive
305 * that do not require SMX.
306 */
307 { MSR1(0), "VMX outside of SMX operation disabled" },
308 { MSR1(1), "VMX outside of SMX operation enabled" },
309 { BITVAL_EOT }
310 }},
311 { 1, 1, "VMX inside of SMX operation", "R/WL", PRESENT_BIN, {
312 /* This bit enables a system executive to use
313 * VMX in conjuction with SMX to support Intel
314 * Trusted Execution Technology.
315 */
316 { MSR1(0), "VMX inside of SMX operation disabled" },
Olivier Langloisccc7d1f2013-06-03 01:30:25 -0400317 { MSR1(1), "VMX inside of SMX operation enabled" },
Anton Kochkov54c07a62012-07-04 07:35:45 +0400318 { BITVAL_EOT }
319 }},
320 /* if CPUID.01H: ECX[5 or 6] = 1 */
321 { 0, 1, "Lock bit", "R/WO", PRESENT_BIN, {
322 /* Once the Lock bit is set, the contents
323 * of this register cannot be modified.
324 * Therefore the lock bit must be set after
325 * configuring support for Intel Virtualization
326 * Technology and prior transferring control
327 * to an Option ROM or bootloader. Hence, once
328 * the lock bit is set, the entire IA32_FEATURE_CONTROL_MSR
329 * contents are preserved across RESET when
330 * PWRGOOD it not deasserted.
331 */
332 { MSR1(0), "IA32_FEATURE_CONTROL MSR can be modified" },
333 { MSR1(1), "IA32_FEATURE_CONTROL MSR cannot be modified" },
334 { BITVAL_EOT }
335 }},
336 { BITS_EOT }
337 }},
338 {0x40, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_0_FROM_IP", "", {
339 { BITS_EOT }
340 }},
341 {0x41, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_1_FROM_IP", "", {
342 { BITS_EOT }
343 }},
344 {0x42, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_2_FROM_IP", "", {
345 { BITS_EOT }
346 }},
347 {0x43, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_3_FROM_IP", "", {
348 { BITS_EOT }
349 }},
350 {0x60, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_0_TO_LIP", "", {
351 { BITS_EOT }
352 }},
353 {0x61, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_1_TO_LIP", "", {
354 { BITS_EOT }
355 }},
356 {0x62, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_2_TO_LIP", "", {
357 { BITS_EOT }
358 }},
359 {0x63, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_3_TO_LIP", "", {
360 { BITS_EOT }
361 }},
362 {0x79, MSRTYPE_RDWR, MSR2(0,0), "IA32_BIOS_UPDT_TRIG",
363 "BIOS Update Trigger Register (W)", {
364 { BITS_EOT }
365 }},
366 {0x8b, MSRTYPE_RDWR, MSR2(0,0), "IA32_BIOS_SIGN_ID",
367 "BIOS Update Signature ID (RO)", {
368 { BITS_EOT }
369 }},
370 {0xa0, MSRTYPE_RDWR, MSR2(0,0), "MSR_SMRR_PHYS_BASE", "", {
371 { BITS_EOT }
372 }},
373 {0xa1, MSRTYPE_RDWR, MSR2(0,0), "MSR_SMRR_PHYS_MASK", "", {
374 { BITS_EOT }
375 }},
376 {0xc1, MSRTYPE_RDWR, MSR2(0,0), "IA32_PMC0",
377 "Performance counter register", {
378 { BITS_EOT }
379 }},
380 {0xc2, MSRTYPE_RDWR, MSR2(0,0), "IA32_PMC1",
381 "Performance counter register", {
382 { BITS_EOT }
383 }},
384 {0xc3, MSRTYPE_RDWR, MSR2(0,0), "IA32_PMC2",
385 "Performance counter register", {
386 { BITS_EOT }
387 }},
388 {0xc4, MSRTYPE_RDWR, MSR2(0,0), "IA32_PMC3",
389 "Performance counter register", {
390 { BITS_EOT }
391 }},
392 {0xe2, MSRTYPE_RDWR, MSR2(0,0), "MSR_PKG_CST_CONFIG_CONTROL",
393 "C-State Configuration Control", {
394 { 63, 37, RESERVED },
395 { 26, 1, "C1 state auto demotion", "R/W", PRESENT_DEC, {
396 { MSR1(0), "Demotion of C3/C6/C7 requests to C1 is disabled" },
397 { MSR1(1), "Demotion of C3/C6/C7 requests to C1 is enabled" },
398 { BITVAL_EOT }
399 }},
400 { 25, 1, "C3 state auto demotion", "R/W", PRESENT_DEC, {
401 { MSR1(0), "Demotion of C6/C7 requests to C3 is disabled" },
402 { MSR1(1), "Demotion of C6/C7 requests to C3 is enabled" },
403 { BITVAL_EOT }
404 }},
405 { 24, 1, "Interrupt filtering enabled/disabled", "R/W", PRESENT_DEC, {
406 { MSR1(0), "All CPU cores in deep C-State will wake for an \
407 event message" },
408 { MSR1(1), "CPU in deep C-State will wake only when the event \
409 message is destined for that core" },
410 { BITVAL_EOT }
411 }},
412 { 23, 8, RESERVED },
413 { 15, 1, "CFG Lock", "R/WO", PRESENT_DEC, {
414 { MSR1(0), "[15:0] bits of MSR_PKG_CST_CONFIG_CONTROL(0xe2) \
415 are writeable" },
416 { MSR1(1), "[15:0] bits of MSR_PKG_CST_CONFIG_CONTROL(0xe2) \
417 are locked until reset" },
418 { BITVAL_EOT }
419 }},
420 { 14, 4, RESERVED },
421 { 10, 1, "I/O MWAIT Redirection", "R/W", PRESENT_DEC, {
422 { MSR1(0), "I/O MWAIT Redirection disabled" },
423 { MSR1(1), "CPU will map IO_read instructions sent to \
424 IO register specified by MSR_PMG_IO_CAPTURE_BASE \
425 to MWAIT instructions" },
426 { BITVAL_EOT }
427 }},
428 { 9, 7, RESERVED },
429 { 2, 3, "Package C-State limit", "R/W", PRESENT_BIN, {
430 /* Specifies the lowest processor specific C-state code name
431 * (consuming the least power) for the package. The default is set
432 * as factory-configured package C-state limit.
433 */
434 { MSR1(0), "C0 (no package C-state support)" },
435 { MSR1(1), "C1 (behavior is the same as C0)" },
436 { MSR1(2), "C3" },
437 { MSR1(3), "C6" },
438 { MSR1(4), "C7" },
439 { MSR1(5), "Reserved" },
440 { MSR1(6), "Reserved" },
441 { MSR1(7), "No package C-state limit" },
442 { BITVAL_EOT }
443 /* Note: this field cannot be used to limit
444 * package C-state to C3
445 */
446 }},
447 { BITS_EOT }
448 }},
449 {0xe4, MSRTYPE_RDWR, MSR2(0,0), "MSR_PMG_IO_CAPTURE_BASE",
450 "Power Management IO Redirection in C-state", {
451 { 63, 45, RESERVED },
452 { 18, 3, "C-state Range", "R/W", PRESENT_BIN, {
453 /* Specifies the encoding value of the maximum C-State code name
454 * to be included when IO read to MWAIT redirection is enabled by
455 * MSR_PMG_CST_CONFIG_CONTROL[bit10].
456 */
457 { MSR1(0), "C3 is the max C-State to include" },
458 { MSR1(1), "C6 is the max C-State to include" },
459 { MSR1(2), "C7 is the max C-State to include" },
460 { BITVAL_EOT }
461 }},
462 { 15, 16, "LVL_2 Base Address", "R/W", PRESENT_HEX, {
463 /* Specifies the base address visible to software for IO redirection.
464 * If I/O MWAIT Redirection is enabled, reads to this address will be
465 * consumed by the power management logic and decoded to MWAIT
466 * instructions. When IO port address redirection is enabled,
467 * this is the I/O port address reported to the OS/software.
468 */
469 { BITVAL_EOT }
470 }},
471 { BITS_EOT }
472 }},
473 {0xe7, MSRTYPE_RDWR, MSR2(0,0), "IA32_MPERF", "", {
474 { BITS_EOT }
475 }},
476 {0xe8, MSRTYPE_RDWR, MSR2(0,0), "IA32_APERF", "", {
477 { BITS_EOT }
478 }},
479 {0xfe, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRRCAP", "", {
480 { BITS_EOT }
481 }},
482 {0x174, MSRTYPE_RDWR, MSR2(0,0), "IA32_SYSENTER_CS", "", {
483 { BITS_EOT }
484 }},
485 {0x175, MSRTYPE_RDWR, MSR2(0,0), "IA32_SYSENTER_ESP", "", {
486 { BITS_EOT }
487 }},
488 {0x176, MSRTYPE_RDWR, MSR2(0,0), "IA32_SYSENTER_EIP", "", {
489 { BITS_EOT }
490 }},
491 {0x179, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCG_CAP", "", {
492 { BITS_EOT }
493 }},
494 {0x17a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCG_STATUS", "", {
495 { 63, 61, RESERVED },
496 { 2, 1, "MCIP", "R/W", PRESENT_BIN, {
497 /* When set, bit indicates that a machine check has been
498 * generated. If a second machine check is detected while
499 * this bit is still set, the processor enters a shutdown state.
500 * Software should write this bit to 0 after processing
501 * a machine check exception.
502 */
503 { MSR1(0), "Nothing" },
504 { MSR1(1), "Machine check has been generated" },
505 { BITVAL_EOT }
506 }},
507 { 1, 1, "EPIV", "R/W", PRESENT_BIN, {
508 /* When set, bit indicates that the instruction addressed
509 * by the instruction pointer pushed on the stack (when
510 * the machine check was generated) is directly associated
511 * with the error
512 */
513 { MSR1(0), "Nothing" },
514 { MSR1(1), "Instruction addressed directly associated with the error" },
515 { BITVAL_EOT }
516 }},
517 { 0, 1, "RIPV", "R/W", PRESENT_BIN, {
518 /* When set, bit indicates that the instruction addressed
519 * by the instruction pointer pushed on the stack (when
520 * the machine check was generated) can be used to restart
521 * the program. If cleared, the program cannot be reliably restarted
522 */
523 { MSR1(0), "Program cannot be reliably restarted" },
524 { MSR1(1), "Instruction addressed can be used to restart the program" },
525 { BITVAL_EOT }
526 }},
527 { BITS_EOT }
528 }},
529 /* if CPUID.0AH: EAX[15:8] > 0 */
530 {0x186, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERFEVTSEL0",
531 "Performance Event Select Register 0", {
532 { 63, 32, RESERVED },
533 { 31, 8, "CMASK", "R/W", PRESENT_HEX, {
534 /* When CMASK is not zero, the corresponding performance
535 * counter 0 increments each cycle if the event count
536 * is greater than or equal to the CMASK.
537 */
538 { BITVAL_EOT }
539 }},
540 { 23, 1, "INV", "R/W", PRESENT_BIN, {
541 { MSR1(0), "CMASK using as is" },
542 { MSR1(1), "CMASK inerting" },
543 { BITVAL_EOT }
544 }},
545 { 22, 1, "EN", "R/W", PRESENT_BIN, {
546 { MSR1(0), "No commence counting" },
547 { MSR1(1), "Commence counting" },
548 { BITVAL_EOT }
549 }},
550 { 21, 1, "AnyThread", "R/W", PRESENT_BIN, {
551 { BITVAL_EOT }
552 }},
553 { 20, 1, "INT", "R/W", PRESENT_BIN, {
554 { MSR1(0), "Interrupt on counter overflow is disabled" },
555 { MSR1(1), "Interrupt on counter overflow is enabled" },
556 { BITVAL_EOT }
557 }},
558 { 19, 1, "PC", "R/W", PRESENT_BIN, {
559 { MSR1(0), "Disabled pin control" },
560 { MSR1(1), "Enabled pin control" },
561 { BITVAL_EOT }
562 }},
563 { 18, 1, "Edge", "R/W", PRESENT_BIN, {
564 { MSR1(0), "Disabled edge detection" },
565 { MSR1(1), "Enabled edge detection" },
566 { BITVAL_EOT }
567 }},
568 { 17, 1, "OS", "R/W", PRESENT_BIN, {
569 { MSR1(0), "Nothing" },
570 { MSR1(1), "Counts while in privilege level is ring 0" },
571 { BITVAL_EOT }
572 }},
573 { 16, 1, "USR", "R/W", PRESENT_BIN, {
574 { MSR1(0), "Nothing" },
575 { MSR1(1), "Counts while in privilege level is not ring 0" },
576 { BITVAL_EOT }
577 }},
578 { 15, 8, "UMask", "R/W", PRESENT_HEX, {
579 /* Qualifies the microarchitectural condition
580 * to detect on the selected event logic. */
581 { BITVAL_EOT }
582 }},
583 { 7, 8, "Event Select", "R/W", PRESENT_HEX, {
584 /* Selects a performance event logic unit. */
585 { BITVAL_EOT }
586 }},
587 { BITS_EOT }
588 }},
589 /* if CPUID.0AH: EAX[15:8] > 0 */
590 {0x187, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERFEVTSEL1",
591 "Performance Event Select Register 1", {
592 { 63, 32, RESERVED },
593 { 31, 8, "CMASK", "R/W", PRESENT_HEX, {
594 /* When CMASK is not zero, the corresponding performance
595 * counter 1 increments each cycle if the event count
596 * is greater than or equal to the CMASK.
597 */
598 { BITVAL_EOT }
599 }},
600 { 23, 1, "INV", "R/W", PRESENT_BIN, {
601 { MSR1(0), "CMASK using as is" },
602 { MSR1(1), "CMASK inerting" },
603 { BITVAL_EOT }
604 }},
605 { 22, 1, "EN", "R/W", PRESENT_BIN, {
606 { MSR1(0), "No commence counting" },
607 { MSR1(1), "Commence counting" },
608 { BITVAL_EOT }
609 }},
610 { 21, 1, "AnyThread", "R/W", PRESENT_BIN, {
611 { BITVAL_EOT }
612 }},
613 { 20, 1, "INT", "R/W", PRESENT_BIN, {
614 { MSR1(0), "Interrupt on counter overflow is disabled" },
615 { MSR1(1), "Interrupt on counter overflow is enabled" },
616 { BITVAL_EOT }
617 }},
618 { 19, 1, "PC", "R/W", PRESENT_BIN, {
619 { MSR1(0), "Disabled pin control" },
620 { MSR1(1), "Enabled pin control" },
621 { BITVAL_EOT }
622 }},
623 { 18, 1, "Edge", "R/W", PRESENT_BIN, {
624 { MSR1(0), "Disabled edge detection" },
625 { MSR1(1), "Enabled edge detection" },
626 { BITVAL_EOT }
627 }},
628 { 17, 1, "OS", "R/W", PRESENT_BIN, {
629 { MSR1(0), "Nothing" },
630 { MSR1(1), "Counts while in privilege level is ring 0" },
631 { BITVAL_EOT }
632 }},
633 { 16, 1, "USR", "R/W", PRESENT_BIN, {
634 { MSR1(0), "Nothing" },
635 { MSR1(1), "Counts while in privilege level is not ring 0" },
636 { BITVAL_EOT }
637 }},
638 { 15, 8, "UMask", "R/W", PRESENT_HEX, {
639 /* Qualifies the microarchitectural condition
640 * to detect on the selected event logic. */
641 { BITVAL_EOT }
642 }},
643 { 7, 8, "Event Select", "R/W", PRESENT_HEX, {
644 /* Selects a performance event logic unit. */
645 { BITVAL_EOT }
646 }},
647 { BITS_EOT }
648 }},
649 /* if CPUID.0AH: EAX[15:8] > 0 */
650 {0x188, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERFEVTSEL2",
651 "Performance Event Select Register 2", {
652 { 63, 32, RESERVED },
653 { 31, 8, "CMASK", "R/W", PRESENT_HEX, {
654 /* When CMASK is not zero, the corresponding performance
655 * counter 2 increments each cycle if the event count
656 * is greater than or equal to the CMASK.
657 */
658 { BITVAL_EOT }
659 }},
660 { 23, 1, "INV", "R/W", PRESENT_BIN, {
661 { MSR1(0), "CMASK using as is" },
662 { MSR1(1), "CMASK inerting" },
663 { BITVAL_EOT }
664 }},
665 { 22, 1, "EN", "R/W", PRESENT_BIN, {
666 { MSR1(0), "No commence counting" },
667 { MSR1(1), "Commence counting" },
668 { BITVAL_EOT }
669 }},
670 { 21, 1, "AnyThread", "R/W", PRESENT_BIN, {
671 { BITVAL_EOT }
672 }},
673 { 20, 1, "INT", "R/W", PRESENT_BIN, {
674 { MSR1(0), "Interrupt on counter overflow is disabled" },
675 { MSR1(1), "Interrupt on counter overflow is enabled" },
676 { BITVAL_EOT }
677 }},
678 { 19, 1, "PC", "R/W", PRESENT_BIN, {
679 { MSR1(0), "Disabled pin control" },
680 { MSR1(1), "Enabled pin control" },
681 { BITVAL_EOT }
682 }},
683 { 18, 1, "Edge", "R/W", PRESENT_BIN, {
684 { MSR1(0), "Disabled edge detection" },
685 { MSR1(1), "Enabled edge detection" },
686 { BITVAL_EOT }
687 }},
688 { 17, 1, "OS", "R/W", PRESENT_BIN, {
689 { MSR1(0), "Nothing" },
690 { MSR1(1), "Counts while in privilege level is ring 0" },
691 { BITVAL_EOT }
692 }},
693 { 16, 1, "USR", "R/W", PRESENT_BIN, {
694 { MSR1(0), "Nothing" },
695 { MSR1(1), "Counts while in privilege level is not ring 0" },
696 { BITVAL_EOT }
697 }},
698 { 15, 8, "UMask", "R/W", PRESENT_HEX, {
699 /* Qualifies the microarchitectural condition
700 * to detect on the selected event logic. */
701 { BITVAL_EOT }
702 }},
703 { 7, 8, "Event Select", "R/W", PRESENT_HEX, {
704 /* Selects a performance event logic unit. */
705 { BITVAL_EOT }
706 }},
707 { BITS_EOT }
708 }},
709 /* if CPUID.0AH: EAX[15:8] > 0 */
710 {0x189, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERFEVTSEL3",
711 "Performance Event Select Register 3", {
712 { 63, 32, RESERVED },
713 { 31, 8, "CMASK", "R/W", PRESENT_HEX, {
714 /* When CMASK is not zero, the corresponding performance
715 * counter 3 increments each cycle if the event count
716 * is greater than or equal to the CMASK.
717 */
718 { BITVAL_EOT }
719 }},
720 { 23, 1, "INV", "R/W", PRESENT_BIN, {
721 { MSR1(0), "CMASK using as is" },
722 { MSR1(1), "CMASK inerting" },
723 { BITVAL_EOT }
724 }},
725 { 22, 1, "EN", "R/W", PRESENT_BIN, {
726 { MSR1(0), "No commence counting" },
727 { MSR1(1), "Commence counting" },
728 { BITVAL_EOT }
729 }},
730 { 21, 1, "AnyThread", "R/W", PRESENT_BIN, {
731 { BITVAL_EOT }
732 }},
733 { 20, 1, "INT", "R/W", PRESENT_BIN, {
734 { MSR1(0), "Interrupt on counter overflow is disabled" },
735 { MSR1(1), "Interrupt on counter overflow is enabled" },
736 { BITVAL_EOT }
737 }},
738 { 19, 1, "PC", "R/W", PRESENT_BIN, {
739 { MSR1(0), "Disabled pin control" },
740 { MSR1(1), "Enabled pin control" },
741 { BITVAL_EOT }
742 }},
743 { 18, 1, "Edge", "R/W", PRESENT_BIN, {
744 { MSR1(0), "Disabled edge detection" },
745 { MSR1(1), "Enabled edge detection" },
746 { BITVAL_EOT }
747 }},
748 { 17, 1, "OS", "R/W", PRESENT_BIN, {
749 { MSR1(0), "Nothing" },
750 { MSR1(1), "Counts while in privilege level is ring 0" },
751 { BITVAL_EOT }
752 }},
753 { 16, 1, "USR", "R/W", PRESENT_BIN, {
754 { MSR1(0), "Nothing" },
755 { MSR1(1), "Counts while in privilege level is not ring 0" },
756 { BITVAL_EOT }
757 }},
758 { 15, 8, "UMask", "R/W", PRESENT_HEX, {
759 /* Qualifies the microarchitectural condition
760 * to detect on the selected event logic. */
761 { BITVAL_EOT }
762 }},
763 { 7, 8, "Event Select", "R/W", PRESENT_HEX, {
764 /* Selects a performance event logic unit. */
765 { BITVAL_EOT }
766 }},
767 { BITS_EOT }
768 }},
769 {0x198, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_STATUS", "", {
770 { 63, 48, RESERVED },
771 { 15, 16, "Current Performance State Value", "R/O", PRESENT_HEX, {
772 { BITVAL_EOT }
773 }},
774 { BITS_EOT }
775 }},
776 {0x199, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_CTL", "", {
777 { BITS_EOT }
778 }},
779 {0x19a, MSRTYPE_RDWR, MSR2(0,0), "IA32_CLOCK_MODULATION",
780 "Clock Modulation", {
781 { 63, 59, RESERVED },
782 { 4, 1, "On demand Clock Modulation", "R/W", PRESENT_BIN, {
783 { MSR1(0), "On demand Clock Modulation is disabled" },
784 { MSR1(1), "On demand Clock Modulation is enabled" },
785 { BITVAL_EOT }
786 }},
787 { 3, 3, "On demand Clock Modulation Duty Cycle", "R/W", PRESENT_HEX, {
788 { BITVAL_EOT }
789 }},
790 { 0, 1, RESERVED },
791 { BITS_EOT }
792 }},
793 {0x19b, MSRTYPE_RDWR, MSR2(0,0), "IA32_THERM_INTERRUPT",
794 "Thermal Interrupt Control", {
795 { BITS_EOT }
796 }},
797 {0x19c, MSRTYPE_RDWR, MSR2(0,0), "IA32_THERM_STATUS",
798 "Thermal Monitor Status", {
799 { BITS_EOT }
800 }},
801 {0x19d, MSRTYPE_RDWR, MSR2(0,0), "MSR_THERM2_CTL", "", {
802 { BITS_EOT }
803 }},
804 {0x1a0, MSRTYPE_RDWR, MSR2(0,0), "IA32_MISC_ENABLE",
805 "Enable miscellaneous processor features", {
806 { 63, 25, RESERVED },
807 /* Note: [38] bit using for whole package,
808 * while some other bits can be Core or Thread
809 * specific.
810 */
811 { 38, 1, "Turbo Mode", "R/W", PRESENT_BIN, {
812 /* When set to a 0 on processors that support IDA,
813 * CPUID.06H: EAX[1] reports the processor's
814 * support of turbo mode is enabled.
815 */
816 { MSR1(0), "Turbo Mode enabled" },
817 /* When set 1 on processors that support Intel Turbo Boost
818 * technology, the turbo mode feature is disabled and
819 * the IDA_Enable feature flag will be clear (CPUID.06H: EAX[1]=0).
820 */
821 { MSR1(1), "Turbo Mode disabled" },
822 { BITVAL_EOT }
823 /* Note: the power-on default value is used by BIOS to detect
824 * hardware support of turbo mode. If power-on default value is 1,
825 * turbo mode is available in the processor. If power-on default
826 * value is 0, turbo mode not available.
827 */
828 }},
829 { 37, 3, RESERVED },
830 { 34, 1, "XD Bit Disable", "R/W", PRESENT_BIN, {
831 { BITVAL_EOT }
832 }},
833 { 33, 10, RESERVED },
834 { 23, 1, "xTPR Message Disable", "R/W", PRESENT_BIN, {
835 { BITVAL_EOT }
836 }},
837 { 22, 1, "Limit CPUID Maxval", "R/W", PRESENT_BIN, {
838 { BITVAL_EOT }
839 }},
840 { 21, 3, RESERVED },
841 { 18, 1, "Enable Monitor FSM", "R/W", PRESENT_BIN, {
842 { BITVAL_EOT }
843 }},
844 { 17, 1, "UNDOCUMENTED", "R/W", PRESENT_BIN, {
845 { BITVAL_EOT }
846 }},
847 /* Note: [16] bit using for whole package,
848 * while some other bits can be Core or Thread
849 * specific.
850 */
851 { 16, 1, "Enhanced Intel SpeedStep Technology Enable", "R/W",
852 PRESENT_BIN, {
853 { BITVAL_EOT }
854 }},
855 { 15, 3, RESERVED },
856 { 12, 1, "Precise Event Based Sampling Unavailable", "R/O",
857 PRESENT_BIN, {
858 { BITVAL_EOT }
859 }},
860 { 11, 1, "Branch Trace Storage Unavailable", "R/O", PRESENT_BIN, {
861 { BITVAL_EOT }
862 }},
863 { 10, 3, RESERVED },
864 { 7, 1, "Performance Monitoring Available", "R", PRESENT_BIN, {
865 { BITVAL_EOT }
866 }},
867 { 6, 3, RESERVED },
868 { 3, 1, "Automatic Thermal Control Circuit Enable", "R/W"
869 , PRESENT_BIN, {
870 { BITVAL_EOT }
871 }},
872 { 2, 2, RESERVED },
873 { 0, 1, "Fast-Strings Enable", "R/W", PRESENT_BIN, {
874 { BITVAL_EOT }
875 }},
876 { BITS_EOT }
877 }},
878 {0x1a2, MSRTYPE_RDWR, MSR2(0,0), "MSR_TEMPERATURE_TARGET", "", {
879 { 63, 40, RESERVED },
880 { 23, 8, "Temperature Target", "R", PRESENT_DEC, {
881 /* The minimum temperature at which PROCHOT# will be
882 * asserted. The value in degree C.
883 */
884 { BITVAL_EOT }
885 }},
886 { 15, 16, RESERVED },
887 { BITS_EOT }
888 }},
889 {0x1a6, MSRTYPE_RDWR, MSR2(0,0), "MSR_OFFCORE_RSP_O",
890 "Offcore Response Event Select Register", {
891 { BITS_EOT }
892 }},
893 {0x1aa, MSRTYPE_RDWR, MSR2(0,0), "MSR_MISC_PWR_MGMT", "", {
894 { 63, 62, RESERVED },
895 { 1, 1, "Energy/Performance Bias Enable", "R/W", PRESENT_BIN, {
896 /* This bit status is also reflected
897 * by CPUID.(EAX=06h):ECX[3]
898 */
899 { MSR1(0), "IA32_ENERGY_PERF_BIAS (0x1b0) is invisible \
900 for Ring 0 software" },
901 { MSR1(1), "IA32_ENERGY_PERF_BIAS (0x1b0) accessible \
902 by Ring 0 software" },
903 { BITVAL_EOT }
904 }},
905 { 0, 1, "EIST Hardware Coordination Disable", "R/W", PRESENT_BIN, {
906 { MSR1(0), "Hardware Coordination of EIST request \
907 from processor cores is enabled" },
908 { MSR1(1), "Hardware Coordination of EIST request \
909 from processor cores is disabled" },
910 { BITVAL_EOT }
911 }},
912 { BITS_EOT }
913 }},
914 {0x1c8, MSRTYPE_RDWR, MSR2(0,0), "MSR_LBR_SELECT",
915 "Last Branch Record Filtering Select Register", {
916 /* "Nehalem support filtering of LBR based on combination of CPL
917 * and branch type conditions. When LBR filtering is enabled,
918 * the LBR stack only captures the subset of branches
919 * that are specified by MSR_LBR_SELECT."
920 *
921 * -- Section 17.6.2 of Intel 64 and IA-32 Architectures Software
922 * Developer's Manual, Volume 3
923 */
924 { BITS_EOT }
925 }},
926 {0x1c9, MSRTYPE_RDONLY, MSR2(0,0), "MSR_LASTBRANCH_TOS",
927 "Last Branch Record Stack TOS", {
928 /* Contains an index (bits 0-3) that points to the MSR containing
929 * the most recent branch record. See also MSR_LASTBRANCH_0_FROM_IP (0x680).
930 */
931 { BITS_EOT }
932 }},
933 {0x1d9, MSRTYPE_RDWR, MSR2(0,0), "IA32_DEBUGCTL",
934 "Debug/Trace/Profile Resource Control", {
935 /* (MSR_DEBUGCTTLA, MSR_DEBUGCTLB) */
936 { 63, 49, RESERVED },
937 /* Only if IA32_PERF_CAPABILITIES[12] = 1 */
938 { 14, 1, "FREEZE_WHILE_SMM", "R/O", PRESENT_BIN, {
939 { MSR1(0), "Nothing" },
940 { MSR1(1), "Freeze perfmon and trace messages while in SMM" },
941 { BITVAL_EOT }
942 }},
943 { 13, 1, "ENABLE_UNCORE_PMI", "R/O", PRESENT_BIN, {
944 { MSR1(0), "Nothing" },
945 { MSR1(1), "Logical processor can receive and generate PMI \
946 on behalf of the uncore" },
947 { BITVAL_EOT }
948 }},
949 /* Only if CPUID.01H: ECX[15] = 1 and CPUID.0AH: EAX[7:0]>1 */
950 { 12, 1, "FREEZE_PERFMON_ON_PMI", "R/O", PRESENT_BIN, {
951 { MSR1(0), "Nothing" },
952 { MSR1(1), "Each ENABLE bit of the global counter control MSR \
953 are frozen (address 0x3bf) on PMI request" },
954 { BITVAL_EOT }
955 }},
956 /* Only if CPUID.01H: ECX[15] = 1 and CPUID.0AH: EAX[7:0]>1 */
957 { 11, 1, "FREEZE_LBRS_ON_PMI", "R/O", PRESENT_BIN, {
958 { MSR1(0), "Nothing" },
959 { MSR1(1), "LBR stack is frozen on PMI request" },
960 { BITVAL_EOT }
961 }},
962 { 10, 1, "BTS_OFF_USR", "R/O", PRESENT_BIN, {
963 { MSR1(0), "Nothing" },
964 { MSR1(1), "BTS or BTM is skipped if CPL > 0" },
965 { BITVAL_EOT }
966 }},
967 { 9, 1, "BTS_OFF_OS", "R/O", PRESENT_BIN, {
968 { MSR1(0), "Nothing" },
969 { MSR1(1), "BTS or BTM is skipped if CPL = 0" },
970 { BITVAL_EOT }
971 }},
972 { 8, 1, "BTINT", "R/O", PRESENT_BIN, {
973 { MSR1(0), "BTMs are logged in a BTS buffer in circular fashion" },
974 { MSR1(1), "An interrupt is generated by the BTS facility \
975 when the BTS buffer is full" },
976 { BITVAL_EOT }
977 }},
978 { 7, 1, "BTS", "R/O", PRESENT_BIN, {
979 { MSR1(0), "Logging of BTMs (branch trace messages) \
980 in BTS buffer is disabled" },
981 { MSR1(1), "Logging of BTMs (branch trace messages) \
982 in BTS buffer is enabled" },
983 { BITVAL_EOT }
984 }},
985 { 6, 1, "TR", "R/O", PRESENT_BIN, {
986 { MSR1(0), "Branch trace messages are disabled" },
987 { MSR1(1), "Branch trace messages are enabled" },
988 { BITVAL_EOT }
989 }},
990 { 5, 4, RESERVED },
991 { 1, 1, "BTF", "R/O", PRESENT_BIN, {
992 { MSR1(0), "Nothing" },
993 { MSR1(1), "Enabled treating EFLAGS.TF as single-step on \
994 branches instead of single-step on instructions" },
995 { BITVAL_EOT }
996 }},
997 { 0, 1, "LBR", "R/O", PRESENT_BIN, {
998 { MSR1(0), "Nothing" },
999 { MSR1(1), "Enabled recording a running trace of the most \
1000 recent branches taken by the processor in the LBR stack" },
1001 { BITVAL_EOT }
1002 }},
1003 { BITS_EOT }
1004 }},
1005 {0x1dd, MSRTYPE_RDONLY, MSR2(0,0), "MSR_LER_FROM_LIP",
1006 "Last Exception Record From Linear IP", {
1007 /* Contains a pointer to the last branch instruction
1008 * that the processor executed prior to the last exception
1009 * that was generated or the last interrupt that was handled.
1010 */
1011 { BITS_EOT }
1012 }},
1013 {0x1de, MSRTYPE_RDONLY, MSR2(0,0), "MSR_LER_TO_LIP",
1014 "Last Exception Record To Linear IP", {
1015 /* This area contains a pointer to the target of the
1016 * last branch instruction that the processor executed
1017 * prior to the last exception that was generated or
1018 * the last interrupt that was handled
1019 */
1020 { BITS_EOT }
1021 }},
1022 {0x1f2, MSRTYPE_RDONLY, MSR2(0,0), "IA32_SMRR_PHYS_BASE",
1023 "SMRR Base Address", {
1024 /* Base address of SMM memory range.
1025 * Writeable only in SMM, so marking it as read-only */
1026 { 63, 32, RESERVED },
1027 { 31, 20, "SMRR physical Base Address", "R/O", PRESENT_HEX, {
1028 { BITVAL_EOT }
1029 }},
1030 { 11, 4, RESERVED },
1031 { 7, 8, "Memory type of the range", "R/O", PRESENT_HEX, {
1032 { BITVAL_EOT }
1033 }},
1034 { BITS_EOT }
1035 }},
1036 {0x1f3, MSRTYPE_RDONLY, MSR2(0,0), "IA32_SMRR_PHYS_MASK",
1037 "SMRR Range Mask", {
1038 /* Range Mask of SMM memory range.
1039 * Writeable only in SMM, so marking it as read-only */
1040 { 63, 32, RESERVED },
1041 { 31, 20, "SMRR address range mask", "R/O", PRESENT_HEX, {
1042 { BITVAL_EOT }
1043 }},
1044 { 11, 1, "Is Valid SMRR range mask", "R/O", PRESENT_BIN, {
1045 { MSR1(0), "SMRR range mask is disabled" },
1046 { MSR1(1), "SMRR range mask is enabled" },
1047 { BITVAL_EOT }
1048 }},
1049 { 10, 11, RESERVED },
1050 { BITS_EOT }
1051 }},
1052 {0x1f8, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PLATFORM_DCA_CAP",
1053 "DCA Capability", {
1054 { BITS_EOT }
1055 }},
1056 {0x1f9, MSRTYPE_RDONLY, MSR2(0,0), "IA32_CPU_DCA_CAP",
1057 "Support og Prefetch-Hint type", {
1058 /* If set, CPU supports Prefetch-Hint type.
1059 * TODO: As it is undocumented, which bit (or bits)
1060 * are needed to "be set", we need collect some
1061 * outputs of msrtool to understand possible msr values.
1062 */
1063 { BITS_EOT }
1064 }},
1065 {0x1fa, MSRTYPE_RDWR, MSR2(0,0), "IA32_DCA_0_CAP",
1066 "DCA type 0 Status and Control register", {
1067 /* This register defined as introduced only
1068 * in 06_2EH Nehalem model (latest), so be careful!
1069 */
1070 { 31, 5, RESERVED },
1071 { 26, 1, "HW_BLOCK", "R/O", PRESENT_BIN, {
1072 /* Hardware block of DCA */
1073 { MSR1(0), "DCA is not blocked by HW" },
1074 { MSR1(1), "DCA is blocked by HW (e.g. CR0.CD=1)" },
1075 { BITVAL_EOT }
1076 }},
1077 { 25, 1, RESERVED },
1078 { 24, 1, "SW_BLOCK", "R/W", PRESENT_BIN, {
1079 /* Software block of DCA */
1080 { MSR1(0), "DCA is not blocked by SW" },
1081 { MSR1(1), "DCA is blocked by SW" },
1082 { BITVAL_EOT }
1083 }},
1084 { 23, 7, RESERVED },
1085 { 16, 4, "DCA_RELAY", "R/W", PRESENT_HEX, {
1086 /* Writes will update the register
1087 * but have no HW side-effect */
1088 { BITVAL_EOT }
1089 }},
1090 { 12, 2, RESERVED },
1091 { 10, 4, "DCA_QUEUE_SIZE", "R/O", PRESENT_DEC, {
1092 { BITVAL_EOT }
1093 }},
1094 { 6, 4, "DCA_TYPE", "R/O", PRESENT_HEX, {
1095 { BITVAL_EOT }
1096 }},
1097 { 2, 2, "TRANSACTION", "R/O", PRESENT_HEX, {
1098 { BITVAL_EOT }
1099 }},
1100 { 0, 1, "DCA_ACTIVE", "R/O", PRESENT_BIN, {
1101 /* Set by HW when DCA is fuse-enabled and
1102 * no defeauteres are set */
1103 { MSR1(0), "DCA inactive" },
1104 { MSR1(1), "DCA inactive" },
1105 { BITVAL_EOT }
1106 }},
1107 { BITS_EOT }
1108 }},
1109 {0x1fc, MSRTYPE_RDWR, MSR2(0,0), "MSR_POWER_CTL",
1110 "Power Control Register", {
1111 { 63, 62, RESERVED },
1112 /* Whole package bit */
1113 { 1, 1, "C1E Enable", "R/W", PRESENT_BIN, {
1114 { MSR1(0), "Nothing" },
1115 { MSR1(1), "CPU switch to the Minimum Enhaced Intel \
1116 SpeedStep Technology operating point when all \
1117 execution cores enter MWAIT (C1)" },
1118 { BITVAL_EOT }
1119 }},
1120 { 0, 1, RESERVED },
1121 { BITS_EOT }
1122 }},
1123 {0x200, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE0", "", {
1124 { BITS_EOT }
1125 }},
1126 {0x201, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK0", "", {
1127 { BITS_EOT }
1128 }},
1129 {0x202, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE1", "", {
1130 { BITS_EOT }
1131 }},
1132 {0x203, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK1", "", {
1133 { BITS_EOT }
1134 }},
1135 {0x204, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE2", "", {
1136 { BITS_EOT }
1137 }},
1138 {0x205, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK2", "", {
1139 { BITS_EOT }
1140 }},
1141 {0x206, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE3", "", {
1142 { BITS_EOT }
1143 }},
1144 {0x207, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK3", "", {
1145 { BITS_EOT }
1146 }},
1147 {0x208, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE4", "", {
1148 { BITS_EOT }
1149 }},
1150 {0x209, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK4", "", {
1151 { BITS_EOT }
1152 }},
1153 {0x20a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE5", "", {
1154 { BITS_EOT }
1155 }},
1156 {0x20b, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK5", "", {
1157 { BITS_EOT }
1158 }},
1159 {0x20c, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE6", "", {
1160 { BITS_EOT }
1161 }},
1162 {0x20d, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK6", "", {
1163 { BITS_EOT }
1164 }},
1165 {0x20e, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE7", "", {
1166 { BITS_EOT }
1167 }},
1168 {0x20f, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK7", "", {
1169 { BITS_EOT }
1170 }},
1171 /* if IA32_MTRR_CAP[7:0] > 8 */
1172 {0x210, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE8", "", {
1173 { BITS_EOT }
1174 }},
1175 /* if IA32_MTRR_CAP[7:0] > 8 */
1176 {0x211, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK8", "", {
1177 { BITS_EOT }
1178 }},
1179 /* if IA32_MTRR_CAP[7:0] > 9 */
1180 {0x212, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_BASE9", "", {
1181 { BITS_EOT }
1182 }},
1183 /* if IA32_MTRR_CAP[7:0] > 9 */
1184 {0x213, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_PHYS_MASK9", "", {
1185 { BITS_EOT }
1186 }},
1187 {0x250, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX64K_00000", "", {
1188 { BITS_EOT }
1189 }},
1190 {0x258, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX16K_80000", "", {
1191 { BITS_EOT }
1192 }},
1193 {0x259, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX16K_A0000", "", {
1194 { BITS_EOT }
1195 }},
1196 {0x268, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_C0000", "", {
1197 { BITS_EOT }
1198 }},
1199 {0x269, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_C8000", "", {
1200 { BITS_EOT }
1201 }},
1202 {0x26a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_D0000", "", {
1203 { BITS_EOT }
1204 }},
1205 {0x26b, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_D8000", "", {
1206 { BITS_EOT }
1207 }},
1208 {0x26c, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_E0000", "", {
1209 { BITS_EOT }
1210 }},
1211 {0x26d, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_E8000", "", {
1212 { BITS_EOT }
1213 }},
1214 {0x26e, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_F0000", "", {
1215 { BITS_EOT }
1216 }},
1217 {0x26f, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_FIX4K_F8000", "", {
1218 { BITS_EOT }
1219 }},
1220 {0x277, MSRTYPE_RDWR, MSR2(0,0), "IA32_PAT", "IA32_PAT", {
1221 { 63, 5, RESERVED },
1222 { 58, 3, "PA7", "R/W", PRESENT_BIN, {
1223 { BITVAL_EOT }
1224 }},
1225 { 55, 5, RESERVED },
1226 { 40, 3, "PA6", "R/W", PRESENT_BIN, {
1227 { BITVAL_EOT }
1228 }},
1229 { 47, 5, RESERVED },
1230 { 42, 3, "PA5", "R/W", PRESENT_BIN, {
1231 { BITVAL_EOT }
1232 }},
1233 { 39, 5, RESERVED },
1234 { 34, 3, "PA4", "R/W", PRESENT_BIN, {
1235 { BITVAL_EOT }
1236 }},
1237 { 31, 5, RESERVED },
1238 { 26, 3, "PA3", "R/W", PRESENT_BIN, {
1239 { BITVAL_EOT }
1240 }},
1241 { 23, 5, RESERVED },
1242 { 18, 3, "PA2", "R/W", PRESENT_BIN, {
1243 { BITVAL_EOT }
1244 }},
1245 { 15, 5, RESERVED },
1246 { 10, 3, "PA1", "R/W", PRESENT_BIN, {
1247 { BITVAL_EOT }
1248 }},
1249 { 7, 5, RESERVED },
1250 { 2, 3, "PA0", "R/W", PRESENT_BIN, {
1251 { BITVAL_EOT }
1252 }},
1253 { BITS_EOT }
1254 }},
1255 {0x282, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_CTL2", "", {
1256 { 63, 33, RESERVED },
1257 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
1258 { BITVAL_EOT }
1259 }},
1260 { 29, 15, RESERVED },
1261 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
1262 { BITVAL_EOT }
1263 }},
1264 { BITS_EOT }
1265 }},
1266 {0x283, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_CTL2", "", {
1267 { 63, 33, RESERVED },
1268 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
1269 { BITVAL_EOT }
1270 }},
1271 { 29, 15, RESERVED },
1272 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
1273 { BITVAL_EOT }
1274 }},
1275 { BITS_EOT }
1276 }},
1277 {0x284, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_CTL2", "", {
1278 { 63, 33, RESERVED },
1279 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
1280 { BITVAL_EOT }
1281 }},
1282 { 29, 15, RESERVED },
1283 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
1284 { BITVAL_EOT }
1285 }},
1286 { BITS_EOT }
1287 }},
1288 {0x285, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_CTL2", "", {
1289 { 63, 33, RESERVED },
1290 { 30, 1, "CMCI_EN", "R/W", PRESENT_BIN, {
1291 { BITVAL_EOT }
1292 }},
1293 { 29, 15, RESERVED },
1294 { 14, 15, "Corrected error count threshold", "R/W", PRESENT_HEX, {
1295 { BITVAL_EOT }
1296 }},
1297 { BITS_EOT }
1298 }},
1299 {0x2ff, MSRTYPE_RDWR, MSR2(0,0), "IA32_MTRR_DEF_TYPE",
1300 "Default Memory Types", {
1301 { 63, 52, RESERVED },
1302 { 11, 1, "MTRR Enable", "R/W", PRESENT_BIN, {
1303 { BITVAL_EOT }
1304 }},
1305 { 10, 1, "Fixed Range MTRR Enable", "R/W", PRESENT_BIN, {
1306 { BITVAL_EOT }
1307 }},
1308 { 9, 7, RESERVED },
1309 { 2, 3, "Default Memory Type", "R/W", PRESENT_HEX, {
1310 { BITVAL_EOT }
1311 }},
1312 { BITS_EOT }
1313 }},
1314 /* if CPUID.0AH: EDX[4:0] > 0 */
1315 {0x309, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR0", "Fixed-Function \
1316 Performance Counter Register 0: Counts Instr_Retired.Any", {
1317 /* Also known as MSR_PERF_FIXED_CTR0 */
1318 { BITS_EOT }
1319 }},
1320 /* if CPUID.0AH: EDX[4:0] > 1 */
1321 {0x30a, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR1", "Fixed-Function \
1322 Performance Counter Register 1: Counts CPU_CLK_Unhalted.Core ", {
1323 /* Also known as MSR_PERF_FIXED_CTR1 */
1324 { BITS_EOT }
1325 }},
1326 /* if CPUID.0AH: EDX[4:0] > 2 */
1327 {0x30b, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR2", "Fixed-Function \
1328 Performance Counter Register 2: Counts CPU_CLK_Unhalted.Ref", {
1329 /* Also known as MSR_PERF_FIXED_CTR2 */
1330 { BITS_EOT }
1331 }},
1332 /* if CPUID.01H: ECX[15] = 1 */
1333 {0x345, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PERF_CAPABILITIES", "", {
1334 /* Additional info available at Section 17.4.1 of
1335 * Intel 64 and IA-32 Architecures Software Developer's
1336 * Manual, Volume 3.
1337 */
1338 { 63, 50, RESERVED },
1339 { 13, 1, "Counter width", "R/O", PRESENT_BIN, {
1340 { MSR1(0), "Nothing" },
1341 { MSR1(1), "Full width of counter writable via IA32_A_PMCx" },
1342 { BITVAL_EOT }
1343 }},
1344 { 12, 1, "SMM_FREEZE", "R/O", PRESENT_BIN, {
1345 { MSR1(0), "Nothing" },
1346 { MSR1(1), "Freeze while SMM is supported" },
1347 { BITVAL_EOT }
1348 }},
1349 { 11, 4, "PEBS_REC_FORMAT", "R/O", PRESENT_HEX, {
1350 { BITVAL_EOT }
1351 }},
1352 { 7, 1, "PEBSSaveArchRegs", "R/O", PRESENT_BIN, {
1353 { BITVAL_EOT }
1354 }},
1355 { 6, 1, "PEBS Record Format", "R/O", PRESENT_BIN, {
1356 { BITVAL_EOT }
1357 }},
1358 { 5, 6, "LBR Format", "R/O", PRESENT_HEX, {
1359 { BITVAL_EOT }
1360 }},
1361 { BITS_EOT }
1362 }},
1363 /* if CPUID.0AH: EAX[7:0] > 1*/
1364 {0x38d, MSRTYPE_RDWR, MSR2(0,0), "IA32_FIXED_CTR_CTRL",
1365 "Fixed-Function-Counter Control Register", {
1366 /* Also known as MSR_PERF_FIXED_CTR_CTRL.
1367 * Counter increments while the results of ANDing respective enable bit
1368 * in IA32_PERF_GLOBAL_CTRL with the corresponding OS or USR bits
1369 * in this MSR is true. */
1370 { 63, 52, RESERVED },
1371 { 11, 1, "EN2_PMI", "R/W", PRESENT_BIN, {
1372 { MSR1(0), "Nothing" },
1373 { MSR1(1), "PMI when fixed counter 2 overflows is enabled" },
1374 { BITVAL_EOT }
1375 }},
1376 /* if CPUID.0AH EAX[7:0] > 2 */
1377 { 10, 1, "AnyThread 2", "R/W", PRESENT_BIN, {
1378 { MSR1(0), "Counter only increments the associated event \
1379 conditions occuring in the logical processor which programmed the MSR" },
1380 { MSR1(1), "Counting the associated event conditions \
1381 occuring across all logical processors sharing a processor core" },
1382 { BITVAL_EOT }
1383 }},
1384 { 9, 1, "EN2_Usr", "R/W", PRESENT_BIN, {
1385 { MSR1(0), "Nothing" },
1386 { MSR1(1), "Fixed counter 2 is enabled to count while CPL > 0" },
1387 { BITVAL_EOT }
1388 }},
1389 { 8, 1, "EN2_OS", "R/W", PRESENT_BIN, {
1390 { MSR1(0), "Nothing" },
1391 { MSR1(1), "Fixed counter 2 is enabled to count while CPL = 0" },
1392 { BITVAL_EOT }
1393 }},
1394 { 7, 1, "EN1_PMI", "R/W", PRESENT_BIN, {
1395 { MSR1(0), "Nothing" },
1396 { MSR1(1), "PMI when fixed counter 1 overflows is enabled" },
1397 { BITVAL_EOT }
1398 }},
1399 /* if CPUID.0AH: EAX[7:0] > 2 */
1400 { 6, 1, "AnyThread 1", "R/W", PRESENT_BIN, {
1401 { MSR1(0), "Counter only increments the associated event \
1402 conditions occuring in the logical processor which programmed the MSR" },
1403 { MSR1(1), "Counting the associated event conditions \
1404 occuring across all logical processors sharing a processor core" },
1405 { BITVAL_EOT }
1406 }},
1407 { 5, 1, "EN1_Usr", "R/W", PRESENT_BIN, {
1408 { MSR1(0), "Nothing" },
1409 { MSR1(1), "Fixed counter 1 is enabled to count while CPL > 0" },
1410 { BITVAL_EOT }
1411 }},
1412 { 4, 1, "EN1_OS", "R/W", PRESENT_BIN, {
1413 { MSR1(0), "Nothing" },
1414 { MSR1(1), "Fixed counter 1 is enabled to count while CPL = 0" },
1415 { BITVAL_EOT }
1416 }},
1417 { 3, 1, "EN0_PMI", "R/W", PRESENT_BIN, {
1418 { MSR1(0), "Nothing" },
1419 { MSR1(1), "PMI when fixed counter 0 overflows is enabled" },
1420 { BITVAL_EOT }
1421 }},
1422 /* if CPUID.0AH: EAX[7:0] > 2 */
1423 { 2, 1, "AnyThread 0", "R/W", PRESENT_BIN, {
1424 { MSR1(0), "Counter only increments the associated event \
1425 conditions occuring in the logical processor which programmed the MSR" },
1426 { MSR1(1), "Counting the associated event conditions \
1427 occuring across all logical processors sharing a processor core" },
1428 { BITVAL_EOT }
1429 }},
1430 { 1, 1, "EN0_Usr", "R/W", PRESENT_BIN, {
1431 { MSR1(0), "Nothing" },
1432 { MSR1(1), "Fixed counter 0 is enabled to count while CPL > 0" },
1433 { BITVAL_EOT }
1434 }},
1435 { 0, 1, "EN0_OS", "R/W", PRESENT_BIN, {
1436 { MSR1(0), "Nothing" },
1437 { MSR1(1), "Fixed counter 0 is enabled to count while CPL = 0" },
1438 { BITVAL_EOT }
1439 }},
1440 { BITS_EOT }
1441 }},
1442 /* if CPUID.0AH: EAX[7:0] > 0 */
1443 {0x38e, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PERF_GLOBAL_STATUS",
1444 "Global Performance Counter Status", {
1445 /* Also known as MSR_PERF_GLOBAL_STATUS */
1446 /* if CPUID.0AH: EAX[7:0] > 0 */
1447 { 63, 1, "CondChg: Status bits of this register has changed",
1448 "R/O", PRESENT_BIN, {
1449 { BITVAL_EOT }
1450 }},
1451 /* if CPUID.0AH: EAX[7:0] > 0 */
1452 { 62, 1, "OvfBuf: DS SAVE area Buffer overflow status",
1453 "R/O", PRESENT_BIN, {
1454 { BITVAL_EOT }
1455 }},
1456 /* if CPUID.0AH: EAX[7:0] > 2 */
1457 { 61, 1, "Ovf_Uncore: Uncore counter overflow status",
1458 "R/O", PRESENT_BIN, {
1459 { BITVAL_EOT }
1460 }},
1461 { 60, 26, RESERVED },
1462 /* if CPUID.0AH: EAX[7:0] > 1 */
1463 { 34, 1, "Ovf_FixedCtr2: Overflow status of IA32_FIXED_CTR2",
1464 "R/O", PRESENT_BIN, {
1465 { BITVAL_EOT }
1466 }},
1467 /* if CPUID.0AH: EAX[7:0] > 1 */
1468 { 33, 1, "Ovf_FixedCtr1: Overflow status of IA32_FIXED_CTR1",
1469 "R/O", PRESENT_BIN, {
1470 { BITVAL_EOT }
1471 }},
1472 /* if CPUID.0AH: EAX[7:0] > 1 */
1473 { 32, 1, "Ovf_FixedCtr0: Overflow status of IA32_FIXED_CTR0",
1474 "R/O", PRESENT_BIN, {
1475 { BITVAL_EOT }
1476 }},
1477 { 31, 28, RESERVED },
1478 /* presented only in 06_2EH Nehalem model */
1479 { 3, 1, "Ovf_PMC3: Overflow status of IA32_PMC3", "R/O", PRESENT_BIN, {
1480 { BITVAL_EOT }
1481 }},
1482 /* presented only in 06_2EH Nehalem model */
1483 { 2, 1, "Ovf_PMC2: Overflow status of IA32_PMC2", "R/O", PRESENT_BIN, {
1484 { BITVAL_EOT }
1485 }},
1486 /* if CPUID.0AH: EAX[7:0] > 0 */
1487 { 1, 1, "Ovf_PMC1: Overflow status of IA32_PMC1", "R/O", PRESENT_BIN, {
1488 { BITVAL_EOT }
1489 }},
1490 /* if CPUID.0AH: EAX[7:0] > 0 */
1491 { 0, 1, "Ovf_PMC0: Overflow status of IA32_PMC0", "R/O", PRESENT_BIN, {
1492 { BITVAL_EOT }
1493 }},
1494 { BITS_EOT }
1495 }},
1496 /* if CPUID.0AH: EAX[7:0] > 0 */
1497 {0x38f, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_GLOBAL_CTL",
1498 "Global Performance Counter Control", {
1499 /* Counter increments while the result of ANDing respective
1500 * enable bit in this MSR with corresponding OS or USR bits
1501 * in general-purpose or fixed counter control MSR is true.
1502 */
1503 { 63, 29, RESERVED },
1504 /* if CPUID.0AH: EAX[7:0] > 1 */
1505 { 34, 1, "EN_FIXED_CTR2", "R/W", PRESENT_BIN, {
1506 { BITVAL_EOT }
1507 }},
1508 /* if CPUID.0AH: EAX[7:0] > 1 */
1509 { 33, 1, "EN_FIXED_CTR1", "R/W", PRESENT_BIN, {
1510 { BITVAL_EOT }
1511 }},
1512 /* if CPUID.0AH: EAX[7:0] > 1 */
1513 { 32, 1, "EN_FIXED_CTR0", "R/W", PRESENT_BIN, {
1514 { BITVAL_EOT }
1515 }},
1516 { 31, 30, RESERVED },
1517 /* if CPUID.0AH: EAX[7:0] > 0 */
1518 { 1, 1, "EN_PMC1", "R/W", PRESENT_BIN, {
1519 { BITVAL_EOT }
1520 }},
1521 /* if CPUID.0AH: EAX[7:0] > 0 */
1522 { 0, 1, "EN_PMC0", "R/W", PRESENT_BIN, {
1523 { BITVAL_EOT }
1524 }},
1525 { BITS_EOT }
1526 }},
1527 /* if CPUID.0AH: EAX[7:0] > 0 */
1528 {0x390, MSRTYPE_RDWR, MSR2(0,0), "IA32_PERF_GLOBAL_OVF_CTL",
1529 "Global Performance Counter Overflow Control", {
1530 /* if CPUID.0AH: EAX[7:0] > 0 */
1531 { 63, 1, "Clear CondChg bit", "R/W", PRESENT_BIN, {
1532 { BITVAL_EOT }
1533 }},
1534 /* if CPUID.0AH: EAX[7:0] > 0 */
1535 { 62, 1, "Clear OvfBuf bit", "R/W", PRESENT_BIN, {
1536 { BITVAL_EOT }
1537 }},
1538 /* Presented only in 06_2EH Nehalem model */
1539 { 61, 1, "Clear Ovf_Uncore bit", "R/W", PRESENT_BIN, {
1540 { BITVAL_EOT }
1541 }},
1542 { 60, 26, RESERVED },
1543 /* if CPUID.0AH: EAX[7:0] > 1 */
1544 { 34, 1, "Clear Ovf_FIXED_CTR2 bit", "R/W", PRESENT_BIN, {
1545 { BITVAL_EOT }
1546 }},
1547 /* if CPUID.0AH: EAX[7:0] > 1 */
1548 { 33, 1, "Clear Ovf_FIXED_CTR1 bit", "R/W", PRESENT_BIN, {
1549 { BITVAL_EOT }
1550 }},
1551 /* if CPUID.0AH: EAX[7:0] > 1 */
1552 { 32, 1, "Clear Ovf_FIXED_CTR0 bit", "R/W", PRESENT_BIN, {
1553 { BITVAL_EOT }
1554 }},
1555 { 31, 30, RESERVED },
1556 /* if CPUID.0AH: EAX[7:0] > 0 */
1557 { 1, 1, "Clear Ovf_PMC1 bit", "R/W", PRESENT_BIN, {
1558 { BITVAL_EOT }
1559 }},
1560 /* if CPUID.0AH: EAX[7:0] > 0 */
1561 { 0, 1, "Clear Ovf_PMC0 bit", "R/W", PRESENT_BIN, {
1562 { BITVAL_EOT }
1563 }},
1564 { BITS_EOT }
1565 }},
1566 /* See Section 18.6.1.1 of Intel 64 and IA-32 Architectures
1567 * Software Developer's Manual, Volume 3,
1568 * "Precise Event Based Sampling (PEBS)".
1569 */
1570 {0x3f1, MSRTYPE_RDWR, MSR2(0,0), "IA32_PEBS_ENABLE", "PEBS Control", {
1571 { 63, 28, RESERVED },
1572 { 35, 1, "Load Latency on IA32_PMC3", "R/W", PRESENT_BIN, {
1573 { MSR1(0), "Disabled" },
1574 { MSR1(1), "Enabled" },
1575 { BITVAL_EOT }
1576 }},
1577 { 34, 1, "Load Latency on IA32_PMC2", "R/W", PRESENT_BIN, {
1578 { MSR1(0), "Disabled" },
1579 { MSR1(1), "Enabled" },
1580 { BITVAL_EOT }
1581 }},
1582 { 33, 1, "Load Latency on IA32_PMC1", "R/W", PRESENT_BIN, {
1583 { MSR1(0), "Disabled" },
1584 { MSR1(1), "Enabled" },
1585 { BITVAL_EOT }
1586 }},
1587 { 32, 1, "Load Latency on IA32_PMC0", "R/W", PRESENT_BIN, {
1588 { MSR1(0), "Disabled" },
1589 { MSR1(1), "Enabled" },
1590 { BITVAL_EOT }
1591 }},
1592 { 31, 28, RESERVED },
1593 { 3, 1, "PEBS on IA32_PMC3", "R/W", PRESENT_BIN, {
1594 { MSR1(0), "Disabled" },
1595 { MSR1(1), "Enabled" },
1596 { BITVAL_EOT }
1597 }},
1598 { 2, 1, "PEBS on IA32_PMC2", "R/W", PRESENT_BIN, {
1599 { MSR1(0), "Disabled" },
1600 { MSR1(1), "Enabled" },
1601 { BITVAL_EOT }
1602 }},
1603 { 1, 1, "PEBS on IA32_PMC1", "R/W", PRESENT_BIN, {
1604 { MSR1(0), "Disabled" },
1605 { MSR1(1), "Enabled" },
1606 { BITVAL_EOT }
1607 }},
1608 { 0, 1, "PEBS on IA32_PMC0", "R/W", PRESENT_BIN, {
1609 { MSR1(0), "Disabled" },
1610 { MSR1(1), "Enabled" },
1611 { BITVAL_EOT }
1612 }},
1613 { BITS_EOT }
1614 }},
1615 {0x3f6, MSRTYPE_RDWR, MSR2(0,0), "MSR_PEBS_LD_LAT", "", {
1616 /* See Section 18.6.1.2 of Intel's manual
1617 * for additional information.
1618 */
1619 { 63, 28, RESERVED },
1620 { 35, 20, RESERVED },
1621 { 15, 16, "Minimum threshold latency value of tagged \
1622 load operation that will be counted", "R/W", PRESENT_DEC, {
1623 { BITVAL_EOT }
1624 }},
1625 { BITS_EOT }
1626 }},
1627 {0x400, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCO_CTL", "", {
1628 { BITS_EOT }
1629 }},
1630 {0x401, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCO_STATUS", "", {
1631 { BITS_EOT }
1632 }},
1633 {0x402, MSRTYPE_RDWR, MSR2(0,0), "IA32_MCO_ADDR", "", {
1634 { BITS_EOT }
1635 }},
1636 {0x403, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC0_MISC", "", {
1637 { BITS_EOT }
1638 }},
1639 {0x404, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_CTL", "", {
1640 { BITS_EOT }
1641 }},
1642 {0x405, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_STATUS", "", {
1643 { BITS_EOT }
1644 }},
1645 {0x406, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_ADDR", "", {
1646 { BITS_EOT }
1647 }},
1648 {0x407, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC1_MISC", "", {
1649 { BITS_EOT }
1650 }},
1651 {0x408, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_CTL", "", {
1652 { BITS_EOT }
1653 }},
1654 {0x409, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_STATUS", "", {
1655 { BITS_EOT }
1656 }},
1657 {0x40a, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_ADDR", "", {
1658 { BITS_EOT }
1659 }},
1660 {0x40b, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC2_MISC", "", {
1661 { BITS_EOT }
1662 }},
1663 {0x40c, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_CTL", "", {
1664 { BITS_EOT }
1665 }},
1666 {0x40d, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_STATUS", "", {
1667 { BITS_EOT }
1668 }},
1669 {0x40e, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_ADDR", "", {
1670 { BITS_EOT }
1671 }},
1672 {0x40f, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC4_MISC", "", {
1673 { BITS_EOT }
1674 }},
1675 {0x410, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_CTL", "", {
1676 { BITS_EOT }
1677 }},
1678 {0x411, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_STATUS", "", {
1679 { BITS_EOT }
1680 }},
1681 {0x412, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_ADDR", "", {
1682 { BITS_EOT }
1683 }},
1684 {0x413, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC3_MISC", "", {
1685 { BITS_EOT }
1686 }},
1687 {0x414, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_CTL", "", {
1688 { BITS_EOT }
1689 }},
1690 {0x415, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_STATUS", "", {
1691 { BITS_EOT }
1692 }},
1693 {0x416, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_ADDR", "", {
1694 { BITS_EOT }
1695 }},
1696 {0x417, MSRTYPE_RDWR, MSR2(0,0), "IA32_MC5_MISC", "", {
1697 { BITS_EOT }
1698 }},
1699 {0x480, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_BASIC",
1700 "Reporting Register of Basic VMX Capabilities", {
1701 /* Additional info available at
1702 * Appendix A.1, "Basic VMX Information" */
1703 { 63, 10, RESERVED },
1704 { 53, 4, "Memory type for VMREAD and VMWRITE", "R/O", PRESENT_HEX, {
1705 { BITVAL_EOT }
1706 }},
1707 { 49, 1, "Support of dual-treatment of system-management functions",
1708 "R/O", PRESENT_BIN, {
1709 { BITVAL_EOT }
1710 }},
1711 { 48, 1, "Enable full linear address access", "R/O", PRESENT_BIN, {
1712 { BITVAL_EOT }
1713 }},
1714 { 47, 3, RESERVED },
1715 { 44, 13, "VMXON region allocation size", "R/O", PRESENT_DEC, {
1716 { BITVAL_EOT }
1717 }},
1718 { 31, 32, "VMCS Revision Identifier", "R/O", PRESENT_HEX, {
1719 { BITVAL_EOT }
1720 }},
1721 { BITS_EOT }
1722 }},
1723 {0x481, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PINBASED_CTLS",
1724 "Capability Reporting Register of \
1725 Pin-based VM-execution Controls", {
1726 /* Additional info available at Appendix A.3,
1727 * "VM-Execution Controls" */
1728 { BITS_EOT }
1729 }},
1730 {0x482, MSRTYPE_RDONLY, MSR2(0,0), "IA32_PROCBASED_CTLS",
1731 "Capability Reporting Register of \
1732 Primary Processor-based VM-execution Controls", {
1733 /* Additional info available at Appendix A.3,
1734 * "VM-Execution Controls" */
1735 { BITS_EOT }
1736 }},
1737 {0x483, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_EXIT_CTLS",
1738 "Capability Reporting Register of VM-exit Controls", {
1739 /* Additional info available at Appendix A.4,
1740 * "VM-Exit Controls" */
1741 { BITS_EOT }
1742 }},
1743 {0x484, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_ENTRY_CTLS",
1744 "Capability Reporting Register of VM-entry Controls", {
1745 /* Additional info available at Appendix A.5,
1746 * "VM-Entry Controls" */
1747 { BITS_EOT }
1748 }},
1749 {0x485, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_MISC",
1750 "Reporting Register of Miscellaneous VMX Capabilities", {
1751 /* Additional info available at Appendix A.6,
1752 * "Miscellaneous Data" */
1753 { BITS_EOT }
1754 }},
1755 {0x486, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR0_FIXED0",
1756 "Capability Reporting Register of CR0 Bits Fixed to 0", {
1757 /* Additional info available at Appendix A.7,
1758 * "VMX-Fixed Bits in CR0" */
1759 { BITS_EOT }
1760 }},
1761 {0x487, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR0_FIXED1",
1762 "Capability Reporting Register of CR0 Bits Fixed to 1", {
1763 /* Additional info available at Appendix A.7,
1764 * "VMX-Fixed Bits in CR0" */
1765 { BITS_EOT }
1766 }},
1767 {0x488, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR4_FIXED0",
1768 "Capability Reporting Register of CR4 Bits Fixed to 0", {
1769 /* Additional info available at Appendix A.8,
1770 * "VMX-Fixed Bits in CR4" */
1771 { BITS_EOT }
1772 }},
1773 {0x489, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_CR4_FIXED1",
1774 "Capability Reporting Register of CR4 Bits Fixed to 1", {
1775 /* Additional info available at Appendix A.8,
1776 * "VMX-Fixed Bits in CR4" */
1777 { BITS_EOT }
1778 }},
1779 {0x48a, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_VMCS_ENUM",
1780 "Capability Reporting Register of VMCS Field Enumeration", {
1781 /* Additional info available at Appendix A.9,
1782 * "VMCS Enumeration" */
1783 { BITS_EOT }
1784 }},
1785 {0x48b, MSRTYPE_RDONLY, MSR2(0,0), "IA32_VMX_PROCBASED_CTLS2",
1786 "Capability Reporting Register of Secondary \
1787 Processor-based VM-execution Controls", {
1788 /* Additional info available at Appendix A.3,
1789 * "VM-Execution Controls" */
1790 { BITS_EOT }
1791 }},
1792 /* Undocumented PECI control register */
1793 {0x5a0, MSRTYPE_RDWR, MSR2(0,0), "IA32_PECI_CTL",
1794 "PECI Control Register", {
1795 { BITS_EOT }
1796 }},
1797 {0x600, MSRTYPE_RDWR, MSR2(0,0), "IA32_DS_AREA", "DS Save Area", {
1798 /* Additional info available at Section 18.10.4 of Intel 64
1799 * and IA-32 Architectures Software Developer's Manual,
1800 * "Debug Store (DS) Mechanism".
1801 */
1802 { 63, 32, RESERVED }, // reserved if not in IA-32e mode
1803 { 31, 32, "Linear address of DS buffer management area",
1804 "R/W", PRESENT_HEX, {
1805 { BITVAL_EOT }
1806 }},
1807 { BITS_EOT }
1808 }},
1809
1810 /* 16 registers - first
1811 * registers in sixteen pairs
1812 * of last branch record registers
1813 * on the last branch record stack
1814 */
1815 {0x680, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_0_FROM_IP", "R/W", {
1816 { BITS_EOT }
1817 }},
1818 {0x681, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_1_FROM_IP", "R/W", {
1819 { BITS_EOT }
1820 }},
1821 {0x682, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_2_FROM_IP", "R/W", {
1822 { BITS_EOT }
1823 }},
1824 {0x683, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_3_FROM_IP", "R/W", {
1825 { BITS_EOT }
1826 }},
1827 {0x684, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_4_FROM_IP", "R/W", {
1828 { BITS_EOT }
1829 }},
1830 {0x685, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_5_FROM_IP", "R/W", {
1831 { BITS_EOT }
1832 }},
1833 {0x686, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_6_FROM_IP", "R/W", {
1834 { BITS_EOT }
1835 }},
1836 {0x687, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_7_FROM_IP", "R/W", {
1837 { BITS_EOT }
1838 }},
1839 {0x688, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_8_FROM_IP", "R/W", {
1840 { BITS_EOT }
1841 }},
1842 {0x689, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_9_FROM_IP", "R/W", {
1843 { BITS_EOT }
1844 }},
1845 {0x68a, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_10_FROM_IP", "R/W", {
1846 { BITS_EOT }
1847 }},
1848 {0x68b, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_11_FROM_IP", "R/W", {
1849 { BITS_EOT }
1850 }},
1851 {0x68c, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_12_FROM_IP", "R/W", {
1852 { BITS_EOT }
1853 }},
1854 {0x68d, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_13_FROM_IP", "R/W", {
1855 { BITS_EOT }
1856 }},
1857 {0x68e, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_14_FROM_IP", "R/W", {
1858 { BITS_EOT }
1859 }},
1860 {0x68f, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_15_FROM_IP", "R/W", {
1861 { BITS_EOT }
1862 }},
1863
1864 /* 16 registers - second
1865 * registers in sixteen pairs
1866 * of last branch record registers
1867 * on the last branch record stack
1868 */
1869 {0x6c0, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_0_TO_LIP", "R/W", {
1870 { BITS_EOT }
1871 }},
1872 {0x6c1, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_1_TO_LIP", "R/W", {
1873 { BITS_EOT }
1874 }},
1875 {0x6c2, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_2_TO_LIP", "R/W", {
1876 { BITS_EOT }
1877 }},
1878 {0x6c3, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_3_TO_LIP", "R/W", {
1879 { BITS_EOT }
1880 }},
1881 {0x6c4, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_4_TO_LIP", "R/W", {
1882 { BITS_EOT }
1883 }},
1884 {0x6c5, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_5_TO_LIP", "R/W", {
1885 { BITS_EOT }
1886 }},
1887 {0x6c6, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_6_TO_LIP", "R/W", {
1888 { BITS_EOT }
1889 }},
1890 {0x6c7, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_7_TO_LIP", "R/W", {
1891 { BITS_EOT }
1892 }},
1893 {0x6c8, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_8_TO_LIP", "R/W", {
1894 { BITS_EOT }
1895 }},
1896 {0x6c9, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_9_TO_LIP", "R/W", {
1897 { BITS_EOT }
1898 }},
1899 {0x6ca, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_10_TO_LIP", "R/W", {
1900 { BITS_EOT }
1901 }},
1902 {0x6cb, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_11_TO_LIP", "R/W", {
1903 { BITS_EOT }
1904 }},
1905 {0x6cc, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_12_TO_LIP", "R/W", {
1906 { BITS_EOT }
1907 }},
1908 {0x6cd, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_13_TO_LIP", "R/W", {
1909 { BITS_EOT }
1910 }},
1911 {0x6ce, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_14_TO_LIP", "R/W", {
1912 { BITS_EOT }
1913 }},
1914 {0x6cf, MSRTYPE_RDWR, MSR2(0,0), "MSR_LASTBRANCH_15_TO_LIP", "R/W", {
1915 { BITS_EOT }
1916 }},
1917
1918 /* x2APIC registers - see Intel 64 Architecture x2APIC Specification */
1919
1920 {0x802, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_APICID",
1921 "x2APIC ID register", {
1922 { BITS_EOT }
1923 }},
1924 {0x803, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_VERSION",
1925 /* Same version between extended and legacy modes.
1926 * Bit 24 is available only to an x2APIC unit. */
1927 "x2APIC Version register", {
1928 { 31, 7, RESERVED },
1929 { 24, 1, "Directed EOI Support", "R/W", PRESENT_BIN, {
1930 { BITVAL_EOT }
1931 }},
1932 { 23, 8, "Max LVT Entry", "R/W", PRESENT_HEX, {
1933 { BITVAL_EOT }
1934 }},
1935 { 15, 8, RESERVED },
1936 { 7, 8, "Vector", "R/W", PRESENT_HEX, {
1937 { BITVAL_EOT }
1938 }},
1939 { BITS_EOT }
1940 }},
1941 {0x808, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_TPR",
1942 "x2APIC Task Priority register", {
1943 { 31, 24, RESERVED },
1944 { 7, 8, "TPR", "R/W", PRESENT_HEX, {
1945 { BITVAL_EOT }
1946 }},
1947 { BITS_EOT }
1948 }},
1949 {0x80a, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_PPR",
1950 "x2APIC Processor Priority register", {
1951 { BITS_EOT }
1952 }},
1953 {0x80b, MSRTYPE_WRONLY, MSR2(0,0), "IA32_X2APIC_EOI",
1954 /* 0 is the only valid value to write. GP fault
1955 * on non-zero write. */
1956 "x2APIC EOI register", {
1957 { BITS_EOT }
1958 }},
1959 {0x80d, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_LDR",
1960 /* Read Only in x2APIC mode, Read-Write in xAPIC mode. */
1961 "x2APIC Logical Destination register", {
1962 { BITS_EOT }
1963 }},
1964 {0x80f, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_SIVR",
1965 "x2APIC Spurious Interrupt Vector register", {
1966 { 31, 19, RESERVED },
1967 { 12, 1, "EOI Broadcast Disable", "R/W", PRESENT_BIN, {
1968 { BITVAL_EOT }
1969 }},
1970 { 11, 3, RESERVED },
1971 { 8, 1, "APIC Software Enable/Disable", "R/W", PRESENT_BIN, {
1972 { MSR1(0), "APIC Disabled" },
1973 { MSR1(1), "APIC Enabled" },
1974 { BITVAL_EOT }
1975 }},
1976 { 7, 8, "Spurious Vector", "R/W", PRESENT_HEX, {
1977 { BITVAL_EOT }
1978 }},
1979 { BITS_EOT }
1980 }},
1981 {0x810, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_0",
1982 "x2APIC In-Service register bits [31:0]", {
1983 { BITS_EOT }
1984 }},
1985 {0x811, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_1",
1986 "x2APIC In-Service register bits [63:32]", {
1987 { BITS_EOT }
1988 }},
1989 {0x812, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_2",
1990 "x2APIC In-Service register bits [95:64]", {
1991 { BITS_EOT }
1992 }},
1993 {0x813, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_3",
1994 "x2APIC In-Service register bits [127:96]", {
1995 { BITS_EOT }
1996 }},
1997 {0x814, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_4",
1998 "x2APIC In-Service register bits [159:128]", {
1999 { BITS_EOT }
2000 }},
2001 {0x815, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_5",
2002 "x2APIC In-Service register bits [191:160]", {
2003 { BITS_EOT }
2004 }},
2005 {0x816, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_6",
2006 "x2APIC In-Service register bits [223:192]", {
2007 { BITS_EOT }
2008 }},
2009 {0x817, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_ISR_7",
2010 "x2APIC In-Service register bits [255:224]", {
2011 { BITS_EOT }
2012 }},
2013 {0x818, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR0",
2014 "x2APIC Trigger Mode register bits [31:0]", {
2015 { BITS_EOT }
2016 }},
2017 {0x819, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR1",
2018 "x2APIC Trigger Mode register bits [63:32]", {
2019 { BITS_EOT }
2020 }},
2021 {0x81a, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR2",
2022 "x2APIC Trigger Mode register bits [95:64]", {
2023 { BITS_EOT }
2024 }},
2025 {0x81b, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR3",
2026 "x2APIC Trigger Mode register bits [127:96]", {
2027 { BITS_EOT }
2028 }},
2029 {0x81c, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR4",
2030 "x2APIC Trigger Mode register bits [159:128]", {
2031 { BITS_EOT }
2032 }},
2033 {0x81d, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR5",
2034 "x2APIC Trigger Mode register bits [191:160]", {
2035 { BITS_EOT }
2036 }},
2037 {0x81e, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR6",
2038 "x2APIC Trigger Mode register bits [223:192]", {
2039 { BITS_EOT }
2040 }},
2041 {0x81f, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_TMR7",
2042 "x2APIC Trigger Mode register bits [255:224]", {
2043 { BITS_EOT }
2044 }},
2045 {0x820, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR0",
2046 "x2APIC Interrupt Request register bits [31:0]", {
2047 { BITS_EOT }
2048 }},
2049 {0x821, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR1",
2050 "x2APIC Trigger Mode register bits [63:32]", {
2051 { BITS_EOT }
2052 }},
2053 {0x822, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR2",
2054 "x2APIC Trigger Mode register bits [95:64]", {
2055 { BITS_EOT }
2056 }},
2057 {0x823, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR3",
2058 "x2APIC Trigger Mode register bits [127:96]", {
2059 { BITS_EOT }
2060 }},
2061 {0x824, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR4",
2062 "x2APIC Trigger Mode register bits [159:128]", {
2063 { BITS_EOT }
2064 }},
2065 {0x825, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR5",
2066 "x2APIC Trigger Mode register bits [191:160]", {
2067 { BITS_EOT }
2068 }},
2069 {0x826, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR6",
2070 "x2APIC Trigger Mode register bits [223:192]", {
2071 { BITS_EOT }
2072 }},
2073 {0x827, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_IRR7",
2074 "x2APIC Trigger Mode register bits [255:224]", {
2075 { BITS_EOT }
2076 }},
2077 {0x828, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_ESR",
2078 /* GP fault on non-zero writes. */
2079 "x2APIC Error Status register", {
2080 { 31, 24, RESERVED },
2081 { 7, 1, "Illegal Register Address", "R/O", PRESENT_BIN, {
2082 { BITVAL_EOT }
2083 }},
2084 { 6, 1, "Received Illegal Vector", "R/O", PRESENT_BIN, {
2085 { BITVAL_EOT }
2086 }},
2087 { 5, 1, "Send Illegal Vector", "R/O", PRESENT_BIN, {
2088 { BITVAL_EOT }
2089 }},
2090 { 4, 1, "Redirectible IPI", "R/O", PRESENT_BIN, {
2091 { BITVAL_EOT }
2092 }},
2093 { 3, 4, RESERVED },
2094 { BITS_EOT }
2095 }},
2096 {0x82f, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_LVT_CMCI",
2097 "x2APIC LVT Corrected Machine Check Interrupt register", {
2098 { BITS_EOT }
2099 }},
2100 {0x830, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_ICR",
2101 "x2APIC Interrupt Command register", {
2102 { 63, 32, "Destination field", "R/W", PRESENT_HEX, {
2103 { BITVAL_EOT }
2104 }},
2105 { 31, 12, RESERVED },
2106 { 19, 2, "Destination Shorthand", "R/W", PRESENT_BIN, {
2107 { MSR1(0), "No Shorthand" },
2108 { MSR1(1), "Self" },
2109 { MSR1(2), "All including Self" },
2110 { MSR1(3), "All excluding Self" },
2111 { BITVAL_EOT }
2112 }},
2113 { 17, 2, RESERVED },
2114 { 15, 1, "Trigger Mode", "R/W", PRESENT_BIN, {
2115 { MSR1(0), "Edge" },
2116 { MSR1(1), "Level" },
2117 { BITVAL_EOT }
2118 }},
2119 { 14, 1, "Level", "R/W", PRESENT_BIN, {
2120 { MSR1(0), "De-assert" },
2121 { MSR1(1), "Assert" },
2122 { BITVAL_EOT }
2123 }},
2124 { 13, 2, RESERVED },
2125 { 11, 1, "Destination Mode", "R/W", PRESENT_BIN, {
2126 { MSR1(0), "Physical" },
2127 { MSR1(1), "Logical" },
2128 { BITVAL_EOT }
2129 }},
2130 { 10, 3, "Delivery Mode", "R/W", PRESENT_BIN, {
2131 { MSR1(0), "Fixed" },
2132 { MSR1(1), "Reserved" },
2133 { MSR1(2), "SMI" },
2134 { MSR1(3), "Reserved" },
2135 { MSR1(4), "NMI" },
2136 { MSR1(5), "INIT" },
2137 { MSR1(6), "Start Up" },
2138 { MSR1(7), "Reserved" },
2139 { BITVAL_EOT }
2140 }},
2141 { 7, 8, "Vector", "R/W", PRESENT_HEX, {
2142 { BITVAL_EOT }
2143 }},
2144 { BITS_EOT }
2145 }},
2146 {0x832, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_LVT_TIMER",
2147 "x2APIC LVT Timer Interrupt register", {
2148 { BITS_EOT }
2149 }},
2150 {0x833, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_LVT_THERMAL",
2151 "x2APIC LVT Thermal Sensor Interrupt register", {
2152 { BITS_EOT }
2153 }},
2154 {0x834, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_LVT_PMI",
2155 "x2APIC LVT Performance Monitor register", {
2156 { BITS_EOT }
2157 }},
2158 {0x835, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_LVT_LINT0",
2159 "x2APIC LVT LINT0 register", {
2160 { BITS_EOT }
2161 }},
2162 {0x836, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_LVT_LINT1",
2163 "x2APIC LVT LINT1 register", {
2164 { BITS_EOT }
2165 }},
2166 {0x837, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_LVT_ERROR",
2167 "x2APIC LVT Error register", {
2168 { BITS_EOT }
2169 }},
2170 {0x838, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_INIT_COUNT",
2171 "x2APIC Initial Count register", {
2172 { BITS_EOT }
2173 }},
2174 {0x839, MSRTYPE_RDONLY, MSR2(0,0), "IA32_X2APIC_CUR_COUNT",
2175 "x2APIC Current Count register", {
2176 { BITS_EOT }
2177 }},
2178 {0x83e, MSRTYPE_RDWR, MSR2(0,0), "IA32_X2APIC_DIV_CONF",
2179 "x2APIC Divide Configuration register", {
2180 { BITS_EOT }
2181 }},
2182 {0x83f, MSRTYPE_WRONLY, MSR2(0,0), "IA32_X2APIC_SELF_IPI",
2183 "x2APIC Self IPI register", {
2184 /* Only in x2APIC mode. */
2185 { 31, 24, RESERVED },
2186 { 7, 8, "Vector", "R/W", PRESENT_HEX, {
2187 { BITVAL_EOT }
2188 }},
2189 { BITS_EOT }
2190 }},
2191 {0x107cc, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL0", "", {
2192 { BITS_EOT }
2193 }},
2194 {0x107cd, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL1", "", {
2195 { BITS_EOT }
2196 }},
2197 {0x107ce, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL2", "", {
2198 { BITS_EOT }
2199 }},
2200 {0x107cf, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL3", "", {
2201 { BITS_EOT }
2202 }},
2203 {0x107d0, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL4", "", {
2204 { BITS_EOT }
2205 }},
2206 {0x107d1, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL5", "", {
2207 { BITS_EOT }
2208 }},
2209 {0x107d2, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL6", "", {
2210 { BITS_EOT }
2211 }},
2212 {0x107d3, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_CTR_CTL7", "", {
2213 { BITS_EOT }
2214 }},
2215 {0x107d8, MSRTYPE_RDWR, MSR2(0,0), "MSR_EMON_L3_GL_CTL", "", {
2216 { BITS_EOT }
2217 }},
2218 /* if CPUID.80000001H: EDX[29] = 1 or CPUID.80000001H: EDX[27] = 1 */
2219 {0xc0000080, MSRTYPE_RDWR, MSR2(0,0), "IA32_EFER",
2220 "Extended Feature Enables", {
2221 { 63, 52, RESERVED },
2222 { 11, 1, "Execute Disable Bit", "R/O", PRESENT_BIN, {
2223 { MSR1(0), "NX bit disabled" },
2224 { MSR1(1), "NX bit enabled" },
2225 { BITVAL_EOT }
2226 }},
2227 { 10, 1, "IA-32e Mode", "R/O", PRESENT_BIN, {
2228 { MSR1(0), "IA-32e Mode Inactive" },
2229 { MSR1(1), "IA-32e Mode Active" },
2230 { BITVAL_EOT }
2231 }},
2232 { 9, 1, RESERVED },
2233 { 8, 1, "IA-32e Mode Control", "R/W", PRESENT_BIN, {
2234 /* Enable IA-32e Mode operation */
2235 { BITVAL_EOT }
2236 }},
2237 { 7, 7, RESERVED },
2238 { 0, 1, "SYSCALL Control", "R/W", PRESENT_BIN, {
2239 /* Enable SYSCALL/SYSRET instructions
2240 * in 64-bit mode. */
2241 { BITVAL_EOT }
2242 }},
2243 { BITS_EOT }
2244 }},
2245 /* if CPUID.80000001H: EDX[29] = 1 */
2246 {0xc0000081, MSRTYPE_RDWR, MSR2(0,0), "IA32_STAR",
2247 "System Call Target Address", {
2248 { BITS_EOT }
2249 }},
2250 /* if CPUID.80000001H: EDX[29] = 1 */
2251 {0xc0000082, MSRTYPE_RDWR, MSR2(0,0), "IA32_LSTAR",
2252 "IA32e Mode System Call Target Address", {
2253 { BITS_EOT }
2254 }},
2255 /* if CPUID.80000001H: EDX[29] = 1 */
2256 {0xc0000084, MSRTYPE_RDWR, MSR2(0,0), "IA32_FMASK",
2257 "System Call Flag Mask", {
2258 { BITS_EOT }
2259 }},
2260 /* if CPUID.80000001H: EDX[29] = 1 */
2261 {0xc0000100, MSRTYPE_RDWR, MSR2(0,0), "IA32_FS_BASE",
2262 "Map of BASE Address of FS", {
2263 { BITS_EOT }
2264 }},
2265 /* if CPUID.80000001H: EDX[29] = 1 */
2266 {0xc0000101, MSRTYPE_RDWR, MSR2(0,0), "IA32_GS_BASE",
2267 "Map of BASE Address of GS", {
2268 { BITS_EOT }
2269 }},
2270 /* if CPUID.80000001H: EDX[29] = 1 */
2271 {0xc0000102, MSRTYPE_RDWR, MSR2(0,0), "IA32_KERNEL_GS_BASE",
2272 "Swap Target of BASE Address of GS", {
2273 { BITS_EOT }
2274 }},
2275 /* if CPUID.80000001H: EDX[27] = 1 */
2276 {0xc0000103, MSRTYPE_RDWR, MSR2(0,0), "IA32_TSC_AUX",
2277 "AUXILIARY TSC Signature", {
2278 { BITS_EOT }
2279 }},
2280 { MSR_EOT }
2281};
2282
2283