/** * @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 */