Initial commit. Client and net aer build
[kernel/swap-modules.git] / driver / ec_ioctl.h
1 ////////////////////////////////////////////////////////////////////////////////////
2 //
3 //      FILE:           ec_module.h
4 //
5 //      DESCRIPTION:
6 //
7 //      SEE ALSO:       N/A
8 //      AUTHOR:         L.Komkov, S.Dianov, A.Gerenkov
9 //      COMPANY NAME:   Samsung Research Center in Moscow
10 //      DEPT NAME:      Advanced Software Group 
11 //      CREATED:        2008.02.15
12 //      VERSION:        1.0
13 //      REVISION DATE:  2008.12.02
14 //
15 ////////////////////////////////////////////////////////////////////////////////////
16
17 #if !defined(ec_ioctl_h)
18 #define ec_ioctl_h
19
20 #include "ec_info.h"            // ec_info_t
21 #include "picl.h"
22
23 typedef enum
24 {
25         // modes
26         EC_IOCTL_SET_EC_MODE,
27         EC_IOCTL_GET_EC_MODE,
28
29         // buffer manipulation
30         EC_IOCTL_SET_BUFFER_SIZE,
31         EC_IOCTL_GET_BUFFER_SIZE,
32         EC_IOCTL_RESET_BUFFER,
33
34         // probes management
35         EC_IOCTL_SELECT_PROBE,
36         EC_IOCTL_DESELECT_PROBE,
37         EC_IOCTL_GET_PROBE_INFO,
38         EC_IOCTL_ADD_PROBE,
39         //EC_IOCTL_REMOVE_PROBE,
40         EC_IOCTL_RESET_PROBES,
41         EC_IOCTL_SET_COMPLEX_PROBES,
42
43         // tracing
44         EC_IOCTL_ATTACH,        // attaches selected probes
45         EC_IOCTL_ACTIVATE,      // START
46
47         // stop is common for both tracing and profiling
48         EC_IOCTL_STOP_AND_DETACH,       // STOP (and detach for TRACING)
49
50         // kernel to user notification delivery
51         EC_IOCTL_WAIT_NOTIFICATION,
52
53         // get ec_info
54         EC_IOCTL_GET_EC_INFO,
55         EC_IOCTL_GET_COMPLEX_STATUS,
56         EC_IOCTL_CONSUME_BUFFER,
57
58         // instrument user space process
59         EC_IOCTL_INST_USR_SPACE_PROC,
60         // deinstrument user space process
61         EC_IOCTL_DEINST_USR_SPACE_PROC,
62
63         // conditions
64         EC_IOCTL_UPDATE_CONDS,
65
66         //user space event      
67         EC_IOCTL_US_EVENT,
68
69         //event format
70         EC_IOCTL_SET_EVENT_MASK,
71         EC_IOCTL_GET_EVENT_MASK,
72
73         // pre-defined user space probes
74         EC_IOCTL_SET_PREDEF_UPROBES,    
75         EC_IOCTL_GET_PREDEF_UPROBES,
76         EC_IOCTL_GET_PREDEF_UPROBES_SIZE,
77
78 } EC_IOCTL_CMD;
79
80 typedef struct
81 {
82         unsigned notification_count;
83         ec_info_t *p_ec_info;
84 } ioctl_wait_notification_t;
85
86 typedef struct
87 {
88         int m_signedInt;
89         unsigned int m_unsignedInt;
90         long m_signedLong;
91         unsigned long m_unsignedLong;
92         char* m_ptrChar;
93 } ioctl_general_t;
94
95 typedef enum
96 {
97         OPERATION_ANY,          // means do not check value
98         OPERATION_EQUAL,
99         OPERATION_NOT_EQUAL,
100         OPERATION_LESS,
101         OPERATION_GREATER
102 } operation_t;
103
104 typedef struct
105 {
106         unsigned m_condition_always_false;
107         unsigned m_op_time;
108         unsigned m_op_pid;
109         unsigned m_op_tid;
110         unsigned m_op_probe_id;
111 //      char     m_probe_name[SWAP_COMMON_STRING_SIZE];
112         unsigned m_op_record_type;
113         unsigned m_time_sec;
114         unsigned m_time_usec;
115         unsigned m_pid;
116         unsigned m_tid;
117         unsigned m_probe_id;
118         unsigned m_record_type;
119 } condition_t;
120
121
122
123 // condition matching any event
124 #define CONDITION_ANY \
125 { \
126     .m_condition_always_false = 0, \
127         .m_op_time = OPERATION_ANY, \
128         .m_op_pid = OPERATION_ANY, \
129         .m_op_tid = OPERATION_ANY, \
130         .m_op_probe_id = OPERATION_ANY, \
131         .m_op_record_type = OPERATION_ANY, \
132 } \
133
134 // never matching condition
135 #define CONDITION_FALSE \
136 { \
137     .m_condition_always_false = 1, \
138         .m_op_time = OPERATION_ANY, \
139         .m_op_pid = OPERATION_ANY, \
140         .m_op_tid = OPERATION_ANY, \
141         .m_op_probe_id = OPERATION_ANY, \
142         .m_op_record_type = OPERATION_ANY, \
143 } \
144
145 // default start condition - start immediately
146 #define DEFAULT_START_CONDITION CONDITION_ANY
147 // default stop condition - never stop
148 #define DEFAULT_STOP_CONDITION CONDITION_FALSE
149
150
151 typedef struct
152 {
153         unsigned count;
154         int *p_pids;
155 } ioctl_set_pids_to_ignore_t;
156
157
158 typedef struct
159 {
160         char *name;
161         unsigned long addr;
162         char type;
163         unsigned long size;
164         signed char reg;        // -1 - memory, 0..127 - register number  
165         long off;
166 } ioctl_usr_space_vtp_t;
167
168 typedef struct
169 {
170         //char *name;
171         //unsigned name_len;
172         unsigned long addr;
173 } ioctl_usr_space_ip_t;
174
175 typedef struct
176 {
177         char *path;
178         //unsigned path_len;
179         unsigned ips_count;
180         ioctl_usr_space_ip_t *p_ips;
181         unsigned vtps_count;
182         ioctl_usr_space_vtp_t *p_vtps;
183 } ioctl_usr_space_lib_t;
184
185 typedef struct
186 {
187         char *path;
188         //unsigned path_len;
189         unsigned libs_count;
190         ioctl_usr_space_lib_t *p_libs;
191 } ioctl_inst_usr_space_proc_t;
192
193 typedef struct
194 {
195         char *proc_name;
196         unsigned count;
197 } ioctl_set_proc_to_ignore_t;
198
199 typedef struct
200 {
201         char *data;
202         unsigned len;
203 } ioctl_us_event_t;
204  
205 // exclude entry events
206 #define IOCTL_EMASK_ENTRY       0x01
207 // exclude exit events
208 #define IOCTL_EMASK_EXIT        0x02
209 // timestamp
210 #define IOCTL_EMASK_TIME        0x04
211 // PID
212 #define IOCTL_EMASK_PID         0x08
213 // TID
214 #define IOCTL_EMASK_TID         0x10
215 // CPU
216 #define IOCTL_EMASK_CPU         0x20
217 // Args
218 #define IOCTL_EMASK_ARGS        0x40
219
220 typedef struct
221 {
222         unsigned probes_count;
223         char *p_probes;
224 } ioctl_predef_uprobes_info_t;
225
226
227 #endif /* !defined(ec_ioctl_h) */