Merge remote-tracking branch 'regulator/fix/act8865' into regulator-act8865
[cascardo/linux.git] / tools / perf / util / event.h
1 #ifndef __PERF_RECORD_H
2 #define __PERF_RECORD_H
3
4 #include <limits.h>
5 #include <stdio.h>
6
7 #include "../perf.h"
8 #include "map.h"
9 #include "build-id.h"
10
11 struct mmap_event {
12         struct perf_event_header header;
13         u32 pid, tid;
14         u64 start;
15         u64 len;
16         u64 pgoff;
17         char filename[PATH_MAX];
18 };
19
20 struct mmap2_event {
21         struct perf_event_header header;
22         u32 pid, tid;
23         u64 start;
24         u64 len;
25         u64 pgoff;
26         u32 maj;
27         u32 min;
28         u64 ino;
29         u64 ino_generation;
30         char filename[PATH_MAX];
31 };
32
33 struct comm_event {
34         struct perf_event_header header;
35         u32 pid, tid;
36         char comm[16];
37 };
38
39 struct fork_event {
40         struct perf_event_header header;
41         u32 pid, ppid;
42         u32 tid, ptid;
43         u64 time;
44 };
45
46 struct lost_event {
47         struct perf_event_header header;
48         u64 id;
49         u64 lost;
50 };
51
52 /*
53  * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
54  */
55 struct read_event {
56         struct perf_event_header header;
57         u32 pid, tid;
58         u64 value;
59         u64 time_enabled;
60         u64 time_running;
61         u64 id;
62 };
63
64 struct throttle_event {
65         struct perf_event_header header;
66         u64 time;
67         u64 id;
68         u64 stream_id;
69 };
70
71 #define PERF_SAMPLE_MASK                                \
72         (PERF_SAMPLE_IP | PERF_SAMPLE_TID |             \
73          PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR |          \
74         PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID |        \
75          PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD |         \
76          PERF_SAMPLE_IDENTIFIER)
77
78 /* perf sample has 16 bits size limit */
79 #define PERF_SAMPLE_MAX_SIZE (1 << 16)
80
81 struct sample_event {
82         struct perf_event_header        header;
83         u64 array[];
84 };
85
86 struct regs_dump {
87         u64 abi;
88         u64 mask;
89         u64 *regs;
90 };
91
92 struct stack_dump {
93         u16 offset;
94         u64 size;
95         char *data;
96 };
97
98 struct sample_read_value {
99         u64 value;
100         u64 id;
101 };
102
103 struct sample_read {
104         u64 time_enabled;
105         u64 time_running;
106         union {
107                 struct {
108                         u64 nr;
109                         struct sample_read_value *values;
110                 } group;
111                 struct sample_read_value one;
112         };
113 };
114
115 struct ip_callchain {
116         u64 nr;
117         u64 ips[0];
118 };
119
120 struct branch_flags {
121         u64 mispred:1;
122         u64 predicted:1;
123         u64 in_tx:1;
124         u64 abort:1;
125         u64 reserved:60;
126 };
127
128 struct branch_entry {
129         u64                     from;
130         u64                     to;
131         struct branch_flags     flags;
132 };
133
134 struct branch_stack {
135         u64                     nr;
136         struct branch_entry     entries[0];
137 };
138
139 struct perf_sample {
140         u64 ip;
141         u32 pid, tid;
142         u64 time;
143         u64 addr;
144         u64 id;
145         u64 stream_id;
146         u64 period;
147         u64 weight;
148         u64 transaction;
149         u32 cpu;
150         u32 raw_size;
151         u64 data_src;
152         void *raw_data;
153         struct ip_callchain *callchain;
154         struct branch_stack *branch_stack;
155         struct regs_dump  user_regs;
156         struct stack_dump user_stack;
157         struct sample_read read;
158 };
159
160 #define PERF_MEM_DATA_SRC_NONE \
161         (PERF_MEM_S(OP, NA) |\
162          PERF_MEM_S(LVL, NA) |\
163          PERF_MEM_S(SNOOP, NA) |\
164          PERF_MEM_S(LOCK, NA) |\
165          PERF_MEM_S(TLB, NA))
166
167 struct build_id_event {
168         struct perf_event_header header;
169         pid_t                    pid;
170         u8                       build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))];
171         char                     filename[];
172 };
173
174 enum perf_user_event_type { /* above any possible kernel type */
175         PERF_RECORD_USER_TYPE_START             = 64,
176         PERF_RECORD_HEADER_ATTR                 = 64,
177         PERF_RECORD_HEADER_EVENT_TYPE           = 65, /* depreceated */
178         PERF_RECORD_HEADER_TRACING_DATA         = 66,
179         PERF_RECORD_HEADER_BUILD_ID             = 67,
180         PERF_RECORD_FINISHED_ROUND              = 68,
181         PERF_RECORD_HEADER_MAX
182 };
183
184 struct attr_event {
185         struct perf_event_header header;
186         struct perf_event_attr attr;
187         u64 id[];
188 };
189
190 #define MAX_EVENT_NAME 64
191
192 struct perf_trace_event_type {
193         u64     event_id;
194         char    name[MAX_EVENT_NAME];
195 };
196
197 struct event_type_event {
198         struct perf_event_header header;
199         struct perf_trace_event_type event_type;
200 };
201
202 struct tracing_data_event {
203         struct perf_event_header header;
204         u32 size;
205 };
206
207 union perf_event {
208         struct perf_event_header        header;
209         struct mmap_event               mmap;
210         struct mmap2_event              mmap2;
211         struct comm_event               comm;
212         struct fork_event               fork;
213         struct lost_event               lost;
214         struct read_event               read;
215         struct throttle_event           throttle;
216         struct sample_event             sample;
217         struct attr_event               attr;
218         struct event_type_event         event_type;
219         struct tracing_data_event       tracing_data;
220         struct build_id_event           build_id;
221 };
222
223 void perf_event__print_totals(void);
224
225 struct perf_tool;
226 struct thread_map;
227
228 typedef int (*perf_event__handler_t)(struct perf_tool *tool,
229                                      union perf_event *event,
230                                      struct perf_sample *sample,
231                                      struct machine *machine);
232
233 int perf_event__synthesize_thread_map(struct perf_tool *tool,
234                                       struct thread_map *threads,
235                                       perf_event__handler_t process,
236                                       struct machine *machine, bool mmap_data);
237 int perf_event__synthesize_threads(struct perf_tool *tool,
238                                    perf_event__handler_t process,
239                                    struct machine *machine, bool mmap_data);
240 int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
241                                        perf_event__handler_t process,
242                                        struct machine *machine);
243
244 int perf_event__synthesize_modules(struct perf_tool *tool,
245                                    perf_event__handler_t process,
246                                    struct machine *machine);
247
248 int perf_event__process_comm(struct perf_tool *tool,
249                              union perf_event *event,
250                              struct perf_sample *sample,
251                              struct machine *machine);
252 int perf_event__process_lost(struct perf_tool *tool,
253                              union perf_event *event,
254                              struct perf_sample *sample,
255                              struct machine *machine);
256 int perf_event__process_mmap(struct perf_tool *tool,
257                              union perf_event *event,
258                              struct perf_sample *sample,
259                              struct machine *machine);
260 int perf_event__process_mmap2(struct perf_tool *tool,
261                              union perf_event *event,
262                              struct perf_sample *sample,
263                              struct machine *machine);
264 int perf_event__process_fork(struct perf_tool *tool,
265                              union perf_event *event,
266                              struct perf_sample *sample,
267                              struct machine *machine);
268 int perf_event__process_exit(struct perf_tool *tool,
269                              union perf_event *event,
270                              struct perf_sample *sample,
271                              struct machine *machine);
272 int perf_event__process(struct perf_tool *tool,
273                         union perf_event *event,
274                         struct perf_sample *sample,
275                         struct machine *machine);
276
277 struct addr_location;
278
279 int perf_event__preprocess_sample(const union perf_event *event,
280                                   struct machine *machine,
281                                   struct addr_location *al,
282                                   struct perf_sample *sample);
283
284 const char *perf_event__name(unsigned int id);
285
286 size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
287                                      u64 read_format);
288 int perf_event__synthesize_sample(union perf_event *event, u64 type,
289                                   u64 read_format,
290                                   const struct perf_sample *sample,
291                                   bool swapped);
292
293 int perf_event__synthesize_mmap_events(struct perf_tool *tool,
294                                        union perf_event *event,
295                                        pid_t pid, pid_t tgid,
296                                        perf_event__handler_t process,
297                                        struct machine *machine,
298                                        bool mmap_data);
299
300 size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp);
301 size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp);
302 size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp);
303 size_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
304 size_t perf_event__fprintf(union perf_event *event, FILE *fp);
305
306 u64 kallsyms__get_function_start(const char *kallsyms_filename,
307                                  const char *symbol_name);
308
309 #endif /* __PERF_RECORD_H */