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