PAPI 7.1.0.0
Loading...
Searching...
No Matches
powerpc_reg.h
Go to the documentation of this file.
1/*
2 * These definitions were taken from the reg.h file which, until Linux
3 * 2.6.18, resided in /usr/include/asm-ppc64. Most of the unneeded
4 * definitions have been removed, but there are still a few in this file
5 * that are currently unused by libpfm.
6 */
7
8#ifndef _POWER_REG_H
9#define _POWER_REG_H
10
11#define __stringify_1(x) #x
12#define __stringify(x) __stringify_1(x)
13
14#define mfspr(rn) ({unsigned long rval; \
15 asm volatile("mfspr %0," __stringify(rn) \
16 : "=r" (rval)); rval;})
17
18/* Special Purpose Registers (SPRNs)*/
19#define SPRN_PVR 0x11F /* Processor Version Register */
20
21/* Performance monitor SPRs */
22#define SPRN_MMCR0 795
23#define MMCR0_FC 0x80000000UL /* freeze counters */
24#define MMCR0_FCS 0x40000000UL /* freeze in supervisor state */
25#define MMCR0_KERNEL_DISABLE MMCR0_FCS
26#define MMCR0_FCP 0x20000000UL /* freeze in problem state */
27#define MMCR0_PROBLEM_DISABLE MMCR0_FCP
28#define MMCR0_FCM1 0x10000000UL /* freeze counters while MSR mark = 1 */
29#define MMCR0_FCM0 0x08000000UL /* freeze counters while MSR mark = 0 */
30#define MMCR0_PMXE 0x04000000UL /* performance monitor exception enable */
31#define MMCR0_FCECE 0x02000000UL /* freeze ctrs on enabled cond or event */
32#define MMCR0_TBEE 0x00400000UL /* time base exception enable */
33#define MMCR0_PMC1CE 0x00008000UL /* PMC1 count enable*/
34#define MMCR0_PMCjCE 0x00004000UL /* PMCj count enable*/
35#define MMCR0_TRIGGER 0x00002000UL /* TRIGGER enable */
36#define MMCR0_PMAO 0x00000080UL /* performance monitor alert has occurred, set to 0 after handling exception */
37#define MMCR0_SHRFC 0x00000040UL /* SHRre freeze conditions between threads */
38#define MMCR0_FC1_4 0x00000020UL /* freeze counters 1 - 4 on POWER5/5+ */
39#define MMCR0_FC5_6 0x00000010UL /* freeze counters 5 & 6 on POWER5/5+ */
40#define MMCR0_FCTI 0x00000008UL /* freeze counters in tags inactive mode */
41#define MMCR0_FCTA 0x00000004UL /* freeze counters in tags active mode */
42#define MMCR0_FCWAIT 0x00000002UL /* freeze counter in WAIT state */
43#define MMCR0_FCHV 0x00000001UL /* freeze conditions in hypervisor mode */
44#define SPRN_MMCR1 798
45#define SPRN_MMCRA 0x312
46#define MMCRA_SIHV 0x10000000UL /* state of MSR HV when SIAR set */
47#define MMCRA_SIPR 0x08000000UL /* state of MSR PR when SIAR set */
48#define MMCRA_SAMPLE_ENABLE 0x00000001UL /* enable sampling */
49#define SPRN_PMC1 787
50#define SPRN_PMC2 788
51#define SPRN_PMC3 789
52#define SPRN_PMC4 790
53#define SPRN_PMC5 791
54#define SPRN_PMC6 792
55#define SPRN_PMC7 793
56#define SPRN_PMC8 794
57#define SPRN_SIAR 780
58#define SPRN_SDAR 781
59
60/* Processor Version Register (PVR) field extraction */
61
62#define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF) /* Version field */
63#define PVR_REV(pvr) (((pvr) >> 0) & 0xFFFF) /* Revison field */
64
65#define __is_processor(pv) (PVR_VER(mfspr(SPRN_PVR)) == (pv))
66
67/* 64-bit processors */
68/* XXX the prefix should be PVR_, we'll do a global sweep to fix it one day */
69#define PV_NORTHSTAR 0x0033
70#define PV_PULSAR 0x0034
71#define PV_POWER4 0x0035
72#define PV_ICESTAR 0x0036
73#define PV_SSTAR 0x0037
74#define PV_POWER4p 0x0038
75#define PV_970 0x0039
76#define PV_POWER5 0x003A
77#define PV_POWER5p 0x003B
78#define PV_970FX 0x003C
79#define PV_POWER6 0x003E
80#define PV_POWER7 0x003F
81#define PV_630 0x0040
82#define PV_630p 0x0041
83#define PV_970MP 0x0044
84#define PV_970GX 0x0045
85#define PV_BE 0x0070
86
87#endif /* _POWER_REG_H */