1 #ifndef LINUX_26_25_COMPAT_H
2 #define LINUX_26_25_COMPAT_H
4 #include <linux/autoconf.h>
5 #include <linux/version.h>
7 /* Compat work for 2.6.24 */
8 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25))
10 #include <linux/types.h>
12 #include <linux/hw_random.h>
13 #include <linux/leds.h>
14 #include <linux/kernel.h>
15 #include <linux/netdevice.h>
17 #include <asm-generic/bug.h>
18 #include <linux/pm_qos_params.h>
21 * Backport work for QoS dependencies (kernel/pm_qos_params.c)
22 * pm-qos stuff written by mark gross mgross@linux.intel.com.
24 * ipw2100 now makes use of:
26 * pm_qos_add_requirement(),
27 * pm_qos_update_requirement() and
28 * pm_qos_remove_requirement() from it
30 * mac80211 uses the network latency to determine if to enable or not
31 * dynamic PS. mac80211 also and registers a notifier for when
32 * the latency changes. Since older kernels do no thave pm-qos stuff
33 * we just implement it completley here and register it upon cfg80211
34 * init. I haven't tested ipw2100 on 2.6.24 though.
36 * This pm-qos implementation is copied verbatim from the kernel
37 * written by mark gross mgross@linux.intel.com. You don't have
38 * to do anythinig to use pm-qos except use the same exported
39 * routines as used in newer kernels. The compat_pm_qos_power_init()
40 * defned below is used by the compat module to initialize pm-qos.
42 int compat_pm_qos_power_init(void);
45 * 2.6.25 adds PM_EVENT_HIBERNATE as well here but
46 * we don't have this on <= 2.6.23)
48 #define PM_EVENT_SLEEP (PM_EVENT_SUSPEND)
50 /* Although we don't care about wimax this is needed for rfkill input stuff */
53 /* Although pm_qos stuff is not implemented on <= 2.6.24 lets keep the define */
54 #define PM_QOS_DEFAULT_VALUE -1
56 #define __WARN(foo) dump_stack()
58 #define dev_emerg(dev, format, arg...) \
59 dev_printk(KERN_EMERG , dev , format , ## arg)
60 #define dev_alert(dev, format, arg...) \
61 dev_printk(KERN_ALERT , dev , format , ## arg)
62 #define dev_crit(dev, format, arg...) \
63 dev_printk(KERN_CRIT , dev , format , ## arg)
65 extern int __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
66 extern void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count);
68 #define seq_file_net &init_net;
71 NF_INET_PRE_ROUTING = 0,
74 NF_INET_LOCAL_OUT = 3,
75 NF_INET_POST_ROUTING = 4,
80 * commit 8b5f6883683c91ad7e1af32b7ceeb604d68e2865
81 * Author: Marcin Slusarz <marcin.slusarz@gmail.com>
82 * Date: Fri Feb 8 04:20:12 2008 -0800
84 * byteorder: move le32_add_cpu & friends from OCFS2 to core
86 * moves le*_add_cpu and be*_add_cpu functions from OCFS2 to core
87 * header (1st) and converted some existing code to it. We port
88 * it here as later kernels will most likely use it.
90 static inline void le16_add_cpu(__le16 *var, u16 val)
92 *var = cpu_to_le16(le16_to_cpu(*var) + val);
95 static inline void le32_add_cpu(__le32 *var, u32 val)
97 *var = cpu_to_le32(le32_to_cpu(*var) + val);
100 static inline void le64_add_cpu(__le64 *var, u64 val)
102 *var = cpu_to_le64(le64_to_cpu(*var) + val);
105 static inline void be16_add_cpu(__be16 *var, u16 val)
107 u16 v = be16_to_cpu(*var);
108 *var = cpu_to_be16(v + val);
111 static inline void be32_add_cpu(__be32 *var, u32 val)
113 u32 v = be32_to_cpu(*var);
114 *var = cpu_to_be32(v + val);
117 static inline void be64_add_cpu(__be64 *var, u64 val)
119 u64 v = be64_to_cpu(*var);
120 *var = cpu_to_be64(v + val);
123 /* 2.6.25 changes hwrng_unregister()'s behaviour by supporting
124 * suspend of its parent device (the misc device, which is itself the
125 * hardware random number generator). It does this by passing a parameter to
126 * unregister_miscdev() which is not supported in older kernels. The suspend
127 * parameter allows us to enable access to the device's hardware
128 * number generator during suspend. As far as wireless is concerned this means
129 * if a driver goes to suspend it you won't have the HNR available in
131 static inline void __hwrng_unregister(struct hwrng *rng, bool suspended)
133 hwrng_unregister(rng);
136 static inline void led_classdev_unregister_suspended(struct led_classdev *lcd)
138 led_classdev_unregister(lcd);
142 * The following things are out of ./include/linux/kernel.h
143 * The new iwlwifi driver is using them.
145 extern int strict_strtoul(const char *, unsigned int, unsigned long *);
146 extern int strict_strtol(const char *, unsigned int, long *);
150 * Kernels >= 2.6.25 have pm-qos and its initialized as part of
153 static inline int compat_pm_qos_power_init(void)
157 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) */
159 #endif /* LINUX_26_25_COMPAT_H */