c389ab2c18e67218ab113cee1a7140f6726475e4
[~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
20 /*
21  * phys_addr_t was added as a generic arch typedef on 2.6.28,
22  * that backport is dealt with in compat-2.6.28.h
23  */
24 #if defined(CONFIG_X86) || defined(CONFIG_X86_64)
25
26 #if defined(CONFIG_64BIT) || defined(CONFIG_X86_PAE) || defined(CONFIG_PHYS_64BIT)
27 typedef u64 phys_addr_t;
28 #else
29 typedef u32 phys_addr_t;
30 #endif
31
32 #endif /* x86 */
33
34 /* The macro below uses a const upstream, this differs */
35
36 /**
37  * DEFINE_PCI_DEVICE_TABLE - macro used to describe a pci device table
38  * @_table: device table name
39  *
40  * This macro is used to create a struct pci_device_id array (a device table)
41  * in a generic manner.
42  */
43 #define DEFINE_PCI_DEVICE_TABLE(_table) \
44         const struct pci_device_id _table[] __devinitdata
45
46 /*
47  * Backport work for QoS dependencies (kernel/pm_qos_params.c)
48  * pm-qos stuff written by mark gross mgross@linux.intel.com.
49  *
50  * ipw2100 now makes use of:
51  *
52  * pm_qos_add_requirement(),
53  * pm_qos_update_requirement() and
54  * pm_qos_remove_requirement() from it
55  *
56  * mac80211 uses the network latency to determine if to enable or not
57  * dynamic PS. mac80211 also and registers a notifier for when
58  * the latency changes. Since older kernels do no thave pm-qos stuff
59  * we just implement it completley here and register it upon cfg80211
60  * init. I haven't tested ipw2100 on 2.6.24 though.
61  *
62  * This pm-qos implementation is copied verbatim from the kernel
63  * written by mark gross mgross@linux.intel.com. You don't have
64  * to do anythinig to use pm-qos except use the same exported
65  * routines as used in newer kernels. The compat_pm_qos_power_init()
66  * defned below is used by the compat module to initialize pm-qos.
67  */
68 int compat_pm_qos_power_init(void);
69 int compat_pm_qos_power_deinit(void);
70
71 /*
72  * 2.6.25 adds PM_EVENT_HIBERNATE as well here but
73  * we don't have this on <= 2.6.23)
74  */
75 #ifndef PM_EVENT_SLEEP /* some distribution have mucked with their own headers to add this.. */
76 #define PM_EVENT_SLEEP  (PM_EVENT_SUSPEND)
77 #endif
78
79 /* Although we don't care about wimax this is needed for rfkill input stuff */
80 #define KEY_WIMAX               246
81
82 /* Although pm_qos stuff is not implemented on <= 2.6.24 lets keep the define */
83 #define PM_QOS_DEFAULT_VALUE -1
84
85 #define __WARN(foo) dump_stack()
86
87 #define dev_emerg(dev, format, arg...)          \
88         dev_printk(KERN_EMERG , dev , format , ## arg)
89 #define dev_alert(dev, format, arg...)          \
90         dev_printk(KERN_ALERT , dev , format , ## arg)
91 #define dev_crit(dev, format, arg...)           \
92         dev_printk(KERN_CRIT , dev , format , ## arg)
93
94 extern int              __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
95 extern void             __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
96
97 #define seq_file_net &init_net;
98
99 enum nf_inet_hooks {
100         NF_INET_PRE_ROUTING = 0,
101         NF_INET_LOCAL_IN = 1,
102         NF_INET_FORWARD = 2,
103         NF_INET_LOCAL_OUT = 3,
104         NF_INET_POST_ROUTING = 4,
105         NF_INET_NUMHOOKS = 5
106 };
107
108 /* The patch:
109  * commit 8b5f6883683c91ad7e1af32b7ceeb604d68e2865
110  * Author: Marcin Slusarz <marcin.slusarz@gmail.com>
111  * Date:   Fri Feb 8 04:20:12 2008 -0800
112  *
113  *     byteorder: move le32_add_cpu & friends from OCFS2 to core
114  *
115  * moves le*_add_cpu and be*_add_cpu functions from OCFS2 to core
116  * header (1st) and converted some existing code to it. We port
117  * it here as later kernels will most likely use it.
118  */
119 static inline void le16_add_cpu(__le16 *var, u16 val)
120 {
121         *var = cpu_to_le16(le16_to_cpu(*var) + val);
122 }
123
124 static inline void le32_add_cpu(__le32 *var, u32 val)
125 {
126         *var = cpu_to_le32(le32_to_cpu(*var) + val);
127 }
128
129 static inline void le64_add_cpu(__le64 *var, u64 val)
130 {
131         *var = cpu_to_le64(le64_to_cpu(*var) + val);
132 }
133
134 static inline void be16_add_cpu(__be16 *var, u16 val)
135 {
136         u16 v = be16_to_cpu(*var);
137         *var = cpu_to_be16(v + val);
138 }
139
140 static inline void be32_add_cpu(__be32 *var, u32 val)
141 {
142         u32 v = be32_to_cpu(*var);
143         *var = cpu_to_be32(v + val);
144 }
145
146 static inline void be64_add_cpu(__be64 *var, u64 val)
147 {
148         u64 v = be64_to_cpu(*var);
149         *var = cpu_to_be64(v + val);
150 }
151
152 /* 2.6.25 changes hwrng_unregister()'s behaviour by supporting
153  * suspend of its parent device (the misc device, which is itself the
154  * hardware random number generator). It does this by passing a parameter to
155  * unregister_miscdev() which is not supported in older kernels. The suspend
156  * parameter allows us to enable access to the device's hardware
157  * number generator during suspend. As far as wireless is concerned this means
158  * if a driver goes to suspend it you won't have the HNR available in
159  * older kernels. */
160 static inline void __hwrng_unregister(struct hwrng *rng, bool suspended)
161 {
162         hwrng_unregister(rng);
163 }
164
165 static inline void led_classdev_unregister_suspended(struct led_classdev *lcd)
166 {
167         led_classdev_unregister(lcd);
168 }
169
170 /**
171  * The following things are out of ./include/linux/kernel.h
172  * The new iwlwifi driver is using them.
173  */
174 extern int strict_strtoul(const char *, unsigned int, unsigned long *);
175 extern int strict_strtol(const char *, unsigned int, long *);
176
177 #else
178 /*
179  * Kernels >= 2.6.25 have pm-qos and its initialized as part of
180  * the bootup process
181  */
182 static inline int compat_pm_qos_power_init(void)
183 {
184         return 0;
185 }
186
187 static inline int compat_pm_qos_power_deinit(void)
188 {
189         return 0;
190 }
191 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) */
192
193 #endif /* LINUX_26_25_COMPAT_H */