blob: 06b73295fe2be2abb7ccc3e2be161bae545918e2 [file] [log] [blame]
/**
* @file op_msr.h
* x86-specific MSR stuff
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author John Levon
* @author Philippe Elie
*/
#ifndef OP_MSR_H
#define OP_MSR_H
/* work-around compiler bug in gcc 2.91.66, just mark all input register as
* magically cloberred by wrmsr */
#if __GNUC__ == 2 && __GNUC_MINOR__ == 91
#undef wrmsr
#define wrmsr(msr, val1, val2) \
__asm__ __volatile__("wrmsr" \
/* no outputs */ \
: \
: "c" (msr), "a" (val1), "d" (val2) \
: "ecx", "eax", "edx")
#endif
#ifndef MSR_IA32_MISC_ENABLE
#define MSR_IA32_MISC_ENABLE 0x1a0
#endif
/* MSRs */
#ifndef MSR_P6_PERFCTR0
#define MSR_P6_PERFCTR0 0xc1
#endif
#ifndef MSR_P6_PERFCTR1
#define MSR_P6_PERFCTR1 0xc2
#endif
#ifndef MSR_P6_EVNTSEL0
#define MSR_P6_EVNTSEL0 0x186
#endif
#ifndef MSR_P6_EVNTSEL1
#define MSR_P6_EVNTSEL1 0x187
#endif
#ifndef MSR_K7_EVNTSEL0
#define MSR_K7_EVNTSEL0 0xc0010000
#endif
#ifndef MSR_K7_EVNTSEL1
#define MSR_K7_EVNTSEL1 0xc0010001
#endif
#ifndef MSR_K7_EVNTSEL2
#define MSR_K7_EVNTSEL2 0xc0010002
#endif
#ifndef MSR_K7_EVNTSEL3
#define MSR_K7_EVNTSEL3 0xc0010003
#endif
#ifndef MSR_K7_PERFCTR0
#define MSR_K7_PERFCTR0 0xc0010004
#endif
#ifndef MSR_K7_PERFCTR1
#define MSR_K7_PERFCTR1 0xc0010005
#endif
#ifndef MSR_K7_PERFCTR2
#define MSR_K7_PERFCTR2 0xc0010006
#endif
#ifndef MSR_K7_PERFCTR3
#define MSR_K7_PERFCTR3 0xc0010007
#endif
/* There are *82* pentium 4 MSRs:
- 1 misc register
- 18 counters (PERFCTRs)
- 18 counter configuration control registers (CCCRs)
- 45 event selection control registers (ESCRs). */
#ifndef MSR_P4_BPU_PERFCTR0
#define MSR_P4_BPU_PERFCTR0 0x300
#endif
#ifndef MSR_P4_BPU_PERFCTR1
#define MSR_P4_BPU_PERFCTR1 0x301
#endif
#ifndef MSR_P4_BPU_PERFCTR2
#define MSR_P4_BPU_PERFCTR2 0x302
#endif
#ifndef MSR_P4_BPU_PERFCTR3
#define MSR_P4_BPU_PERFCTR3 0x303
#endif
#ifndef MSR_P4_MS_PERFCTR0
#define MSR_P4_MS_PERFCTR0 0x304
#endif
#ifndef MSR_P4_MS_PERFCTR1
#define MSR_P4_MS_PERFCTR1 0x305
#endif
#ifndef MSR_P4_MS_PERFCTR2
#define MSR_P4_MS_PERFCTR2 0x306
#endif
#ifndef MSR_P4_MS_PERFCTR3
#define MSR_P4_MS_PERFCTR3 0x307
#endif
#ifndef MSR_P4_FLAME_PERFCTR0
#define MSR_P4_FLAME_PERFCTR0 0x308
#endif
#ifndef MSR_P4_FLAME_PERFCTR1
#define MSR_P4_FLAME_PERFCTR1 0x309
#endif
#ifndef MSR_P4_FLAME_PERFCTR2
#define MSR_P4_FLAME_PERFCTR2 0x30a
#endif
#ifndef MSR_P4_FLAME_PERFCTR3
#define MSR_P4_FLAME_PERFCTR3 0x30b
#endif
#ifndef MSR_P4_IQ_PERFCTR0
#define MSR_P4_IQ_PERFCTR0 0x30c
#endif
#ifndef MSR_P4_IQ_PERFCTR1
#define MSR_P4_IQ_PERFCTR1 0x30d
#endif
#ifndef MSR_P4_IQ_PERFCTR2
#define MSR_P4_IQ_PERFCTR2 0x30e
#endif
#ifndef MSR_P4_IQ_PERFCTR3
#define MSR_P4_IQ_PERFCTR3 0x30f
#endif
#ifndef MSR_P4_IQ_PERFCTR4
#define MSR_P4_IQ_PERFCTR4 0x310
#endif
#ifndef MSR_P4_IQ_PERFCTR5
#define MSR_P4_IQ_PERFCTR5 0x311
#endif
#ifndef MSR_P4_BPU_CCCR0
#define MSR_P4_BPU_CCCR0 0x360
#endif
#ifndef MSR_P4_BPU_CCCR1
#define MSR_P4_BPU_CCCR1 0x361
#endif
#ifndef MSR_P4_BPU_CCCR2
#define MSR_P4_BPU_CCCR2 0x362
#endif
#ifndef MSR_P4_BPU_CCCR3
#define MSR_P4_BPU_CCCR3 0x363
#endif
#ifndef MSR_P4_MS_CCCR0
#define MSR_P4_MS_CCCR0 0x364
#endif
#ifndef MSR_P4_MS_CCCR1
#define MSR_P4_MS_CCCR1 0x365
#endif
#ifndef MSR_P4_MS_CCCR2
#define MSR_P4_MS_CCCR2 0x366
#endif
#ifndef MSR_P4_MS_CCCR3
#define MSR_P4_MS_CCCR3 0x367
#endif
#ifndef MSR_P4_FLAME_CCCR0
#define MSR_P4_FLAME_CCCR0 0x368
#endif
#ifndef MSR_P4_FLAME_CCCR1
#define MSR_P4_FLAME_CCCR1 0x369
#endif
#ifndef MSR_P4_FLAME_CCCR2
#define MSR_P4_FLAME_CCCR2 0x36a
#endif
#ifndef MSR_P4_FLAME_CCCR3
#define MSR_P4_FLAME_CCCR3 0x36b
#endif
#ifndef MSR_P4_IQ_CCCR0
#define MSR_P4_IQ_CCCR0 0x36c
#endif
#ifndef MSR_P4_IQ_CCCR1
#define MSR_P4_IQ_CCCR1 0x36d
#endif
#ifndef MSR_P4_IQ_CCCR2
#define MSR_P4_IQ_CCCR2 0x36e
#endif
#ifndef MSR_P4_IQ_CCCR3
#define MSR_P4_IQ_CCCR3 0x36f
#endif
#ifndef MSR_P4_IQ_CCCR4
#define MSR_P4_IQ_CCCR4 0x370
#endif
#ifndef MSR_P4_IQ_CCCR5
#define MSR_P4_IQ_CCCR5 0x371
#endif
#ifndef MSR_P4_ALF_ESCR0
#define MSR_P4_ALF_ESCR0 0x3ca
#endif
#ifndef MSR_P4_ALF_ESCR1
#define MSR_P4_ALF_ESCR1 0x3cb
#endif
#ifndef MSR_P4_BPU_ESCR0
#define MSR_P4_BPU_ESCR0 0x3b2
#endif
#ifndef MSR_P4_BPU_ESCR1
#define MSR_P4_BPU_ESCR1 0x3b3
#endif
#ifndef MSR_P4_BSU_ESCR0
#define MSR_P4_BSU_ESCR0 0x3a0
#endif
#ifndef MSR_P4_BSU_ESCR1
#define MSR_P4_BSU_ESCR1 0x3a1
#endif
#ifndef MSR_P4_CRU_ESCR0
#define MSR_P4_CRU_ESCR0 0x3b8
#endif
#ifndef MSR_P4_CRU_ESCR1
#define MSR_P4_CRU_ESCR1 0x3b9
#endif
#ifndef MSR_P4_CRU_ESCR2
#define MSR_P4_CRU_ESCR2 0x3cc
#endif
#ifndef MSR_P4_CRU_ESCR3
#define MSR_P4_CRU_ESCR3 0x3cd
#endif
#ifndef MSR_P4_CRU_ESCR4
#define MSR_P4_CRU_ESCR4 0x3e0
#endif
#ifndef MSR_P4_CRU_ESCR5
#define MSR_P4_CRU_ESCR5 0x3e1
#endif
#ifndef MSR_P4_DAC_ESCR0
#define MSR_P4_DAC_ESCR0 0x3a8
#endif
#ifndef MSR_P4_DAC_ESCR1
#define MSR_P4_DAC_ESCR1 0x3a9
#endif
#ifndef MSR_P4_FIRM_ESCR0
#define MSR_P4_FIRM_ESCR0 0x3a4
#endif
#ifndef MSR_P4_FIRM_ESCR1
#define MSR_P4_FIRM_ESCR1 0x3a5
#endif
#ifndef MSR_P4_FLAME_ESCR0
#define MSR_P4_FLAME_ESCR0 0x3a6
#endif
#ifndef MSR_P4_FLAME_ESCR1
#define MSR_P4_FLAME_ESCR1 0x3a7
#endif
#ifndef MSR_P4_FSB_ESCR0
#define MSR_P4_FSB_ESCR0 0x3a2
#endif
#ifndef MSR_P4_FSB_ESCR1
#define MSR_P4_FSB_ESCR1 0x3a3
#endif
#ifndef MSR_P4_IQ_ESCR0
#define MSR_P4_IQ_ESCR0 0x3ba
#endif
#ifndef MSR_P4_IQ_ESCR1
#define MSR_P4_IQ_ESCR1 0x3bb
#endif
#ifndef MSR_P4_IS_ESCR0
#define MSR_P4_IS_ESCR0 0x3b4
#endif
#ifndef MSR_P4_IS_ESCR1
#define MSR_P4_IS_ESCR1 0x3b5
#endif
#ifndef MSR_P4_ITLB_ESCR0
#define MSR_P4_ITLB_ESCR0 0x3b6
#endif
#ifndef MSR_P4_ITLB_ESCR1
#define MSR_P4_ITLB_ESCR1 0x3b7
#endif
#ifndef MSR_P4_IX_ESCR0
#define MSR_P4_IX_ESCR0 0x3c8
#endif
#ifndef MSR_P4_IX_ESCR1
#define MSR_P4_IX_ESCR1 0x3c9
#endif
#ifndef MSR_P4_MOB_ESCR0
#define MSR_P4_MOB_ESCR0 0x3aa
#endif
#ifndef MSR_P4_MOB_ESCR1
#define MSR_P4_MOB_ESCR1 0x3ab
#endif
#ifndef MSR_P4_MS_ESCR0
#define MSR_P4_MS_ESCR0 0x3c0
#endif
#ifndef MSR_P4_MS_ESCR1
#define MSR_P4_MS_ESCR1 0x3c1
#endif
#ifndef MSR_P4_PMH_ESCR0
#define MSR_P4_PMH_ESCR0 0x3ac
#endif
#ifndef MSR_P4_PMH_ESCR1
#define MSR_P4_PMH_ESCR1 0x3ad
#endif
#ifndef MSR_P4_RAT_ESCR0
#define MSR_P4_RAT_ESCR0 0x3bc
#endif
#ifndef MSR_P4_RAT_ESCR1
#define MSR_P4_RAT_ESCR1 0x3bd
#endif
#ifndef MSR_P4_SAAT_ESCR0
#define MSR_P4_SAAT_ESCR0 0x3ae
#endif
#ifndef MSR_P4_SAAT_ESCR1
#define MSR_P4_SAAT_ESCR1 0x3af
#endif
#ifndef MSR_P4_SSU_ESCR0
#define MSR_P4_SSU_ESCR0 0x3be
#endif
/* guess: not defined in manual */
#ifndef MSR_P4_SSU_ESCR1
#define MSR_P4_SSU_ESCR1 0x3bf
#endif
#ifndef MSR_P4_TBPU_ESCR0
#define MSR_P4_TBPU_ESCR0 0x3c2
#endif
#ifndef MSR_P4_TBPU_ESCR1
#define MSR_P4_TBPU_ESCR1 0x3c3
#endif
#ifndef MSR_P4_TC_ESCR0
#define MSR_P4_TC_ESCR0 0x3c4
#endif
#ifndef MSR_P4_TC_ESCR1
#define MSR_P4_TC_ESCR1 0x3c5
#endif
#ifndef MSR_P4_U2L_ESCR0
#define MSR_P4_U2L_ESCR0 0x3b0
#endif
#ifndef MSR_P4_U2L_ESCR1
#define MSR_P4_U2L_ESCR1 0x3b1
#endif
/* Hyper-Threading */
#ifndef X86_FEATURE_HT
#define X86_FEATURE_HT (0*32+28)
#endif
#endif /* OP_MSR_H */