]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
1da177e4 LT |
2 | /* |
3 | * Copyright (C) 2004 Anton Blanchard <anton@au.ibm.com>, IBM | |
4 | * | |
5 | * Based on alpha version. | |
1da177e4 LT |
6 | */ |
7 | ||
654810ec SR |
8 | #ifndef _ASM_POWERPC_OPROFILE_IMPL_H |
9 | #define _ASM_POWERPC_OPROFILE_IMPL_H | |
88ced031 | 10 | #ifdef __KERNEL__ |
1da177e4 LT |
11 | |
12 | #define OP_MAX_COUNTER 8 | |
13 | ||
14 | /* Per-counter configuration as set via oprofilefs. */ | |
15 | struct op_counter_config { | |
1da177e4 LT |
16 | unsigned long enabled; |
17 | unsigned long event; | |
18 | unsigned long count; | |
555d97ac | 19 | /* Classic doesn't support per-counter user/kernel selection */ |
1da177e4 | 20 | unsigned long kernel; |
1da177e4 LT |
21 | unsigned long user; |
22 | unsigned long unit_mask; | |
23 | }; | |
24 | ||
25 | /* System-wide configuration as set via oprofilefs. */ | |
26 | struct op_system_config { | |
555d97ac | 27 | #ifdef CONFIG_PPC64 |
1da177e4 LT |
28 | unsigned long mmcr0; |
29 | unsigned long mmcr1; | |
30 | unsigned long mmcra; | |
88382329 CL |
31 | #ifdef CONFIG_OPROFILE_CELL |
32 | /* Register for oprofile user tool to check cell kernel profiling | |
02582e9b | 33 | * support. |
88382329 CL |
34 | */ |
35 | unsigned long cell_support; | |
36 | #endif | |
654810ec | 37 | #endif |
1da177e4 LT |
38 | unsigned long enable_kernel; |
39 | unsigned long enable_user; | |
1da177e4 LT |
40 | }; |
41 | ||
42 | /* Per-arch configuration */ | |
a3e48c10 | 43 | struct op_powerpc_model { |
1474855d | 44 | int (*reg_setup) (struct op_counter_config *, |
1da177e4 LT |
45 | struct op_system_config *, |
46 | int num_counters); | |
1474855d BN |
47 | int (*cpu_setup) (struct op_counter_config *); |
48 | int (*start) (struct op_counter_config *); | |
49 | int (*global_start) (struct op_counter_config *); | |
1da177e4 | 50 | void (*stop) (void); |
18f2190d | 51 | void (*global_stop) (void); |
1474855d BN |
52 | int (*sync_start)(void); |
53 | int (*sync_stop)(void); | |
1da177e4 LT |
54 | void (*handle_interrupt) (struct pt_regs *, |
55 | struct op_counter_config *); | |
56 | int num_counters; | |
57 | }; | |
58 | ||
39aef685 | 59 | extern struct op_powerpc_model op_model_fsl_emb; |
a3e48c10 | 60 | extern struct op_powerpc_model op_model_power4; |
555d97ac | 61 | extern struct op_powerpc_model op_model_7450; |
18f2190d | 62 | extern struct op_powerpc_model op_model_cell; |
25fc530e OJ |
63 | extern struct op_powerpc_model op_model_pa6t; |
64 | ||
72533db0 | 65 | |
555d97ac | 66 | /* All the classic PPC parts use these */ |
c69b767a | 67 | static inline unsigned int classic_ctr_read(unsigned int i) |
1da177e4 LT |
68 | { |
69 | switch(i) { | |
70 | case 0: | |
71 | return mfspr(SPRN_PMC1); | |
72 | case 1: | |
73 | return mfspr(SPRN_PMC2); | |
74 | case 2: | |
75 | return mfspr(SPRN_PMC3); | |
76 | case 3: | |
77 | return mfspr(SPRN_PMC4); | |
78 | case 4: | |
79 | return mfspr(SPRN_PMC5); | |
80 | case 5: | |
81 | return mfspr(SPRN_PMC6); | |
555d97ac AF |
82 | |
83 | /* No PPC32 chip has more than 6 so far */ | |
84 | #ifdef CONFIG_PPC64 | |
1da177e4 LT |
85 | case 6: |
86 | return mfspr(SPRN_PMC7); | |
87 | case 7: | |
88 | return mfspr(SPRN_PMC8); | |
555d97ac | 89 | #endif |
1da177e4 LT |
90 | default: |
91 | return 0; | |
92 | } | |
93 | } | |
94 | ||
c69b767a | 95 | static inline void classic_ctr_write(unsigned int i, unsigned int val) |
1da177e4 LT |
96 | { |
97 | switch(i) { | |
98 | case 0: | |
99 | mtspr(SPRN_PMC1, val); | |
100 | break; | |
101 | case 1: | |
102 | mtspr(SPRN_PMC2, val); | |
103 | break; | |
104 | case 2: | |
105 | mtspr(SPRN_PMC3, val); | |
106 | break; | |
107 | case 3: | |
108 | mtspr(SPRN_PMC4, val); | |
109 | break; | |
110 | case 4: | |
111 | mtspr(SPRN_PMC5, val); | |
112 | break; | |
113 | case 5: | |
114 | mtspr(SPRN_PMC6, val); | |
115 | break; | |
555d97ac AF |
116 | |
117 | /* No PPC32 chip has more than 6, yet */ | |
118 | #ifdef CONFIG_PPC64 | |
1da177e4 LT |
119 | case 6: |
120 | mtspr(SPRN_PMC7, val); | |
121 | break; | |
122 | case 7: | |
123 | mtspr(SPRN_PMC8, val); | |
124 | break; | |
555d97ac | 125 | #endif |
1da177e4 LT |
126 | default: |
127 | break; | |
128 | } | |
129 | } | |
dd6c89f6 | 130 | |
1da177e4 | 131 | |
6c6bd754 BR |
132 | extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth); |
133 | ||
88ced031 | 134 | #endif /* __KERNEL__ */ |
654810ec | 135 | #endif /* _ASM_POWERPC_OPROFILE_IMPL_H */ |