1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef _PERF_UTIL_TRACE_EVENT_H
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define _PERF_UTIL_TRACE_EVENT_H
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <traceevent/event-parse.h>
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "parse-events.h"
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "session.h"
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct machine;
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_sample;
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunion perf_event;
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_tool;
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct thread;
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengextern struct pevent *perf_pevent;
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint bigendian(void);
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct pevent *read_trace_init(int file_bigendian, int host_bigendian);
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid event_format__print(struct event_format *event,
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			 int cpu, void *data, int size);
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint parse_ftrace_file(struct pevent *pevent, char *buf, unsigned long size);
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint parse_event_file(struct pevent *pevent,
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		     char *buf, unsigned long size, char *sys);
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct pevent_record *trace_peek_data(struct pevent *pevent, int cpu);
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunsigned long long
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengraw_field_value(struct event_format *event, const char *name, void *data);
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid *raw_field_ptr(struct event_format *event, const char *name, void *data);
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid parse_proc_kallsyms(struct pevent *pevent, char *file, unsigned int size);
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid parse_ftrace_printk(struct pevent *pevent, char *file, unsigned int size);
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengssize_t trace_report(int fd, struct pevent **pevent, bool repipe);
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint trace_parse_common_type(struct pevent *pevent, void *data);
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint trace_parse_common_pid(struct pevent *pevent, void *data);
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct event_format *trace_find_next_event(struct pevent *pevent,
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng					   struct event_format *event);
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunsigned long long read_size(struct event_format *event, void *ptr, int size);
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunsigned long long eval_flag(const char *flag);
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct pevent_record *trace_read_data(struct pevent *pevent, int cpu);
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint read_tracing_data(int fd, struct list_head *pattrs);
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct tracing_data {
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* size is only valid if temp is 'true' */
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ssize_t size;
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bool temp;
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char temp_file[50];
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct tracing_data *tracing_data_get(struct list_head *pattrs,
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				      int fd, bool temp);
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint tracing_data_put(struct tracing_data *tdata);
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct addr_location;
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_session;
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct scripting_ops {
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	const char *name;
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int (*start_script) (const char *script, int argc, const char **argv);
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int (*stop_script) (void);
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	void (*process_event) (union perf_event *event,
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			       struct perf_sample *sample,
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			       struct perf_evsel *evsel,
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			       struct machine *machine,
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			       struct thread *thread,
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				   struct addr_location *al);
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int (*generate_script) (struct pevent *pevent, const char *outfile);
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint script_spec_register(const char *spec, struct scripting_ops *ops);
78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid setup_perl_scripting(void);
80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid setup_python_scripting(void);
81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct scripting_context {
83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct pevent *pevent;
84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	void *event_data;
85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint common_pc(struct scripting_context *context);
88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint common_flags(struct scripting_context *context);
89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint common_lock_depth(struct scripting_context *context);
90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* _PERF_UTIL_TRACE_EVENT_H */
92