]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blob - tools/lib/perf/include/perf/event.h
988c539bedb6e4b607d4e95ae2adf6f71bb17b00
[mirror_ubuntu-hirsute-kernel.git] / tools / lib / perf / include / perf / event.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LIBPERF_EVENT_H
3 #define __LIBPERF_EVENT_H
4
5 #include <linux/perf_event.h>
6 #include <linux/types.h>
7 #include <linux/limits.h>
8 #include <linux/bpf.h>
9 #include <sys/types.h> /* pid_t */
10
11 struct perf_record_mmap {
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 perf_record_mmap2 {
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 __u32 prot;
31 __u32 flags;
32 char filename[PATH_MAX];
33 };
34
35 struct perf_record_comm {
36 struct perf_event_header header;
37 __u32 pid, tid;
38 char comm[16];
39 };
40
41 struct perf_record_namespaces {
42 struct perf_event_header header;
43 __u32 pid, tid;
44 __u64 nr_namespaces;
45 struct perf_ns_link_info link_info[];
46 };
47
48 struct perf_record_fork {
49 struct perf_event_header header;
50 __u32 pid, ppid;
51 __u32 tid, ptid;
52 __u64 time;
53 };
54
55 struct perf_record_lost {
56 struct perf_event_header header;
57 __u64 id;
58 __u64 lost;
59 };
60
61 struct perf_record_lost_samples {
62 struct perf_event_header header;
63 __u64 lost;
64 };
65
66 /*
67 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
68 */
69 struct perf_record_read {
70 struct perf_event_header header;
71 __u32 pid, tid;
72 __u64 value;
73 __u64 time_enabled;
74 __u64 time_running;
75 __u64 id;
76 };
77
78 struct perf_record_throttle {
79 struct perf_event_header header;
80 __u64 time;
81 __u64 id;
82 __u64 stream_id;
83 };
84
85 #ifndef KSYM_NAME_LEN
86 #define KSYM_NAME_LEN 256
87 #endif
88
89 struct perf_record_ksymbol {
90 struct perf_event_header header;
91 __u64 addr;
92 __u32 len;
93 __u16 ksym_type;
94 __u16 flags;
95 char name[KSYM_NAME_LEN];
96 };
97
98 struct perf_record_bpf_event {
99 struct perf_event_header header;
100 __u16 type;
101 __u16 flags;
102 __u32 id;
103
104 /* for bpf_prog types */
105 __u8 tag[BPF_TAG_SIZE]; // prog tag
106 };
107
108 struct perf_record_cgroup {
109 struct perf_event_header header;
110 __u64 id;
111 char path[PATH_MAX];
112 };
113
114 struct perf_record_text_poke_event {
115 struct perf_event_header header;
116 __u64 addr;
117 __u16 old_len;
118 __u16 new_len;
119 __u8 bytes[];
120 };
121
122 struct perf_record_sample {
123 struct perf_event_header header;
124 __u64 array[];
125 };
126
127 struct perf_record_switch {
128 struct perf_event_header header;
129 __u32 next_prev_pid;
130 __u32 next_prev_tid;
131 };
132
133 struct perf_record_header_attr {
134 struct perf_event_header header;
135 struct perf_event_attr attr;
136 __u64 id[];
137 };
138
139 enum {
140 PERF_CPU_MAP__CPUS = 0,
141 PERF_CPU_MAP__MASK = 1,
142 };
143
144 struct cpu_map_entries {
145 __u16 nr;
146 __u16 cpu[];
147 };
148
149 struct perf_record_record_cpu_map {
150 __u16 nr;
151 __u16 long_size;
152 unsigned long mask[];
153 };
154
155 struct perf_record_cpu_map_data {
156 __u16 type;
157 char data[];
158 };
159
160 struct perf_record_cpu_map {
161 struct perf_event_header header;
162 struct perf_record_cpu_map_data data;
163 };
164
165 enum {
166 PERF_EVENT_UPDATE__UNIT = 0,
167 PERF_EVENT_UPDATE__SCALE = 1,
168 PERF_EVENT_UPDATE__NAME = 2,
169 PERF_EVENT_UPDATE__CPUS = 3,
170 };
171
172 struct perf_record_event_update_cpus {
173 struct perf_record_cpu_map_data cpus;
174 };
175
176 struct perf_record_event_update_scale {
177 double scale;
178 };
179
180 struct perf_record_event_update {
181 struct perf_event_header header;
182 __u64 type;
183 __u64 id;
184 char data[];
185 };
186
187 #define MAX_EVENT_NAME 64
188
189 struct perf_trace_event_type {
190 __u64 event_id;
191 char name[MAX_EVENT_NAME];
192 };
193
194 struct perf_record_header_event_type {
195 struct perf_event_header header;
196 struct perf_trace_event_type event_type;
197 };
198
199 struct perf_record_header_tracing_data {
200 struct perf_event_header header;
201 __u32 size;
202 };
203
204 #define PERF_RECORD_MISC_BUILD_ID_SIZE (1 << 15)
205
206 struct perf_record_header_build_id {
207 struct perf_event_header header;
208 pid_t pid;
209 union {
210 __u8 build_id[24];
211 struct {
212 __u8 data[20];
213 __u8 size;
214 __u8 reserved1__;
215 __u16 reserved2__;
216 };
217 };
218 char filename[];
219 };
220
221 struct id_index_entry {
222 __u64 id;
223 __u64 idx;
224 __u64 cpu;
225 __u64 tid;
226 };
227
228 struct perf_record_id_index {
229 struct perf_event_header header;
230 __u64 nr;
231 struct id_index_entry entries[0];
232 };
233
234 struct perf_record_auxtrace_info {
235 struct perf_event_header header;
236 __u32 type;
237 __u32 reserved__; /* For alignment */
238 __u64 priv[];
239 };
240
241 struct perf_record_auxtrace {
242 struct perf_event_header header;
243 __u64 size;
244 __u64 offset;
245 __u64 reference;
246 __u32 idx;
247 __u32 tid;
248 __u32 cpu;
249 __u32 reserved__; /* For alignment */
250 };
251
252 #define MAX_AUXTRACE_ERROR_MSG 64
253
254 struct perf_record_auxtrace_error {
255 struct perf_event_header header;
256 __u32 type;
257 __u32 code;
258 __u32 cpu;
259 __u32 pid;
260 __u32 tid;
261 __u32 fmt;
262 __u64 ip;
263 __u64 time;
264 char msg[MAX_AUXTRACE_ERROR_MSG];
265 };
266
267 struct perf_record_aux {
268 struct perf_event_header header;
269 __u64 aux_offset;
270 __u64 aux_size;
271 __u64 flags;
272 };
273
274 struct perf_record_itrace_start {
275 struct perf_event_header header;
276 __u32 pid;
277 __u32 tid;
278 };
279
280 struct perf_record_thread_map_entry {
281 __u64 pid;
282 char comm[16];
283 };
284
285 struct perf_record_thread_map {
286 struct perf_event_header header;
287 __u64 nr;
288 struct perf_record_thread_map_entry entries[];
289 };
290
291 enum {
292 PERF_STAT_CONFIG_TERM__AGGR_MODE = 0,
293 PERF_STAT_CONFIG_TERM__INTERVAL = 1,
294 PERF_STAT_CONFIG_TERM__SCALE = 2,
295 PERF_STAT_CONFIG_TERM__MAX = 3,
296 };
297
298 struct perf_record_stat_config_entry {
299 __u64 tag;
300 __u64 val;
301 };
302
303 struct perf_record_stat_config {
304 struct perf_event_header header;
305 __u64 nr;
306 struct perf_record_stat_config_entry data[];
307 };
308
309 struct perf_record_stat {
310 struct perf_event_header header;
311
312 __u64 id;
313 __u32 cpu;
314 __u32 thread;
315
316 union {
317 struct {
318 __u64 val;
319 __u64 ena;
320 __u64 run;
321 };
322 __u64 values[3];
323 };
324 };
325
326 struct perf_record_stat_round {
327 struct perf_event_header header;
328 __u64 type;
329 __u64 time;
330 };
331
332 struct perf_record_time_conv {
333 struct perf_event_header header;
334 __u64 time_shift;
335 __u64 time_mult;
336 __u64 time_zero;
337 __u64 time_cycles;
338 __u64 time_mask;
339 bool cap_user_time_zero;
340 bool cap_user_time_short;
341 };
342
343 struct perf_record_header_feature {
344 struct perf_event_header header;
345 __u64 feat_id;
346 char data[];
347 };
348
349 struct perf_record_compressed {
350 struct perf_event_header header;
351 char data[];
352 };
353
354 enum perf_user_event_type { /* above any possible kernel type */
355 PERF_RECORD_USER_TYPE_START = 64,
356 PERF_RECORD_HEADER_ATTR = 64,
357 PERF_RECORD_HEADER_EVENT_TYPE = 65, /* deprecated */
358 PERF_RECORD_HEADER_TRACING_DATA = 66,
359 PERF_RECORD_HEADER_BUILD_ID = 67,
360 PERF_RECORD_FINISHED_ROUND = 68,
361 PERF_RECORD_ID_INDEX = 69,
362 PERF_RECORD_AUXTRACE_INFO = 70,
363 PERF_RECORD_AUXTRACE = 71,
364 PERF_RECORD_AUXTRACE_ERROR = 72,
365 PERF_RECORD_THREAD_MAP = 73,
366 PERF_RECORD_CPU_MAP = 74,
367 PERF_RECORD_STAT_CONFIG = 75,
368 PERF_RECORD_STAT = 76,
369 PERF_RECORD_STAT_ROUND = 77,
370 PERF_RECORD_EVENT_UPDATE = 78,
371 PERF_RECORD_TIME_CONV = 79,
372 PERF_RECORD_HEADER_FEATURE = 80,
373 PERF_RECORD_COMPRESSED = 81,
374 PERF_RECORD_HEADER_MAX
375 };
376
377 union perf_event {
378 struct perf_event_header header;
379 struct perf_record_mmap mmap;
380 struct perf_record_mmap2 mmap2;
381 struct perf_record_comm comm;
382 struct perf_record_namespaces namespaces;
383 struct perf_record_cgroup cgroup;
384 struct perf_record_fork fork;
385 struct perf_record_lost lost;
386 struct perf_record_lost_samples lost_samples;
387 struct perf_record_read read;
388 struct perf_record_throttle throttle;
389 struct perf_record_sample sample;
390 struct perf_record_bpf_event bpf;
391 struct perf_record_ksymbol ksymbol;
392 struct perf_record_text_poke_event text_poke;
393 struct perf_record_header_attr attr;
394 struct perf_record_event_update event_update;
395 struct perf_record_header_event_type event_type;
396 struct perf_record_header_tracing_data tracing_data;
397 struct perf_record_header_build_id build_id;
398 struct perf_record_id_index id_index;
399 struct perf_record_auxtrace_info auxtrace_info;
400 struct perf_record_auxtrace auxtrace;
401 struct perf_record_auxtrace_error auxtrace_error;
402 struct perf_record_aux aux;
403 struct perf_record_itrace_start itrace_start;
404 struct perf_record_switch context_switch;
405 struct perf_record_thread_map thread_map;
406 struct perf_record_cpu_map cpu_map;
407 struct perf_record_stat_config stat_config;
408 struct perf_record_stat stat;
409 struct perf_record_stat_round stat_round;
410 struct perf_record_time_conv time_conv;
411 struct perf_record_header_feature feat;
412 struct perf_record_compressed pack;
413 };
414
415 #endif /* __LIBPERF_EVENT_H */