compat: Addition to compat-2.6.39.h
[~tnikolova/compat/.git] / include / linux / compat-2.6.39.h
1 #ifndef LINUX_26_39_COMPAT_H
2 #define LINUX_26_39_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39))
7
8 #include <linux/tty.h>
9 #include <linux/irq.h>
10 #include <linux/kernel.h>
11 #include <linux/netdevice.h>
12
13 #define tiocmget(tty) tiocmget(tty, NULL)
14 #define tiocmset(tty, set, clear) tiocmset(tty, NULL, set, clear)
15
16 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
17 extern int tty_set_termios(struct tty_struct *tty, struct ktermios *kt);
18 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) */
19
20 static inline int netif_is_bond_slave(struct net_device *dev)
21 {
22         return dev->flags & IFF_SLAVE && dev->priv_flags & IFF_BONDING;
23 }
24 static inline int irq_set_irq_wake(unsigned int irq, unsigned int on)
25 {
26         return set_irq_wake(irq, on);
27 }
28 static inline int irq_set_chip(unsigned int irq, struct irq_chip *chip)
29 {
30         return set_irq_chip(irq, chip);
31 }
32 static inline int irq_set_handler_data(unsigned int irq, void *data)
33 {
34         return set_irq_data(irq, data);
35 }
36 static inline int irq_set_chip_data(unsigned int irq, void *data)
37 {
38         return set_irq_chip_data(irq, data);
39 }
40 static inline int irq_set_irq_type(unsigned int irq, unsigned int type)
41 {
42         return set_irq_type(irq, type);
43 }
44 static inline int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry)
45 {
46         return set_irq_msi(irq, entry);
47 }
48 static inline struct irq_chip *irq_get_chip(unsigned int irq)
49 {
50         return get_irq_chip(irq);
51 }
52 static inline void *irq_get_chip_data(unsigned int irq)
53 {
54         return get_irq_chip_data(irq);
55 }
56 static inline void *irq_get_handler_data(unsigned int irq)
57 {
58         return get_irq_data(irq);
59 }
60
61 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
62 static inline void *irq_data_get_irq_handler_data(struct irq_data *d)
63 {
64         return irq_data_get_irq_data(d);
65 }
66 #endif
67
68 static inline struct msi_desc *irq_get_msi_desc(unsigned int irq)
69 {
70         return get_irq_msi(irq);
71 }
72
73 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
74 static inline void irq_set_noprobe(unsigned int irq)
75 {
76         set_irq_noprobe(irq);
77 }
78 static inline void irq_set_probe(unsigned int irq)
79 {
80         set_irq_probe(irq);
81 }
82 #endif
83
84 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
85 static inline struct irq_chip *irq_desc_get_chip(struct irq_desc *desc)
86 {
87         return get_irq_desc_chip(desc);
88 }
89 static inline void *irq_desc_get_handler_data(struct irq_desc *desc)
90 {
91         return get_irq_desc_data(desc);
92 }
93
94 static inline void *irq_desc_get_chip_data(struct irq_desc *desc)
95 {
96         return get_irq_desc_chip_data(desc);
97 }
98
99 static inline struct msi_desc *irq_desc_get_msi_desc(struct irq_desc *desc)
100 {
101         return get_irq_desc_msi(desc);
102 }
103 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) */
104
105 /* 
106  * kstrto* was included in kernel 2.6.38.4 and causes conflicts with the
107  * version included in compat-wireless. We use strict_strtol to check if
108  * kstrto* is already available.
109  */
110 #ifndef strict_strtol
111 /* Internal, do not use. */
112 int __must_check _kstrtoul(const char *s, unsigned int base, unsigned long *res);
113 int __must_check _kstrtol(const char *s, unsigned int base, long *res);
114
115 int __must_check kstrtoull(const char *s, unsigned int base, unsigned long long *res);
116 int __must_check kstrtoll(const char *s, unsigned int base, long long *res);
117 static inline int __must_check kstrtoul(const char *s, unsigned int base, unsigned long *res)
118 {
119         /*
120          * We want to shortcut function call, but
121          * __builtin_types_compatible_p(unsigned long, unsigned long long) = 0.
122          */
123         if (sizeof(unsigned long) == sizeof(unsigned long long) &&
124             __alignof__(unsigned long) == __alignof__(unsigned long long))
125                 return kstrtoull(s, base, (unsigned long long *)res);
126         else
127                 return _kstrtoul(s, base, res);
128 }
129
130 static inline int __must_check kstrtol(const char *s, unsigned int base, long *res)
131 {
132         /*
133          * We want to shortcut function call, but
134          * __builtin_types_compatible_p(long, long long) = 0.
135          */
136         if (sizeof(long) == sizeof(long long) &&
137             __alignof__(long) == __alignof__(long long))
138                 return kstrtoll(s, base, (long long *)res);
139         else
140                 return _kstrtol(s, base, res);
141 }
142
143 int __must_check kstrtouint(const char *s, unsigned int base, unsigned int *res);
144 int __must_check kstrtoint(const char *s, unsigned int base, int *res);
145
146 static inline int __must_check kstrtou64(const char *s, unsigned int base, u64 *res)
147 {
148         return kstrtoull(s, base, res);
149 }
150
151 static inline int __must_check kstrtos64(const char *s, unsigned int base, s64 *res)
152 {
153         return kstrtoll(s, base, res);
154 }
155
156 static inline int __must_check kstrtou32(const char *s, unsigned int base, u32 *res)
157 {
158         return kstrtouint(s, base, res);
159 }
160
161 static inline int __must_check kstrtos32(const char *s, unsigned int base, s32 *res)
162 {
163         return kstrtoint(s, base, res);
164 }
165
166 int __must_check kstrtou16(const char *s, unsigned int base, u16 *res);
167 int __must_check kstrtos16(const char *s, unsigned int base, s16 *res);
168 int __must_check kstrtou8(const char *s, unsigned int base, u8 *res);
169 int __must_check kstrtos8(const char *s, unsigned int base, s8 *res);
170 #endif /* ifndef strict_strtol */
171
172 static inline int test_bit_le(int nr, const void *addr)
173 {
174         return test_bit(nr ^ BITOP_LE_SWIZZLE, addr);
175 }
176
177 static inline void __set_bit_le(int nr, void *addr)
178 {
179         __set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
180 }
181
182 static inline void __clear_bit_le(int nr, void *addr)
183 {
184         __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
185 }
186
187 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) */
188
189 #endif /* LINUX_26_39_COMPAT_H */