Merge branch 'bundle'
[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_SET_APPDEPS,
40         EC_IOCTL_SET_PROFILEBUNDLE,
41         //EC_IOCTL_REMOVE_PROBE,
42         EC_IOCTL_RESET_PROBES,
43         EC_IOCTL_SET_COMPLEX_PROBES,
44
45         // tracing
46         EC_IOCTL_ATTACH,        // attaches selected probes
47         EC_IOCTL_ACTIVATE,      // START
48
49         // stop is common for both tracing and profiling
50         EC_IOCTL_STOP_AND_DETACH,       // STOP (and detach for TRACING)
51
52         // kernel to user notification delivery
53         EC_IOCTL_WAIT_NOTIFICATION,
54
55         // get ec_info
56         EC_IOCTL_GET_EC_INFO,
57         EC_IOCTL_GET_COMPLEX_STATUS,
58         EC_IOCTL_CONSUME_BUFFER,
59
60         // instrument user space process
61         EC_IOCTL_INST_USR_SPACE_PROC,
62         // deinstrument user space process
63         EC_IOCTL_DEINST_USR_SPACE_PROC,
64
65         // conditions
66         EC_IOCTL_UPDATE_CONDS,
67
68         //user space event      
69         EC_IOCTL_US_EVENT,
70
71         //event format
72         EC_IOCTL_SET_EVENT_MASK,
73         EC_IOCTL_GET_EVENT_MASK,
74
75         // pre-defined user space probes
76         EC_IOCTL_SET_PREDEF_UPROBES,    
77         EC_IOCTL_GET_PREDEF_UPROBES,
78         EC_IOCTL_GET_PREDEF_UPROBES_SIZE,
79
80 } EC_IOCTL_CMD;
81
82 typedef struct
83 {
84         unsigned notification_count;
85         ec_info_t *p_ec_info;
86 } ioctl_wait_notification_t;
87
88 typedef struct
89 {
90         int m_signedInt;
91         unsigned int m_unsignedInt;
92         long m_signedLong;
93         unsigned long m_unsignedLong;
94         char* m_ptrChar;
95 } ioctl_general_t;
96
97 typedef enum
98 {
99         OPERATION_ANY,          // means do not check value
100         OPERATION_EQUAL,
101         OPERATION_NOT_EQUAL,
102         OPERATION_LESS,
103         OPERATION_GREATER
104 } operation_t;
105
106 typedef struct
107 {
108         unsigned m_condition_always_false;
109         unsigned m_op_time;
110         unsigned m_op_pid;
111         unsigned m_op_tid;
112         unsigned m_op_probe_id;
113 //      char     m_probe_name[SWAP_COMMON_STRING_SIZE];
114         unsigned m_op_record_type;
115         unsigned m_time_sec;
116         unsigned m_time_usec;
117         unsigned m_pid;
118         unsigned m_tid;
119         unsigned m_probe_id;
120         unsigned m_record_type;
121 } condition_t;
122
123
124
125 // condition matching any event
126 #define CONDITION_ANY \
127 { \
128     .m_condition_always_false = 0, \
129         .m_op_time = OPERATION_ANY, \
130         .m_op_pid = OPERATION_ANY, \
131         .m_op_tid = OPERATION_ANY, \
132         .m_op_probe_id = OPERATION_ANY, \
133         .m_op_record_type = OPERATION_ANY, \
134 } \
135
136 // never matching condition
137 #define CONDITION_FALSE \
138 { \
139     .m_condition_always_false = 1, \
140         .m_op_time = OPERATION_ANY, \
141         .m_op_pid = OPERATION_ANY, \
142         .m_op_tid = OPERATION_ANY, \
143         .m_op_probe_id = OPERATION_ANY, \
144         .m_op_record_type = OPERATION_ANY, \
145 } \
146
147 // default start condition - start immediately
148 #define DEFAULT_START_CONDITION CONDITION_ANY
149 // default stop condition - never stop
150 #define DEFAULT_STOP_CONDITION CONDITION_FALSE
151
152
153 typedef struct
154 {
155         unsigned count;
156         int *p_pids;
157 } ioctl_set_pids_to_ignore_t;
158
159
160 typedef struct
161 {
162         char *name;
163         unsigned long addr;
164         char type;
165         unsigned long size;
166         signed char reg;        // -1 - memory, 0..127 - register number  
167         long off;
168 } ioctl_usr_space_vtp_t;
169
170 typedef struct
171 {
172         //char *name;
173         //unsigned name_len;
174         unsigned long addr;
175 } ioctl_usr_space_ip_t;
176
177 typedef struct
178 {
179         char *path;
180         //unsigned path_len;
181         unsigned ips_count;
182         ioctl_usr_space_ip_t *p_ips;
183         unsigned vtps_count;
184         ioctl_usr_space_vtp_t *p_vtps;
185 } ioctl_usr_space_lib_t;
186
187 typedef struct
188 {
189         char *path;
190         //unsigned path_len;
191         unsigned libs_count;
192         ioctl_usr_space_lib_t *p_libs;
193 } ioctl_inst_usr_space_proc_t;
194
195 typedef struct
196 {
197         char *proc_name;
198         unsigned count;
199 } ioctl_set_proc_to_ignore_t;
200
201 typedef struct
202 {
203         char *data;
204         unsigned len;
205 } ioctl_us_event_t;
206  
207 // exclude entry events
208 #define IOCTL_EMASK_ENTRY       0x01
209 // exclude exit events
210 #define IOCTL_EMASK_EXIT        0x02
211 // timestamp
212 #define IOCTL_EMASK_TIME        0x04
213 // PID
214 #define IOCTL_EMASK_PID         0x08
215 // TID
216 #define IOCTL_EMASK_TID         0x10
217 // CPU
218 #define IOCTL_EMASK_CPU         0x20
219 // Args
220 #define IOCTL_EMASK_ARGS        0x40
221
222 typedef struct
223 {
224         unsigned probes_count;
225         char *p_probes;
226 } ioctl_predef_uprobes_info_t;
227
228
229 #endif /* !defined(ec_ioctl_h) */