1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _PERF_RECORD_H
3#define _PERF_RECORD_H
4
5#include <time.h>
6#include <stdbool.h>
7#include <linux/types.h>
8#include <linux/stddef.h>
9#include <linux/perf_event.h>
10#include "util/target.h"
11
12struct option;
13
14struct record_opts {
15	struct target target;
16	bool	      inherit_stat;
17	bool	      no_buffering;
18	bool	      no_inherit;
19	bool	      no_inherit_set;
20	bool	      no_samples;
21	bool	      raw_samples;
22	bool	      sample_address;
23	bool	      sample_phys_addr;
24	bool	      sample_data_page_size;
25	bool	      sample_code_page_size;
26	bool	      sample_weight;
27	bool	      sample_time;
28	bool	      sample_time_set;
29	bool	      sample_cpu;
30	bool	      sample_identifier;
31	bool	      period;
32	bool	      period_set;
33	bool	      running_time;
34	bool	      full_auxtrace;
35	bool	      auxtrace_snapshot_mode;
36	bool	      auxtrace_snapshot_on_exit;
37	bool	      auxtrace_sample_mode;
38	bool	      record_namespaces;
39	bool	      record_cgroup;
40	bool	      record_switch_events;
41	bool	      record_switch_events_set;
42	bool	      all_kernel;
43	bool	      all_user;
44	bool	      kernel_callchains;
45	bool	      user_callchains;
46	bool	      tail_synthesize;
47	bool	      overwrite;
48	bool	      ignore_missing_thread;
49	bool	      strict_freq;
50	bool	      sample_id;
51	bool	      no_bpf_event;
52	bool	      kcore;
53	bool	      text_poke;
54	bool	      build_id;
55	unsigned int  freq;
56	unsigned int  mmap_pages;
57	unsigned int  auxtrace_mmap_pages;
58	unsigned int  user_freq;
59	u64	      branch_stack;
60	u64	      sample_intr_regs;
61	u64	      sample_user_regs;
62	u64	      default_interval;
63	u64	      user_interval;
64	size_t	      auxtrace_snapshot_size;
65	const char    *auxtrace_snapshot_opts;
66	const char    *auxtrace_sample_opts;
67	bool	      sample_transaction;
68	bool	      use_clockid;
69	clockid_t     clockid;
70	u64	      clockid_res_ns;
71	int	      nr_cblocks;
72	int	      affinity;
73	int	      mmap_flush;
74	unsigned int  comp_level;
75	unsigned int  nr_threads_synthesize;
76	int	      ctl_fd;
77	int	      ctl_fd_ack;
78	bool	      ctl_fd_close;
79	int	      synth;
80	int	      threads_spec;
81	const char    *threads_user_spec;
82};
83
84extern const char * const *record_usage;
85extern struct option *record_options;
86
87int record__parse_freq(const struct option *opt, const char *str, int unset);
88
89static inline bool record_opts__no_switch_events(const struct record_opts *opts)
90{
91	return opts->record_switch_events_set && !opts->record_switch_events;
92}
93
94#endif // _PERF_RECORD_H
95