Home | History | Annotate | Download | only in x86
      1 /**
      2  * @file op_msr.h
      3  * x86-specific MSR stuff
      4  *
      5  * @remark Copyright 2002 OProfile authors
      6  * @remark Read the file COPYING
      7  *
      8  * @author John Levon
      9  * @author Philippe Elie
     10  */
     11 
     12 #ifndef OP_MSR_H
     13 #define OP_MSR_H
     14 
     15 /* work-around compiler bug in gcc 2.91.66, just mark all input register as
     16  * magically cloberred by wrmsr */
     17 #if __GNUC__ == 2 && __GNUC_MINOR__ == 91
     18 	#undef wrmsr
     19 	#define wrmsr(msr, val1, val2)				\
     20 		__asm__ __volatile__("wrmsr"			\
     21 			/* no outputs */			\
     22 			:					\
     23 			: "c" (msr), "a" (val1), "d" (val2)	\
     24 			: "ecx", "eax", "edx")
     25 #endif
     26 
     27 #ifndef MSR_IA32_MISC_ENABLE
     28 #define MSR_IA32_MISC_ENABLE 0x1a0
     29 #endif
     30 
     31 /* MSRs */
     32 #ifndef MSR_P6_PERFCTR0
     33 #define MSR_P6_PERFCTR0 0xc1
     34 #endif
     35 #ifndef MSR_P6_PERFCTR1
     36 #define MSR_P6_PERFCTR1 0xc2
     37 #endif
     38 #ifndef MSR_P6_EVNTSEL0
     39 #define MSR_P6_EVNTSEL0 0x186
     40 #endif
     41 #ifndef MSR_P6_EVNTSEL1
     42 #define MSR_P6_EVNTSEL1 0x187
     43 #endif
     44 #ifndef MSR_K7_EVNTSEL0
     45 #define MSR_K7_EVNTSEL0 0xc0010000
     46 #endif
     47 #ifndef MSR_K7_EVNTSEL1
     48 #define MSR_K7_EVNTSEL1 0xc0010001
     49 #endif
     50 #ifndef MSR_K7_EVNTSEL2
     51 #define MSR_K7_EVNTSEL2 0xc0010002
     52 #endif
     53 #ifndef MSR_K7_EVNTSEL3
     54 #define MSR_K7_EVNTSEL3 0xc0010003
     55 #endif
     56 #ifndef MSR_K7_PERFCTR0
     57 #define MSR_K7_PERFCTR0 0xc0010004
     58 #endif
     59 #ifndef MSR_K7_PERFCTR1
     60 #define MSR_K7_PERFCTR1 0xc0010005
     61 #endif
     62 #ifndef MSR_K7_PERFCTR2
     63 #define MSR_K7_PERFCTR2 0xc0010006
     64 #endif
     65 #ifndef MSR_K7_PERFCTR3
     66 #define MSR_K7_PERFCTR3 0xc0010007
     67 #endif
     68 
     69 /* There are *82* pentium 4 MSRs:
     70 
     71    - 1 misc register
     72 
     73    - 18 counters (PERFCTRs)
     74 
     75    - 18 counter configuration control registers (CCCRs)
     76 
     77    - 45 event selection control registers (ESCRs). */
     78 
     79 
     80 #ifndef MSR_P4_BPU_PERFCTR0
     81 #define MSR_P4_BPU_PERFCTR0 0x300
     82 #endif
     83 #ifndef MSR_P4_BPU_PERFCTR1
     84 #define MSR_P4_BPU_PERFCTR1 0x301
     85 #endif
     86 #ifndef MSR_P4_BPU_PERFCTR2
     87 #define MSR_P4_BPU_PERFCTR2 0x302
     88 #endif
     89 #ifndef MSR_P4_BPU_PERFCTR3
     90 #define MSR_P4_BPU_PERFCTR3 0x303
     91 #endif
     92 #ifndef MSR_P4_MS_PERFCTR0
     93 #define MSR_P4_MS_PERFCTR0 0x304
     94 #endif
     95 #ifndef MSR_P4_MS_PERFCTR1
     96 #define MSR_P4_MS_PERFCTR1 0x305
     97 #endif
     98 #ifndef MSR_P4_MS_PERFCTR2
     99 #define MSR_P4_MS_PERFCTR2 0x306
    100 #endif
    101 #ifndef MSR_P4_MS_PERFCTR3
    102 #define MSR_P4_MS_PERFCTR3 0x307
    103 #endif
    104 #ifndef MSR_P4_FLAME_PERFCTR0
    105 #define MSR_P4_FLAME_PERFCTR0 0x308
    106 #endif
    107 #ifndef MSR_P4_FLAME_PERFCTR1
    108 #define MSR_P4_FLAME_PERFCTR1 0x309
    109 #endif
    110 #ifndef MSR_P4_FLAME_PERFCTR2
    111 #define MSR_P4_FLAME_PERFCTR2 0x30a
    112 #endif
    113 #ifndef MSR_P4_FLAME_PERFCTR3
    114 #define MSR_P4_FLAME_PERFCTR3 0x30b
    115 #endif
    116 #ifndef MSR_P4_IQ_PERFCTR0
    117 #define MSR_P4_IQ_PERFCTR0 0x30c
    118 #endif
    119 #ifndef MSR_P4_IQ_PERFCTR1
    120 #define MSR_P4_IQ_PERFCTR1 0x30d
    121 #endif
    122 #ifndef MSR_P4_IQ_PERFCTR2
    123 #define MSR_P4_IQ_PERFCTR2 0x30e
    124 #endif
    125 #ifndef MSR_P4_IQ_PERFCTR3
    126 #define MSR_P4_IQ_PERFCTR3 0x30f
    127 #endif
    128 #ifndef MSR_P4_IQ_PERFCTR4
    129 #define MSR_P4_IQ_PERFCTR4 0x310
    130 #endif
    131 #ifndef MSR_P4_IQ_PERFCTR5
    132 #define MSR_P4_IQ_PERFCTR5 0x311
    133 #endif
    134 
    135 
    136 #ifndef MSR_P4_BPU_CCCR0
    137 #define MSR_P4_BPU_CCCR0 0x360
    138 #endif
    139 #ifndef MSR_P4_BPU_CCCR1
    140 #define MSR_P4_BPU_CCCR1 0x361
    141 #endif
    142 #ifndef MSR_P4_BPU_CCCR2
    143 #define MSR_P4_BPU_CCCR2 0x362
    144 #endif
    145 #ifndef MSR_P4_BPU_CCCR3
    146 #define MSR_P4_BPU_CCCR3 0x363
    147 #endif
    148 #ifndef MSR_P4_MS_CCCR0
    149 #define MSR_P4_MS_CCCR0 0x364
    150 #endif
    151 #ifndef MSR_P4_MS_CCCR1
    152 #define MSR_P4_MS_CCCR1 0x365
    153 #endif
    154 #ifndef MSR_P4_MS_CCCR2
    155 #define MSR_P4_MS_CCCR2 0x366
    156 #endif
    157 #ifndef MSR_P4_MS_CCCR3
    158 #define MSR_P4_MS_CCCR3 0x367
    159 #endif
    160 #ifndef MSR_P4_FLAME_CCCR0
    161 #define MSR_P4_FLAME_CCCR0 0x368
    162 #endif
    163 #ifndef MSR_P4_FLAME_CCCR1
    164 #define MSR_P4_FLAME_CCCR1 0x369
    165 #endif
    166 #ifndef MSR_P4_FLAME_CCCR2
    167 #define MSR_P4_FLAME_CCCR2 0x36a
    168 #endif
    169 #ifndef MSR_P4_FLAME_CCCR3
    170 #define MSR_P4_FLAME_CCCR3 0x36b
    171 #endif
    172 #ifndef MSR_P4_IQ_CCCR0
    173 #define MSR_P4_IQ_CCCR0 0x36c
    174 #endif
    175 #ifndef MSR_P4_IQ_CCCR1
    176 #define MSR_P4_IQ_CCCR1 0x36d
    177 #endif
    178 #ifndef MSR_P4_IQ_CCCR2
    179 #define MSR_P4_IQ_CCCR2 0x36e
    180 #endif
    181 #ifndef MSR_P4_IQ_CCCR3
    182 #define MSR_P4_IQ_CCCR3 0x36f
    183 #endif
    184 #ifndef MSR_P4_IQ_CCCR4
    185 #define MSR_P4_IQ_CCCR4 0x370
    186 #endif
    187 #ifndef MSR_P4_IQ_CCCR5
    188 #define MSR_P4_IQ_CCCR5 0x371
    189 #endif
    190 
    191 
    192 #ifndef MSR_P4_ALF_ESCR0
    193 #define MSR_P4_ALF_ESCR0 0x3ca
    194 #endif
    195 #ifndef MSR_P4_ALF_ESCR1
    196 #define MSR_P4_ALF_ESCR1 0x3cb
    197 #endif
    198 #ifndef MSR_P4_BPU_ESCR0
    199 #define MSR_P4_BPU_ESCR0 0x3b2
    200 #endif
    201 #ifndef MSR_P4_BPU_ESCR1
    202 #define MSR_P4_BPU_ESCR1 0x3b3
    203 #endif
    204 #ifndef MSR_P4_BSU_ESCR0
    205 #define MSR_P4_BSU_ESCR0 0x3a0
    206 #endif
    207 #ifndef MSR_P4_BSU_ESCR1
    208 #define MSR_P4_BSU_ESCR1 0x3a1
    209 #endif
    210 #ifndef MSR_P4_CRU_ESCR0
    211 #define MSR_P4_CRU_ESCR0 0x3b8
    212 #endif
    213 #ifndef MSR_P4_CRU_ESCR1
    214 #define MSR_P4_CRU_ESCR1 0x3b9
    215 #endif
    216 #ifndef MSR_P4_CRU_ESCR2
    217 #define MSR_P4_CRU_ESCR2 0x3cc
    218 #endif
    219 #ifndef MSR_P4_CRU_ESCR3
    220 #define MSR_P4_CRU_ESCR3 0x3cd
    221 #endif
    222 #ifndef MSR_P4_CRU_ESCR4
    223 #define MSR_P4_CRU_ESCR4 0x3e0
    224 #endif
    225 #ifndef MSR_P4_CRU_ESCR5
    226 #define MSR_P4_CRU_ESCR5 0x3e1
    227 #endif
    228 #ifndef MSR_P4_DAC_ESCR0
    229 #define MSR_P4_DAC_ESCR0 0x3a8
    230 #endif
    231 #ifndef MSR_P4_DAC_ESCR1
    232 #define MSR_P4_DAC_ESCR1 0x3a9
    233 #endif
    234 #ifndef MSR_P4_FIRM_ESCR0
    235 #define MSR_P4_FIRM_ESCR0 0x3a4
    236 #endif
    237 #ifndef MSR_P4_FIRM_ESCR1
    238 #define MSR_P4_FIRM_ESCR1 0x3a5
    239 #endif
    240 #ifndef MSR_P4_FLAME_ESCR0
    241 #define MSR_P4_FLAME_ESCR0 0x3a6
    242 #endif
    243 #ifndef MSR_P4_FLAME_ESCR1
    244 #define MSR_P4_FLAME_ESCR1 0x3a7
    245 #endif
    246 #ifndef MSR_P4_FSB_ESCR0
    247 #define MSR_P4_FSB_ESCR0 0x3a2
    248 #endif
    249 #ifndef MSR_P4_FSB_ESCR1
    250 #define MSR_P4_FSB_ESCR1 0x3a3
    251 #endif
    252 #ifndef MSR_P4_IQ_ESCR0
    253 #define MSR_P4_IQ_ESCR0 0x3ba
    254 #endif
    255 #ifndef MSR_P4_IQ_ESCR1
    256 #define MSR_P4_IQ_ESCR1 0x3bb
    257 #endif
    258 #ifndef MSR_P4_IS_ESCR0
    259 #define MSR_P4_IS_ESCR0 0x3b4
    260 #endif
    261 #ifndef MSR_P4_IS_ESCR1
    262 #define MSR_P4_IS_ESCR1 0x3b5
    263 #endif
    264 #ifndef MSR_P4_ITLB_ESCR0
    265 #define MSR_P4_ITLB_ESCR0 0x3b6
    266 #endif
    267 #ifndef MSR_P4_ITLB_ESCR1
    268 #define MSR_P4_ITLB_ESCR1 0x3b7
    269 #endif
    270 #ifndef MSR_P4_IX_ESCR0
    271 #define MSR_P4_IX_ESCR0 0x3c8
    272 #endif
    273 #ifndef MSR_P4_IX_ESCR1
    274 #define MSR_P4_IX_ESCR1 0x3c9
    275 #endif
    276 #ifndef MSR_P4_MOB_ESCR0
    277 #define MSR_P4_MOB_ESCR0 0x3aa
    278 #endif
    279 #ifndef MSR_P4_MOB_ESCR1
    280 #define MSR_P4_MOB_ESCR1 0x3ab
    281 #endif
    282 #ifndef MSR_P4_MS_ESCR0
    283 #define MSR_P4_MS_ESCR0 0x3c0
    284 #endif
    285 #ifndef MSR_P4_MS_ESCR1
    286 #define MSR_P4_MS_ESCR1 0x3c1
    287 #endif
    288 #ifndef MSR_P4_PMH_ESCR0
    289 #define MSR_P4_PMH_ESCR0 0x3ac
    290 #endif
    291 #ifndef MSR_P4_PMH_ESCR1
    292 #define MSR_P4_PMH_ESCR1 0x3ad
    293 #endif
    294 #ifndef MSR_P4_RAT_ESCR0
    295 #define MSR_P4_RAT_ESCR0 0x3bc
    296 #endif
    297 #ifndef MSR_P4_RAT_ESCR1
    298 #define MSR_P4_RAT_ESCR1 0x3bd
    299 #endif
    300 #ifndef MSR_P4_SAAT_ESCR0
    301 #define MSR_P4_SAAT_ESCR0 0x3ae
    302 #endif
    303 #ifndef MSR_P4_SAAT_ESCR1
    304 #define MSR_P4_SAAT_ESCR1 0x3af
    305 #endif
    306 #ifndef MSR_P4_SSU_ESCR0
    307 #define MSR_P4_SSU_ESCR0 0x3be
    308 #endif
    309 /* guess: not defined in manual */
    310 #ifndef MSR_P4_SSU_ESCR1
    311 #define MSR_P4_SSU_ESCR1 0x3bf
    312 #endif
    313 #ifndef MSR_P4_TBPU_ESCR0
    314 #define MSR_P4_TBPU_ESCR0 0x3c2
    315 #endif
    316 #ifndef MSR_P4_TBPU_ESCR1
    317 #define MSR_P4_TBPU_ESCR1 0x3c3
    318 #endif
    319 #ifndef MSR_P4_TC_ESCR0
    320 #define MSR_P4_TC_ESCR0 0x3c4
    321 #endif
    322 #ifndef MSR_P4_TC_ESCR1
    323 #define MSR_P4_TC_ESCR1 0x3c5
    324 #endif
    325 #ifndef MSR_P4_U2L_ESCR0
    326 #define MSR_P4_U2L_ESCR0 0x3b0
    327 #endif
    328 #ifndef MSR_P4_U2L_ESCR1
    329 #define MSR_P4_U2L_ESCR1 0x3b1
    330 #endif
    331 
    332 /* Hyper-Threading */
    333 #ifndef X86_FEATURE_HT
    334 #define X86_FEATURE_HT		(0*32+28)
    335 #endif
    336 
    337 #endif /* OP_MSR_H */
    338