Viewing file: perf_event.h (2.15 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2018 SiFive * Copyright (C) 2018 Andes Technology Corporation * */
#ifndef _ASM_RISCV_PERF_EVENT_H #define _ASM_RISCV_PERF_EVENT_H
#include <linux/perf_event.h> #include <linux/ptrace.h> #include <linux/interrupt.h>
#ifdef CONFIG_RISCV_BASE_PMU #define RISCV_BASE_COUNTERS 2
/* * The RISCV_MAX_COUNTERS parameter should be specified. */
#define RISCV_MAX_COUNTERS 2
/* * These are the indexes of bits in counteren register *minus* 1, * except for cycle. It would be coherent if it can directly mapped * to counteren bit definition, but there is a *time* register at * counteren[1]. Per-cpu structure is scarce resource here. * * According to the spec, an implementation can support counter up to * mhpmcounter31, but many high-end processors has at most 6 general * PMCs, we give the definition to MHPMCOUNTER8 here. */ #define RISCV_PMU_CYCLE 0 #define RISCV_PMU_INSTRET 1 #define RISCV_PMU_MHPMCOUNTER3 2 #define RISCV_PMU_MHPMCOUNTER4 3 #define RISCV_PMU_MHPMCOUNTER5 4 #define RISCV_PMU_MHPMCOUNTER6 5 #define RISCV_PMU_MHPMCOUNTER7 6 #define RISCV_PMU_MHPMCOUNTER8 7
#define RISCV_OP_UNSUPP (-EOPNOTSUPP)
struct cpu_hw_events { /* # currently enabled events*/ int n_events; /* currently enabled events */ struct perf_event *events[RISCV_MAX_COUNTERS]; /* vendor-defined PMU data */ void *platform; };
struct riscv_pmu { struct pmu *pmu;
/* generic hw/cache events table */ const int *hw_events; const int (*cache_events)[PERF_COUNT_HW_CACHE_MAX] [PERF_COUNT_HW_CACHE_OP_MAX] [PERF_COUNT_HW_CACHE_RESULT_MAX]; /* method used to map hw/cache events */ int (*map_hw_event)(u64 config); int (*map_cache_event)(u64 config);
/* max generic hw events in map */ int max_events; /* number total counters, 2(base) + x(general) */ int num_counters; /* the width of the counter */ int counter_width;
/* vendor-defined PMU features */ void *platform;
irqreturn_t (*handle_irq)(int irq_num, void *dev); int irq; };
#endif #ifdef CONFIG_PERF_EVENTS #define perf_arch_bpf_user_pt_regs(regs) (struct user_regs_struct *)regs #endif
#endif /* _ASM_RISCV_PERF_EVENT_H */
|