[REFACTOR] rename sspt_procs* --> sspt_proc*
[kernel/swap-modules.git] / driver / storage.h
1 ////////////////////////////////////////////////////////////////////////////////////
2 //
3 //      FILE:           storage.h
4 //
5 //      DESCRIPTION:
6 //      This file is C source for SWAP.
7 //
8 //      SEE ALSO:       storage.c
9 //      AUTHOR:         L.Komkov, S.Dianov, A.Gerenkov
10 //      COMPANY NAME:   Samsung Research Center in Moscow
11 //      DEPT NAME:      Advanced Software Group
12 //      CREATED:        2008.02.15
13 //      VERSION:        1.0
14 //      REVISION DATE:  2008.12.03
15 //
16 ////////////////////////////////////////////////////////////////////////////////////
17
18 #if !defined(__STORAGE_H__)
19 #define __STORAGE_H__
20
21 #include <linux/mount.h>
22 #include <linux/module.h>
23 #include <linux/list.h>
24 #include <linux/spinlock.h>
25 #include "picl.h"
26 #include "ec_ioctl.h"
27 #include "ec_probe.h"
28 #include "probes_manager.h"
29 #include "probes.h"
30 #include "event_tmpl.h"
31 #include "error_storage.h"
32
33 extern int EnableContinuousRetrieval(void);
34 extern int DisableContinuousRetrieval(void);
35
36 ///////////////////////////////////////////////////////////////////////////////////////////////////
37
38 extern unsigned int GetBufferSize(void);
39 extern int SetBufferSize(unsigned int nSize);
40 extern int ResetBuffer(void);
41
42 extern int SetPid(unsigned int pid);
43
44 //extern spinlock_t buffer_spinlock;
45
46 ///////////////////////////////////////////////////////////////////////////////////////////////////
47
48 /*
49     Functions "storage_init()" and "storage_down()" are for initialization and
50     shutdown respectively.
51 */
52 extern int storage_init (void);
53 extern void storage_down (void);
54
55 /*
56     Function "pack_event_info()" saves information about event into buffer. It
57     is used in 'probes' to pack and save event data.
58 */
59 extern void pack_task_event_info (struct task_struct *task, probe_id_t probe_id,
60                 record_type_t record_type, const char *fmt, ...);
61 #define pack_event_info(probe_id, record_type, fmt, ...) \
62         pack_task_event_info(current, probe_id, record_type, fmt, __VA_ARGS__)
63
64 /* Set most links from us_proc_info to data in the bundle */
65 int link_bundle(void);
66 /* Undo the actions of link_bundle() */
67 void unlink_bundle(void);
68
69 /*
70     Adds non-predefined kernel probe to the list.
71 */
72 extern int add_probe_to_list (unsigned long addr, kernel_probe_t ** pprobe);
73
74 /*
75     Removes non-predefined kernel probe from the list.
76 */
77 extern int remove_probe_from_list (unsigned long addr);
78
79 /*
80     Searches non-predefined kernel probe in the list.
81 */
82 extern kernel_probe_t *find_probe (unsigned long addr);
83
84 /*
85     Copies event from user space to buffer and updates its pid/tid/cpu/time.
86 */
87 extern int put_us_event (char *data, unsigned long len);
88
89 /*
90     Sets event mask.
91 */
92 extern int set_event_mask (int new_mask);
93
94 /*
95     Gets event mask.
96 */
97 extern int get_event_mask (int *mask);
98
99 /*
100     Sets predefined user space probes info.
101 */
102 extern int set_predef_uprobes (ioctl_predef_uprobes_info_t *data);
103 /*
104     Gets predefined user space probes info length.
105 */
106 extern int get_predef_uprobes_size(int *size);
107 /*
108     Gets predefined user space probes info.
109 */
110 extern int get_predef_uprobes(ioctl_predef_uprobes_info_t *data);
111
112
113 // internal bookkeeping of storage
114 extern char *p_buffer;
115
116 // list of selected non-predefined kernel probes
117 extern struct hlist_head kernel_probes;
118
119 // multiple handlers stuff
120 /*struct dbi_modules_handlers {
121         struct list_head        modules_handlers;
122         spinlock_t              lock;
123 };
124
125 struct dbi_modules_handlers_info {
126         struct module           *dbi_module;
127         struct handler_map      *dbi_handlers;
128         int                     dbi_nr_handlers;
129         struct list_head        dbi_list_head;
130 };
131
132 extern int dbi_register_handlers_module(struct dbi_modules_handlers_info *dbi_mhi);
133 extern int dbi_unregister_handlers_module(struct dbi_modules_handlers_info *dbi_mhi);
134 //unsigned long get_dbi_modules_handlers(void);*/
135
136 /* list of on-the-go installed kernel probes */
137 extern struct hlist_head otg_kernel_probes;
138
139 // event mask
140 extern int event_mask;
141
142 // process pid to instrument
143 extern unsigned int inst_pid;
144
145 typedef struct
146 {
147         struct list_head list;
148         char *name;
149         int installed;
150         struct jprobe jprobe;
151         struct kretprobe retprobe;
152         unsigned long offset;
153         unsigned long got_addr;
154
155         unsigned flag_retprobe:1;
156         unsigned flag_got:1;
157 } us_proc_ip_t;
158
159 typedef struct
160 {
161         int installed;
162         struct jprobe jprobe;
163         unsigned long addr;
164         struct list_head list;
165 } us_proc_vtp_t;
166
167 typedef struct
168 {
169         char *name;
170         char type;
171         unsigned long size;
172         signed char reg;        // -1 - memory, 0..127 - register number
173         long off;
174         struct list_head list;
175 } us_proc_vtp_data_t;
176
177 typedef struct
178 {
179         unsigned func_addr;
180         unsigned got_addr;
181         unsigned real_func_addr;
182 } us_proc_plt_t;
183
184 typedef struct
185 {
186         char *path;
187         char *path_dyn;
188         struct dentry *m_f_dentry;
189         unsigned ips_count;
190         us_proc_ip_t *p_ips;
191         unsigned vtps_count;
192         us_proc_vtp_t *p_vtps;
193         int loaded;
194         unsigned plt_count;
195         us_proc_plt_t *p_plt;
196         unsigned long vma_start;
197         unsigned long vma_end;
198         unsigned vma_flag;
199 } us_proc_lib_t;
200
201
202 typedef struct
203 {
204         char *path;
205         struct dentry *m_f_dentry;
206         pid_t tgid;
207         unsigned unres_ips_count;
208         unsigned unres_vtps_count;
209         //kprobe_opcode_t *mapped_codelets;
210         int is_plt;
211         unsigned libs_count;
212         us_proc_lib_t *p_libs;
213
214         // new_dpf
215         struct sspt_proc *pp;
216 } inst_us_proc_t;
217
218 typedef struct
219 {
220         unsigned int addr;
221         unsigned int inst_type;
222         char *name;
223         char *class_name;
224         char *method_name;
225         char *prototype;
226
227 }dex_proc_ip_t;
228
229 typedef struct
230 {
231         char *path;
232         unsigned ips_count;
233         dex_proc_ip_t *p_ips;
234
235 }inst_dex_proc_t;
236
237
238 struct cond {
239         /* cond data itself */
240         struct event_tmpl tmpl;
241         /* linked list */
242         struct list_head list;
243         /* has been applied (for start and stop conditions) */
244         int applied;
245 };
246
247 extern struct cond cond_list;
248
249 /* macros for testing flags */
250 #define ET_FIELD_CLR(flags, field) (flags &= ~field)
251 #define ET_FIELD_SET(flags, field) (flags |= field)
252 #define ET_FIELD_ISSET(flags, field) ((flags & field) != 0)
253
254 extern inst_us_proc_t us_proc_info;
255 extern inst_dex_proc_t dex_proc_info;
256
257 #endif /* !defined(__STORAGE_H__) */