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