1// SPDX-License-Identifier: LGPL-2.1
2/*
3 * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
4 *
5 */
6
7#ifndef _PARSE_EVENTS_INT_H
8#define _PARSE_EVENTS_INT_H
9
10struct tep_cmdline;
11struct cmdline_list;
12struct func_map;
13struct func_list;
14struct event_handler;
15struct func_resolver;
16struct tep_plugins_dir;
17
18#define __hidden __attribute__((visibility ("hidden")))
19
20struct tep_handle {
21	int ref_count;
22
23	int header_page_ts_offset;
24	int header_page_ts_size;
25	int header_page_size_offset;
26	int header_page_size_size;
27	int header_page_data_offset;
28	int header_page_data_size;
29	int header_page_overwrite;
30
31	enum tep_endian file_bigendian;
32	enum tep_endian host_bigendian;
33
34	int old_format;
35
36	int cpus;
37	int long_size;
38	int page_size;
39
40	struct tep_cmdline *cmdlines;
41	struct cmdline_list *cmdlist;
42	int cmdline_count;
43
44	struct func_map *func_map;
45	struct func_resolver *func_resolver;
46	struct func_list *funclist;
47	unsigned int func_count;
48
49	struct printk_map *printk_map;
50	struct printk_list *printklist;
51	unsigned int printk_count;
52
53	struct tep_event **events;
54	int nr_events;
55	struct tep_event **sort_events;
56	enum tep_event_sort_type last_type;
57
58	int type_offset;
59	int type_size;
60
61	int pid_offset;
62	int pid_size;
63
64	int pc_offset;
65	int pc_size;
66
67	int flags_offset;
68	int flags_size;
69
70	int ld_offset;
71	int ld_size;
72
73	int test_filters;
74
75	int flags;
76
77	struct tep_format_field *bprint_ip_field;
78	struct tep_format_field *bprint_fmt_field;
79	struct tep_format_field *bprint_buf_field;
80
81	struct event_handler *handlers;
82	struct tep_function_handler *func_handlers;
83
84	/* cache */
85	struct tep_event *last_event;
86
87	struct tep_plugins_dir *plugins_dir;
88};
89
90enum tep_print_parse_type {
91	PRINT_FMT_STRING,
92	PRINT_FMT_ARG_DIGIT,
93	PRINT_FMT_ARG_POINTER,
94	PRINT_FMT_ARG_STRING,
95};
96
97struct tep_print_parse {
98	struct tep_print_parse	*next;
99
100	char				*format;
101	int				ls;
102	enum tep_print_parse_type	type;
103	struct tep_print_arg		*arg;
104	struct tep_print_arg		*len_as_arg;
105};
106
107void free_tep_event(struct tep_event *event);
108void free_tep_format_field(struct tep_format_field *field);
109void free_tep_plugin_paths(struct tep_handle *tep);
110
111unsigned short data2host2(struct tep_handle *tep, unsigned short data);
112unsigned int data2host4(struct tep_handle *tep, unsigned int data);
113unsigned long long data2host8(struct tep_handle *tep, unsigned long long data);
114
115/* access to the internal parser */
116int peek_char(void);
117void init_input_buf(const char *buf, unsigned long long size);
118unsigned long long get_input_buf_ptr(void);
119const char *get_input_buf(void);
120enum tep_event_type read_token(char **tok);
121void free_token(char *tok);
122
123#endif /* _PARSE_EVENTS_INT_H */
124