cregit-Linux how code gets into the kernel

Release 4.18 arch/riscv/include/asm/perf_event.h

/* 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>


#define RISCV_BASE_COUNTERS	2

/*
 * The RISCV_MAX_COUNTERS parameter should be specified.
 */

#ifdef CONFIG_RISCV_BASE_PMU

#define RISCV_MAX_COUNTERS	2
#endif

#ifndef RISCV_MAX_COUNTERS
#error "Please provide a valid RISCV_MAX_COUNTERS for the PMU."
#endif

/*
 * 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 /* _ASM_RISCV_PERF_EVENT_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Alan Kao186100.00%1100.00%
Total186100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.