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