1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_SH_PERF_EVENT_H
3 #define __ASM_SH_PERF_EVENT_H
4 
5 struct hw_perf_event;
6 
7 #define MAX_HWEVENTS	2
8 
9 struct sh_pmu {
10 	const char	*name;
11 	unsigned int	num_events;
12 	void		(*disable_all)(void);
13 	void		(*enable_all)(void);
14 	void		(*enable)(struct hw_perf_event *, int);
15 	void		(*disable)(struct hw_perf_event *, int);
16 	u64		(*read)(int);
17 	int		(*event_map)(int);
18 	unsigned int	max_events;
19 	unsigned long	raw_event_mask;
20 	const int	(*cache_events)[PERF_COUNT_HW_CACHE_MAX]
21 				       [PERF_COUNT_HW_CACHE_OP_MAX]
22 				       [PERF_COUNT_HW_CACHE_RESULT_MAX];
23 };
24 
25 /* arch/sh/kernel/perf_event.c */
26 extern int register_sh_pmu(struct sh_pmu *);
27 extern int reserve_pmc_hardware(void);
28 extern void release_pmc_hardware(void);
29 
30 #endif /* __ASM_SH_PERF_EVENT_H */
31