Add initial 2.6.22 support
[~emulex/for-vlad/old/compat.git] / include / linux / compat-2.6.26.h
1 #ifndef LINUX_26_26_COMPAT_H
2 #define LINUX_26_26_COMPAT_H
3
4 #include <linux/autoconf.h>
5 #include <linux/version.h>
6
7 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
8
9 #include <linux/device.h>
10 #include <linux/list.h>
11 #include <linux/kernel.h>
12 #include <linux/jiffies.h>
13 #include <net/sock.h>
14 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
15 #include <net/net_namespace.h>
16 #endif
17
18 /* These jiffie helpers added as of 2.6.26 */
19
20 /*
21  * These four macros compare jiffies and 'a' for convenience.
22  */
23
24 /* time_is_before_jiffies(a) return true if a is before jiffies */
25 #define time_is_before_jiffies(a) time_after(jiffies, a)
26
27 /* time_is_after_jiffies(a) return true if a is after jiffies */
28 #define time_is_after_jiffies(a) time_before(jiffies, a)
29
30 /* time_is_before_eq_jiffies(a) return true if a is before or equal to jiffies*/
31 #define time_is_before_eq_jiffies(a) time_after_eq(jiffies, a)
32
33 /* time_is_after_eq_jiffies(a) return true if a is after or equal to jiffies*/
34 #define time_is_after_eq_jiffies(a) time_before_eq(jiffies, a)
35
36 /* This comes from include/linux/input.h */
37 #define SW_RFKILL_ALL           0x03  /* rfkill master switch, type "any"
38                                          set = radio enabled */
39
40 /* From kernel.h */
41 #define USHORT_MAX      ((u16)(~0U))
42 #define SHORT_MAX       ((s16)(USHORT_MAX>>1))
43 #define SHORT_MIN       (-SHORT_MAX - 1)
44
45 extern int dev_set_name(struct device *dev, const char *name, ...)
46                         __attribute__((format(printf, 2, 3)));
47
48 /**
49  * clamp_t - return a value clamped to a given range using a given type
50  * @type: the type of variable to use
51  * @val: current value
52  * @min: minimum allowable value
53  * @max: maximum allowable value
54  *
55  * This macro does no typechecking and uses temporary variables of type
56  * 'type' to make all the comparisons.
57  */
58 #define clamp_t(type, val, min, max) ({         \
59         type __val = (val);                     \
60         type __min = (min);                     \
61         type __max = (max);                     \
62         __val = __val < __min ? __min: __val;   \
63         __val > __max ? __max: __val; })
64
65
66 /* from include/linux/device.h */
67 /* device_create_drvdata() is new */
68 extern struct device *device_create_drvdata(struct class *cls,
69         struct device *parent,
70         dev_t devt,
71         void *drvdata,
72         const char *fmt, ...)
73 __attribute__((format(printf, 5, 6)));
74
75 /* This is from include/linux/list.h */
76
77 /**
78  * list_is_singular - tests whether a list has just one entry.
79  * @head: the list to test.
80  */
81 static inline int list_is_singular(const struct list_head *head)
82 {
83         return !list_empty(head) && (head->next == head->prev);
84 }
85
86 /* This is from include/linux/device.h, which was added as of 2.6.26 */
87 static inline const char *dev_name(struct device *dev)
88 {
89         /* will be changed into kobject_name(&dev->kobj) in the near future */
90         return dev->bus_id;
91 }
92
93 /* This is from include/linux/kernel.h, which was added as of 2.6.26 */
94
95 /**
96  * clamp_val - return a value clamped to a given range using val's type
97  * @val: current value
98  * @min: minimum allowable value
99  * @max: maximum allowable value
100  *
101  * This macro does no typechecking and uses temporary variables of whatever
102  * type the input argument 'val' is.  This is useful when val is an unsigned
103  * type and min and max are literals that will otherwise be assigned a signed
104  * integer type.
105  */
106
107 #define clamp_val(val, min, max) ({             \
108         typeof(val) __val = (val);              \
109         typeof(val) __min = (min);              \
110         typeof(val) __max = (max);              \
111         __val = __val < __min ? __min: __val;   \
112         __val > __max ? __max: __val; })
113
114 /* This comes from include/net/net_namespace.h */
115
116 #ifdef CONFIG_NET_NS
117 static inline
118 int net_eq(const struct net *net1, const struct net *net2)
119 {
120         return net1 == net2;
121 }
122 #else
123 static inline
124 int net_eq(const struct net *net1, const struct net *net2)
125 {
126         return 1;
127 }
128 #endif
129
130 static inline
131 void dev_net_set(struct net_device *dev, struct net *net)
132 {
133 #ifdef CONFIG_NET_NS
134         release_net(dev->nd_net);
135         dev->nd_net = hold_net(net);
136 #endif
137 }
138
139 static inline
140 struct net *sock_net(const struct sock *sk)
141 {
142 #ifdef CONFIG_NET_NS
143         return sk->sk_net;
144 #else
145         return &init_net;
146 #endif
147 }
148
149 /* This comes from include/linux/netdevice.h */
150
151 /*
152  * Net namespace inlines
153  */
154 static inline
155 struct net *dev_net(const struct net_device *dev)
156 {
157 #ifdef CONFIG_NET_NS
158         /*
159          * compat-wirelss backport note:
160          * For older kernels we may just need to always return init_net,
161          * not sure when we added dev->nd_net.
162          */
163         return dev->nd_net;
164 #else
165         return &init_net;
166 #endif
167 }
168
169
170 /*
171  * 2.6.26 added its own unaligned API which the
172  * new drivers can use. Lets port it here by including it in older
173  * kernels and also deal with the architecture handling here.
174  */
175
176 #ifdef CONFIG_ALPHA
177
178 #include <linux/unaligned/be_struct.h>
179 #include <linux/unaligned/le_byteshift.h>
180 #include <linux/unaligned/generic.h>
181
182 #endif /* alpha */
183 #ifdef CONFIG_ARM
184
185 /* arm */
186 #include <linux/unaligned/le_byteshift.h>
187 #include <linux/unaligned/be_byteshift.h>
188 #include <linux/unaligned/generic.h>
189
190 #endif /* arm */
191 #ifdef CONFIG_AVR32
192
193 /*
194  * AVR32 can handle some unaligned accesses, depending on the
195  * implementation.  The AVR32 AP implementation can handle unaligned
196  * words, but halfwords must be halfword-aligned, and doublewords must
197  * be word-aligned.
198  *
199  * However, swapped word loads must be word-aligned so we can't
200  * optimize word loads in general.
201  */
202
203 #include <linux/unaligned/be_struct.h>
204 #include <linux/unaligned/le_byteshift.h>
205 #include <linux/unaligned/generic.h>
206
207 #endif
208 #ifdef CONFIG_BLACKFIN
209
210 #include <linux/unaligned/le_struct.h>
211 #include <linux/unaligned/be_byteshift.h>
212 #include <linux/unaligned/generic.h>
213
214 #endif /* blackfin */
215 #ifdef CONFIG_CRIS
216
217 /*
218  * CRIS can do unaligned accesses itself.
219  */
220 #include <linux/unaligned/access_ok.h>
221 #include <linux/unaligned/generic.h>
222
223 #endif /* cris */
224 #ifdef CONFIG_FRV
225
226 #include <linux/unaligned/le_byteshift.h>
227 #include <linux/unaligned/be_byteshift.h>
228 #include <linux/unaligned/generic.h>
229
230 #endif /* frv */
231 #ifdef CONFIG_H8300
232
233 #include <linux/unaligned/be_memmove.h>
234 #include <linux/unaligned/le_byteshift.h>
235 #include <linux/unaligned/generic.h>
236
237 #endif /* h8300 */
238 #ifdef  CONFIG_IA64
239
240 #include <linux/unaligned/le_struct.h>
241 #include <linux/unaligned/be_byteshift.h>
242 #include <linux/unaligned/generic.h>
243
244 #endif /* ia64 */
245 #ifdef CONFIG_M32R
246
247 #if defined(__LITTLE_ENDIAN__)
248 # include <linux/unaligned/le_memmove.h>
249 # include <linux/unaligned/be_byteshift.h>
250 # include <linux/unaligned/generic.h>
251 #else
252 # include <linux/unaligned/be_memmove.h>
253 # include <linux/unaligned/le_byteshift.h>
254 # include <linux/unaligned/generic.h>
255 #endif
256
257 #endif /* m32r */
258 #ifdef CONFIG_M68K /* this handles both m68k and m68knommu */
259
260 #ifdef CONFIG_COLDFIRE
261 #include <linux/unaligned/be_struct.h>
262 #include <linux/unaligned/le_byteshift.h>
263 #include <linux/unaligned/generic.h>
264 #else
265
266 /*
267  * The m68k can do unaligned accesses itself.
268  */
269 #include <linux/unaligned/access_ok.h>
270 #include <linux/unaligned/generic.h>
271 #endif
272
273 #endif /* m68k and m68knommu */
274 #ifdef CONFIG_MIPS
275
276 #if defined(__MIPSEB__)
277 # include <linux/unaligned/be_struct.h>
278 # include <linux/unaligned/le_byteshift.h>
279 # include <linux/unaligned/generic.h>
280 # define get_unaligned  __get_unaligned_be
281 # define put_unaligned  __put_unaligned_be
282 #elif defined(__MIPSEL__)
283 # include <linux/unaligned/le_struct.h>
284 # include <linux/unaligned/be_byteshift.h>
285 # include <linux/unaligned/generic.h>
286 #endif
287
288 #endif /* mips */
289 #ifdef CONFIG_MN10300
290
291 #include <linux/unaligned/access_ok.h>
292 #include <linux/unaligned/generic.h>
293
294 #endif /* mn10300 */
295 #ifdef CONFIG_PARISC
296
297 #include <linux/unaligned/be_struct.h>
298 #include <linux/unaligned/le_byteshift.h>
299 #include <linux/unaligned/generic.h>
300
301 #endif /* parisc */
302 #ifdef CONFIG_PPC
303 /*
304  * The PowerPC can do unaligned accesses itself in big endian mode.
305  */
306 #include <linux/unaligned/access_ok.h>
307 #include <linux/unaligned/generic.h>
308
309 #endif /* ppc */
310 #ifdef CONFIG_S390
311
312 /*
313  * The S390 can do unaligned accesses itself.
314  */
315 #include <linux/unaligned/access_ok.h>
316 #include <linux/unaligned/generic.h>
317
318 #endif /* s390 */
319 #ifdef CONFIG_SUPERH
320
321 /* SH can't handle unaligned accesses. */
322 #ifdef __LITTLE_ENDIAN__
323 # include <linux/unaligned/le_struct.h>
324 # include <linux/unaligned/be_byteshift.h>
325 # include <linux/unaligned/generic.h>
326 #else
327 # include <linux/unaligned/be_struct.h>
328 # include <linux/unaligned/le_byteshift.h>
329 # include <linux/unaligned/generic.h>
330 #endif
331
332 #endif /* sh - SUPERH */
333 #ifdef CONFIG_SPARC
334
335 /* sparc and sparc64 */
336 #include <linux/unaligned/be_struct.h>
337 #include <linux/unaligned/le_byteshift.h>
338 #include <linux/unaligned/generic.h>
339
340 #endif  /* sparc */
341 #ifdef CONFIG_UML
342
343 #include "asm/arch/unaligned.h"
344
345 #endif /* um - uml */
346 #ifdef CONFIG_V850
347
348 #include <linux/unaligned/be_byteshift.h>
349 #include <linux/unaligned/le_byteshift.h>
350 #include <linux/unaligned/generic.h>
351
352 #endif /* v850 */
353 #ifdef CONFIG_X86
354 /*
355  * The x86 can do unaligned accesses itself.
356  */
357 #include <linux/unaligned/access_ok.h>
358 #include <linux/unaligned/generic.h>
359
360 #endif /* x86 */
361 #ifdef CONFIG_XTENSA
362
363 #ifdef __XTENSA_EL__
364 # include <linux/unaligned/le_memmove.h>
365 # include <linux/unaligned/be_byteshift.h>
366 # include <linux/unaligned/generic.h>
367 #elif defined(__XTENSA_EB__)
368 # include <linux/unaligned/be_memmove.h>
369 # include <linux/unaligned/le_byteshift.h>
370 # include <linux/unaligned/generic.h>
371 #else
372 # error processor byte order undefined!
373 #endif
374
375 #endif /* xtensa */
376
377 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)) */
378
379 #endif /* LINUX_26_26_COMPAT_H */