/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __PERF_BPF_EVENT_H
#define __PERF_BPF_EVENT_H

#include <linux/compiler.h>
#include <linux/rbtree.h>
#include <pthread.h>
#include <api/fd/array.h>
#include "event.h"
#include <stdio.h>

struct machine;
union perf_event;
struct perf_env;
struct perf_sample;
struct record_opts;
struct evlist;
struct target;

struct bpf_prog_info_node {
	struct bpf_prog_info_linear	*info_linear;
	struct rb_node			rb_node;
};

struct btf_node {
	struct rb_node	rb_node;
	u32		id;
	u32		data_size;
	char		data[];
};

#ifdef HAVE_LIBBPF_SUPPORT
int machine__process_bpf_event(struct machine *machine, union perf_event *event,
			       struct perf_sample *sample);

int perf_event__synthesize_bpf_events(struct perf_session *session,
				      perf_event__handler_t process,
				      struct machine *machine,
				      struct record_opts *opts);
int bpf_event__add_sb_event(struct perf_evlist **evlist,
				 struct perf_env *env);
void bpf_event__print_bpf_prog_info(struct bpf_prog_info *info,
				    struct perf_env *env,
				    FILE *fp);
#else
static inline int machine__process_bpf_event(struct machine *machine __maybe_unused,
					     union perf_event *event __maybe_unused,
					     struct perf_sample *sample __maybe_unused)
{
	return 0;
}

static inline int perf_event__synthesize_bpf_events(struct perf_session *session __maybe_unused,
						    perf_event__handler_t process __maybe_unused,
						    struct machine *machine __maybe_unused,
						    struct record_opts *opts __maybe_unused)
{
	return 0;
}

static inline int bpf_event__add_sb_event(struct perf_evlist **evlist __maybe_unused,
					  struct perf_env *env __maybe_unused)
{
	return 0;
}

static inline void bpf_event__print_bpf_prog_info(struct bpf_prog_info *info __maybe_unused,
						  struct perf_env *env __maybe_unused,
						  FILE *fp __maybe_unused)
{

}
#endif // HAVE_LIBBPF_SUPPORT
#endif
