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