1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LIBPERF_EVENT_H
3 #define __LIBPERF_EVENT_H
5 #include <linux/perf_event.h>
6 #include <linux/types.h>
7 #include <linux/limits.h>
9 #include <sys/types.h> /* pid_t */
11 struct perf_record_mmap {
12 struct perf_event_header header;
17 char filename[PATH_MAX];
20 struct perf_record_mmap2 {
21 struct perf_event_header header;
32 char filename[PATH_MAX];
35 struct perf_record_comm {
36 struct perf_event_header header;
41 struct perf_record_namespaces {
42 struct perf_event_header header;
45 struct perf_ns_link_info link_info[];
48 struct perf_record_fork {
49 struct perf_event_header header;
55 struct perf_record_lost {
56 struct perf_event_header header;
61 struct perf_record_lost_samples {
62 struct perf_event_header header;
67 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
69 struct perf_record_read {
70 struct perf_event_header header;
78 struct perf_record_throttle {
79 struct perf_event_header header;
86 #define KSYM_NAME_LEN 256
89 struct perf_record_ksymbol {
90 struct perf_event_header header;
95 char name[KSYM_NAME_LEN];
98 struct perf_record_bpf_event {
99 struct perf_event_header header;
104 /* for bpf_prog types */
105 __u8 tag[BPF_TAG_SIZE]; // prog tag
108 struct perf_record_cgroup {
109 struct perf_event_header header;
114 struct perf_record_text_poke_event {
115 struct perf_event_header header;
122 struct perf_record_sample {
123 struct perf_event_header header;
127 struct perf_record_switch {
128 struct perf_event_header header;
133 struct perf_record_header_attr {
134 struct perf_event_header header;
135 struct perf_event_attr attr;
140 PERF_CPU_MAP__CPUS = 0,
141 PERF_CPU_MAP__MASK = 1,
144 struct cpu_map_entries {
149 struct perf_record_record_cpu_map {
152 unsigned long mask[];
155 struct perf_record_cpu_map_data {
160 struct perf_record_cpu_map {
161 struct perf_event_header header;
162 struct perf_record_cpu_map_data data;
166 PERF_EVENT_UPDATE__UNIT = 0,
167 PERF_EVENT_UPDATE__SCALE = 1,
168 PERF_EVENT_UPDATE__NAME = 2,
169 PERF_EVENT_UPDATE__CPUS = 3,
172 struct perf_record_event_update_cpus {
173 struct perf_record_cpu_map_data cpus;
176 struct perf_record_event_update_scale {
180 struct perf_record_event_update {
181 struct perf_event_header header;
187 #define MAX_EVENT_NAME 64
189 struct perf_trace_event_type {
191 char name[MAX_EVENT_NAME];
194 struct perf_record_header_event_type {
195 struct perf_event_header header;
196 struct perf_trace_event_type event_type;
199 struct perf_record_header_tracing_data {
200 struct perf_event_header header;
204 struct perf_record_header_build_id {
205 struct perf_event_header header;
211 struct id_index_entry {
218 struct perf_record_id_index {
219 struct perf_event_header header;
221 struct id_index_entry entries[0];
224 struct perf_record_auxtrace_info {
225 struct perf_event_header header;
227 __u32 reserved__; /* For alignment */
231 struct perf_record_auxtrace {
232 struct perf_event_header header;
239 __u32 reserved__; /* For alignment */
242 #define MAX_AUXTRACE_ERROR_MSG 64
244 struct perf_record_auxtrace_error {
245 struct perf_event_header header;
254 char msg[MAX_AUXTRACE_ERROR_MSG];
257 struct perf_record_aux {
258 struct perf_event_header header;
264 struct perf_record_itrace_start {
265 struct perf_event_header header;
270 struct perf_record_thread_map_entry {
275 struct perf_record_thread_map {
276 struct perf_event_header header;
278 struct perf_record_thread_map_entry entries[];
282 PERF_STAT_CONFIG_TERM__AGGR_MODE = 0,
283 PERF_STAT_CONFIG_TERM__INTERVAL = 1,
284 PERF_STAT_CONFIG_TERM__SCALE = 2,
285 PERF_STAT_CONFIG_TERM__MAX = 3,
288 struct perf_record_stat_config_entry {
293 struct perf_record_stat_config {
294 struct perf_event_header header;
296 struct perf_record_stat_config_entry data[];
299 struct perf_record_stat {
300 struct perf_event_header header;
316 struct perf_record_stat_round {
317 struct perf_event_header header;
322 struct perf_record_time_conv {
323 struct perf_event_header header;
329 bool cap_user_time_zero;
330 bool cap_user_time_short;
333 struct perf_record_header_feature {
334 struct perf_event_header header;
339 struct perf_record_compressed {
340 struct perf_event_header header;
344 enum perf_user_event_type { /* above any possible kernel type */
345 PERF_RECORD_USER_TYPE_START = 64,
346 PERF_RECORD_HEADER_ATTR = 64,
347 PERF_RECORD_HEADER_EVENT_TYPE = 65, /* deprecated */
348 PERF_RECORD_HEADER_TRACING_DATA = 66,
349 PERF_RECORD_HEADER_BUILD_ID = 67,
350 PERF_RECORD_FINISHED_ROUND = 68,
351 PERF_RECORD_ID_INDEX = 69,
352 PERF_RECORD_AUXTRACE_INFO = 70,
353 PERF_RECORD_AUXTRACE = 71,
354 PERF_RECORD_AUXTRACE_ERROR = 72,
355 PERF_RECORD_THREAD_MAP = 73,
356 PERF_RECORD_CPU_MAP = 74,
357 PERF_RECORD_STAT_CONFIG = 75,
358 PERF_RECORD_STAT = 76,
359 PERF_RECORD_STAT_ROUND = 77,
360 PERF_RECORD_EVENT_UPDATE = 78,
361 PERF_RECORD_TIME_CONV = 79,
362 PERF_RECORD_HEADER_FEATURE = 80,
363 PERF_RECORD_COMPRESSED = 81,
364 PERF_RECORD_HEADER_MAX
368 struct perf_event_header header;
369 struct perf_record_mmap mmap;
370 struct perf_record_mmap2 mmap2;
371 struct perf_record_comm comm;
372 struct perf_record_namespaces namespaces;
373 struct perf_record_cgroup cgroup;
374 struct perf_record_fork fork;
375 struct perf_record_lost lost;
376 struct perf_record_lost_samples lost_samples;
377 struct perf_record_read read;
378 struct perf_record_throttle throttle;
379 struct perf_record_sample sample;
380 struct perf_record_bpf_event bpf;
381 struct perf_record_ksymbol ksymbol;
382 struct perf_record_text_poke_event text_poke;
383 struct perf_record_header_attr attr;
384 struct perf_record_event_update event_update;
385 struct perf_record_header_event_type event_type;
386 struct perf_record_header_tracing_data tracing_data;
387 struct perf_record_header_build_id build_id;
388 struct perf_record_id_index id_index;
389 struct perf_record_auxtrace_info auxtrace_info;
390 struct perf_record_auxtrace auxtrace;
391 struct perf_record_auxtrace_error auxtrace_error;
392 struct perf_record_aux aux;
393 struct perf_record_itrace_start itrace_start;
394 struct perf_record_switch context_switch;
395 struct perf_record_thread_map thread_map;
396 struct perf_record_cpu_map cpu_map;
397 struct perf_record_stat_config stat_config;
398 struct perf_record_stat stat;
399 struct perf_record_stat_round stat_round;
400 struct perf_record_time_conv time_conv;
401 struct perf_record_header_feature feat;
402 struct perf_record_compressed pack;
405 #endif /* __LIBPERF_EVENT_H */