d4fb4a065b43eb998542f3922f1c86433a06d21a
[~emulex/for-vlad/old/compat.git] / include / linux / compat-2.6.25.h
1 #ifndef LINUX_26_25_COMPAT_H
2 #define LINUX_26_25_COMPAT_H
3
4 #include <linux/version.h>
5
6 /* Compat work for 2.6.24 */
7 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25))
8
9 #include <linux/types.h>
10 #include <linux/io.h>
11 #include <linux/hw_random.h>
12 #include <linux/leds.h>
13 #include <linux/kernel.h>
14 #include <linux/netdevice.h>
15 #include <linux/pm.h>
16 #include <asm-generic/bug.h>
17 #include <linux/pm_qos_params.h>
18 #include <linux/pci.h>
19 #include <linux/in.h>
20 #include <linux/errno.h>
21 #include <linux/init.h>
22
23 /*
24  * Backports 312b1485fb509c9bc32eda28ad29537896658cb8
25  * Author: Sam Ravnborg <sam@ravnborg.org>
26  * Date:   Mon Jan 28 20:21:15 2008 +0100
27  * 
28  * Introduce new section reference annotations tags: __ref, __refdata, __refconst
29  */
30 #define __ref           __init_refok
31 #define __refdata       __initdata_refok
32 #define __ref           __exit_refok
33
34 /*
35  * backports 2658fa803111dae1353602e7f586de8e537803e2
36  * We skip proto_ports_offset() as I'm lazy.
37  */
38
39 static inline bool ipv4_is_loopback(__be32 addr)
40 {
41         return (addr & htonl(0xff000000)) == htonl(0x7f000000);
42 }
43
44 static inline bool ipv4_is_multicast(__be32 addr)
45 {
46         return (addr & htonl(0xf0000000)) == htonl(0xe0000000);
47 }
48
49 static inline bool ipv4_is_local_multicast(__be32 addr)
50 {
51         return (addr & htonl(0xffffff00)) == htonl(0xe0000000);
52 }
53
54 static inline bool ipv4_is_lbcast(__be32 addr)
55 {
56         /* limited broadcast */
57         return addr == htonl(INADDR_BROADCAST);
58 }
59
60 static inline bool ipv4_is_zeronet(__be32 addr)
61 {
62         return (addr & htonl(0xff000000)) == htonl(0x00000000);
63 }
64
65 /* Special-Use IPv4 Addresses (RFC3330) */
66
67 static inline bool ipv4_is_private_10(__be32 addr)
68 {
69         return (addr & htonl(0xff000000)) == htonl(0x0a000000);
70 }
71
72 static inline bool ipv4_is_private_172(__be32 addr)
73 {
74         return (addr & htonl(0xfff00000)) == htonl(0xac100000);
75 }
76
77 static inline bool ipv4_is_private_192(__be32 addr)
78 {
79         return (addr & htonl(0xffff0000)) == htonl(0xc0a80000);
80 }
81
82 static inline bool ipv4_is_linklocal_169(__be32 addr)
83 {
84         return (addr & htonl(0xffff0000)) == htonl(0xa9fe0000);
85 }
86
87 static inline bool ipv4_is_anycast_6to4(__be32 addr)
88 {
89         return (addr & htonl(0xffffff00)) == htonl(0xc0586300);
90 }
91
92 static inline bool ipv4_is_test_192(__be32 addr)
93 {
94         return (addr & htonl(0xffffff00)) == htonl(0xc0000200);
95 }
96
97 static inline bool ipv4_is_test_198(__be32 addr)
98 {
99         return (addr & htonl(0xfffe0000)) == htonl(0xc6120000);
100 }
101
102 /*
103  * phys_addr_t was added as a generic arch typedef on 2.6.28,
104  * that backport is dealt with in compat-2.6.28.h
105  */
106 #if defined(CONFIG_X86) || defined(CONFIG_X86_64)
107
108 #if defined(CONFIG_64BIT) || defined(CONFIG_X86_PAE) || defined(CONFIG_PHYS_64BIT)
109 typedef u64 phys_addr_t;
110 #else
111 typedef u32 phys_addr_t;
112 #endif
113
114 #endif /* x86 */
115
116 /* The macro below uses a const upstream, this differs */
117
118 /**
119  * DEFINE_PCI_DEVICE_TABLE - macro used to describe a pci device table
120  * @_table: device table name
121  *
122  * This macro is used to create a struct pci_device_id array (a device table)
123  * in a generic manner.
124  */
125 #define DEFINE_PCI_DEVICE_TABLE(_table) \
126         const struct pci_device_id _table[] __devinitdata
127
128 /*
129  * Backport work for QoS dependencies (kernel/pm_qos_params.c)
130  * pm-qos stuff written by mark gross mgross@linux.intel.com.
131  *
132  * ipw2100 now makes use of:
133  *
134  * pm_qos_add_requirement(),
135  * pm_qos_update_requirement() and
136  * pm_qos_remove_requirement() from it
137  *
138  * mac80211 uses the network latency to determine if to enable or not
139  * dynamic PS. mac80211 also and registers a notifier for when
140  * the latency changes. Since older kernels do no thave pm-qos stuff
141  * we just implement it completley here and register it upon cfg80211
142  * init. I haven't tested ipw2100 on 2.6.24 though.
143  *
144  * This pm-qos implementation is copied verbatim from the kernel
145  * written by mark gross mgross@linux.intel.com. You don't have
146  * to do anythinig to use pm-qos except use the same exported
147  * routines as used in newer kernels. The compat_pm_qos_power_init()
148  * defned below is used by the compat module to initialize pm-qos.
149  */
150 int compat_pm_qos_power_init(void);
151 int compat_pm_qos_power_deinit(void);
152
153 /*
154  * 2.6.25 adds PM_EVENT_HIBERNATE as well here but
155  * we don't have this on <= 2.6.23)
156  */
157 #ifndef PM_EVENT_SLEEP /* some distribution have mucked with their own headers to add this.. */
158 #define PM_EVENT_SLEEP  (PM_EVENT_SUSPEND)
159 #endif
160
161 /* Although we don't care about wimax this is needed for rfkill input stuff */
162 #define KEY_WIMAX               246
163
164 /* Although pm_qos stuff is not implemented on <= 2.6.24 lets keep the define */
165 #define PM_QOS_DEFAULT_VALUE -1
166
167 #define __WARN(foo) dump_stack()
168
169 #define dev_emerg(dev, format, arg...)          \
170         dev_printk(KERN_EMERG , dev , format , ## arg)
171 #define dev_alert(dev, format, arg...)          \
172         dev_printk(KERN_ALERT , dev , format , ## arg)
173 #define dev_crit(dev, format, arg...)           \
174         dev_printk(KERN_CRIT , dev , format , ## arg)
175
176 extern int              __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
177 extern void             __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
178
179 #define seq_file_net &init_net;
180
181 enum nf_inet_hooks {
182         NF_INET_PRE_ROUTING = 0,
183         NF_INET_LOCAL_IN = 1,
184         NF_INET_FORWARD = 2,
185         NF_INET_LOCAL_OUT = 3,
186         NF_INET_POST_ROUTING = 4,
187         NF_INET_NUMHOOKS = 5
188 };
189
190 /* The patch:
191  * commit 8b5f6883683c91ad7e1af32b7ceeb604d68e2865
192  * Author: Marcin Slusarz <marcin.slusarz@gmail.com>
193  * Date:   Fri Feb 8 04:20:12 2008 -0800
194  *
195  *     byteorder: move le32_add_cpu & friends from OCFS2 to core
196  *
197  * moves le*_add_cpu and be*_add_cpu functions from OCFS2 to core
198  * header (1st) and converted some existing code to it. We port
199  * it here as later kernels will most likely use it.
200  */
201 static inline void le16_add_cpu(__le16 *var, u16 val)
202 {
203         *var = cpu_to_le16(le16_to_cpu(*var) + val);
204 }
205
206 static inline void le32_add_cpu(__le32 *var, u32 val)
207 {
208         *var = cpu_to_le32(le32_to_cpu(*var) + val);
209 }
210
211 static inline void le64_add_cpu(__le64 *var, u64 val)
212 {
213         *var = cpu_to_le64(le64_to_cpu(*var) + val);
214 }
215
216 static inline void be16_add_cpu(__be16 *var, u16 val)
217 {
218         u16 v = be16_to_cpu(*var);
219         *var = cpu_to_be16(v + val);
220 }
221
222 static inline void be32_add_cpu(__be32 *var, u32 val)
223 {
224         u32 v = be32_to_cpu(*var);
225         *var = cpu_to_be32(v + val);
226 }
227
228 static inline void be64_add_cpu(__be64 *var, u64 val)
229 {
230         u64 v = be64_to_cpu(*var);
231         *var = cpu_to_be64(v + val);
232 }
233
234 /* 2.6.25 changes hwrng_unregister()'s behaviour by supporting
235  * suspend of its parent device (the misc device, which is itself the
236  * hardware random number generator). It does this by passing a parameter to
237  * unregister_miscdev() which is not supported in older kernels. The suspend
238  * parameter allows us to enable access to the device's hardware
239  * number generator during suspend. As far as wireless is concerned this means
240  * if a driver goes to suspend it you won't have the HNR available in
241  * older kernels. */
242 static inline void __hwrng_unregister(struct hwrng *rng, bool suspended)
243 {
244         hwrng_unregister(rng);
245 }
246
247 static inline void led_classdev_unregister_suspended(struct led_classdev *lcd)
248 {
249         led_classdev_unregister(lcd);
250 }
251
252 /**
253  * The following things are out of ./include/linux/kernel.h
254  * The new iwlwifi driver is using them.
255  */
256 extern int strict_strtoul(const char *, unsigned int, unsigned long *);
257 extern int strict_strtol(const char *, unsigned int, long *);
258
259 #else
260 /*
261  * Kernels >= 2.6.25 have pm-qos and its initialized as part of
262  * the bootup process
263  */
264 static inline int compat_pm_qos_power_init(void)
265 {
266         return 0;
267 }
268
269 static inline int compat_pm_qos_power_deinit(void)
270 {
271         return 0;
272 }
273 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) */
274
275 #endif /* LINUX_26_25_COMPAT_H */