162306a36Sopenharmony_ci#ifndef __PERF_FTRACE_H__
262306a36Sopenharmony_ci#define __PERF_FTRACE_H__
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#include <linux/list.h>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include "target.h"
762306a36Sopenharmony_ci
862306a36Sopenharmony_cistruct evlist;
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct perf_ftrace {
1162306a36Sopenharmony_ci	struct evlist		*evlist;
1262306a36Sopenharmony_ci	struct target		target;
1362306a36Sopenharmony_ci	const char		*tracer;
1462306a36Sopenharmony_ci	struct list_head	filters;
1562306a36Sopenharmony_ci	struct list_head	notrace;
1662306a36Sopenharmony_ci	struct list_head	graph_funcs;
1762306a36Sopenharmony_ci	struct list_head	nograph_funcs;
1862306a36Sopenharmony_ci	unsigned long		percpu_buffer_size;
1962306a36Sopenharmony_ci	bool			inherit;
2062306a36Sopenharmony_ci	bool			use_nsec;
2162306a36Sopenharmony_ci	int			graph_depth;
2262306a36Sopenharmony_ci	int			func_stack_trace;
2362306a36Sopenharmony_ci	int			func_irq_info;
2462306a36Sopenharmony_ci	int			graph_nosleep_time;
2562306a36Sopenharmony_ci	int			graph_noirqs;
2662306a36Sopenharmony_ci	int			graph_verbose;
2762306a36Sopenharmony_ci	int			graph_thresh;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct filter_entry {
3162306a36Sopenharmony_ci	struct list_head	list;
3262306a36Sopenharmony_ci	char			name[];
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#define NUM_BUCKET  22  /* 20 + 2 (for outliers in both direction) */
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#ifdef HAVE_BPF_SKEL
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciint perf_ftrace__latency_prepare_bpf(struct perf_ftrace *ftrace);
4062306a36Sopenharmony_ciint perf_ftrace__latency_start_bpf(struct perf_ftrace *ftrace);
4162306a36Sopenharmony_ciint perf_ftrace__latency_stop_bpf(struct perf_ftrace *ftrace);
4262306a36Sopenharmony_ciint perf_ftrace__latency_read_bpf(struct perf_ftrace *ftrace,
4362306a36Sopenharmony_ci				  int buckets[]);
4462306a36Sopenharmony_ciint perf_ftrace__latency_cleanup_bpf(struct perf_ftrace *ftrace);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#else  /* !HAVE_BPF_SKEL */
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistatic inline int
4962306a36Sopenharmony_ciperf_ftrace__latency_prepare_bpf(struct perf_ftrace *ftrace __maybe_unused)
5062306a36Sopenharmony_ci{
5162306a36Sopenharmony_ci	return -1;
5262306a36Sopenharmony_ci}
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cistatic inline int
5562306a36Sopenharmony_ciperf_ftrace__latency_start_bpf(struct perf_ftrace *ftrace __maybe_unused)
5662306a36Sopenharmony_ci{
5762306a36Sopenharmony_ci	return -1;
5862306a36Sopenharmony_ci}
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistatic inline int
6162306a36Sopenharmony_ciperf_ftrace__latency_stop_bpf(struct perf_ftrace *ftrace __maybe_unused)
6262306a36Sopenharmony_ci{
6362306a36Sopenharmony_ci	return -1;
6462306a36Sopenharmony_ci}
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_cistatic inline int
6762306a36Sopenharmony_ciperf_ftrace__latency_read_bpf(struct perf_ftrace *ftrace __maybe_unused,
6862306a36Sopenharmony_ci			      int buckets[] __maybe_unused)
6962306a36Sopenharmony_ci{
7062306a36Sopenharmony_ci	return -1;
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistatic inline int
7462306a36Sopenharmony_ciperf_ftrace__latency_cleanup_bpf(struct perf_ftrace *ftrace __maybe_unused)
7562306a36Sopenharmony_ci{
7662306a36Sopenharmony_ci	return -1;
7762306a36Sopenharmony_ci}
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci#endif  /* HAVE_BPF_SKEL */
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci#endif  /* __PERF_FTRACE_H__ */
82