1#ifndef _LINUX_INIT_H
2#define _LINUX_INIT_H
3
4#include <linux/config.h>
5#include <linux/compiler.h>
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44#define __init __attribute__ ((__section__ (".init.text")))
45#define __initdata __attribute__ ((__section__ (".init.data")))
46#define __exitdata __attribute__ ((__section__(".exit.data")))
47#define __exit_call __attribute_used__ __attribute__ ((__section__ (".exitcall.exit")))
48
49#ifdef MODULE
50#define __exit __attribute__ ((__section__(".exit.text")))
51#else
52#define __exit __attribute_used__ __attribute__ ((__section__(".exit.text")))
53#endif
54
55
56#define __INIT .section ".init.text","ax"
57#define __FINIT .previous
58#define __INITDATA .section ".init.data","aw"
59
60#ifndef __ASSEMBLY__
61
62
63
64typedef int (*initcall_t)(void);
65typedef void (*exitcall_t)(void);
66
67extern initcall_t __con_initcall_start, __con_initcall_end;
68extern initcall_t __security_initcall_start, __security_initcall_end;
69#endif
70
71#ifndef MODULE
72
73#ifndef __ASSEMBLY__
74
75
76
77
78
79
80
81
82#define __define_initcall(level,fn) \
83 static initcall_t __initcall_##fn __attribute_used__ \
84 __attribute__((__section__(".initcall" level ".init"))) = fn
85
86#define core_initcall(fn) __define_initcall("1",fn)
87#define postcore_initcall(fn) __define_initcall("2",fn)
88#define arch_initcall(fn) __define_initcall("3",fn)
89#define subsys_initcall(fn) __define_initcall("4",fn)
90#define fs_initcall(fn) __define_initcall("5",fn)
91#define device_initcall(fn) __define_initcall("6",fn)
92#define late_initcall(fn) __define_initcall("7",fn)
93
94#define __initcall(fn) device_initcall(fn)
95
96#define __exitcall(fn) \
97 static exitcall_t __exitcall_##fn __exit_call = fn
98
99#define console_initcall(fn) \
100 static initcall_t __initcall_##fn \
101 __attribute_used__ __attribute__((__section__(".con_initcall.init")))=fn
102
103#define security_initcall(fn) \
104 static initcall_t __initcall_##fn \
105 __attribute_used__ __attribute__((__section__(".security_initcall.init"))) = fn
106
107struct obs_kernel_param {
108 const char *str;
109 int (*setup_func)(char *);
110};
111
112
113#define __setup(str, fn) \
114 static char __setup_str_##fn[] __initdata = str; \
115 static struct obs_kernel_param __setup_##fn \
116 __attribute_used__ \
117 __attribute__((__section__(".init.setup"))) \
118 = { __setup_str_##fn, fn }
119
120#endif
121
122
123
124
125
126
127
128
129
130#define module_init(x) __initcall(x);
131
132
133
134
135
136
137
138
139
140
141
142#define module_exit(x) __exitcall(x);
143
144#else
145
146
147#define core_initcall(fn) module_init(fn)
148#define postcore_initcall(fn) module_init(fn)
149#define arch_initcall(fn) module_init(fn)
150#define subsys_initcall(fn) module_init(fn)
151#define fs_initcall(fn) module_init(fn)
152#define device_initcall(fn) module_init(fn)
153#define late_initcall(fn) module_init(fn)
154
155#define security_initcall(fn) module_init(fn)
156
157
158
159
160
161
162
163
164#define module_init(initfn) \
165 static inline initcall_t __inittest(void) \
166 { return initfn; } \
167 int init_module(void) __attribute__((alias(#initfn)));
168
169
170#define module_exit(exitfn) \
171 static inline exitcall_t __exittest(void) \
172 { return exitfn; } \
173 void cleanup_module(void) __attribute__((alias(#exitfn)));
174
175#define __setup(str,func)
176#endif
177
178
179#define __nosavedata __attribute__ ((__section__ (".data.nosave")))
180
181
182
183#ifdef CONFIG_MODULES
184#define __init_or_module
185#define __initdata_or_module
186#else
187#define __init_or_module __init
188#define __initdata_or_module __initdata
189#endif
190
191#ifdef CONFIG_HOTPLUG
192#define __devinit
193#define __devinitdata
194#define __devexit
195#define __devexitdata
196#else
197#define __devinit __init
198#define __devinitdata __initdata
199#define __devexit __exit
200#define __devexitdata __exitdata
201#endif
202
203
204
205
206
207
208
209#if defined(MODULE) || defined(CONFIG_HOTPLUG)
210#define __devexit_p(x) x
211#else
212#define __devexit_p(x) NULL
213#endif
214
215#ifdef MODULE
216#define __exit_p(x) x
217#else
218#define __exit_p(x) NULL
219#endif
220
221#endif
222