ff80b8874e412f3da4c7f69177fe3990da4ca561
[~emulex/for-vlad/old/compat.git] / include / linux / compat-3.1.h
1 #ifndef LINUX_3_1_COMPAT_H
2 #define LINUX_3_1_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
7
8 #include <linux/security.h>
9 #include <linux/skbuff.h>
10 #include <net/ip.h>
11 #include <linux/idr.h>
12 #include <net/dst.h>
13
14 static inline struct neighbour *dst_get_neighbour(struct dst_entry *dst)
15 {
16         return dst->neighbour;
17 }
18
19 static inline void dst_set_neighbour(struct dst_entry *dst, struct neighbour *neigh)
20 {
21         dst->neighbour = neigh;
22 }
23
24 static inline struct neighbour *dst_get_neighbour_raw(struct dst_entry *dst)
25 {
26         return rcu_dereference_raw(dst->neighbour);
27 }
28
29 /* Backports 56f8a75c */
30 static inline bool ip_is_fragment(const struct iphdr *iph)
31 {
32         return (iph->frag_off & htons(IP_MF | IP_OFFSET)) != 0;
33 }
34
35 /* mask __netdev_alloc_skb_ip_align as RHEL6.3 backports it */
36 #define __netdev_alloc_skb_ip_align(a, b, c) compat__netdev_alloc_skb_ip_align(a, b, c)
37
38 static inline struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev,
39                                                           unsigned int length, gfp_t gfp)
40 {
41         struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp);
42
43         if (NET_IP_ALIGN && skb)
44                 skb_reserve(skb, NET_IP_ALIGN);
45         return skb;
46 }
47
48 #ifndef NEED_MIN_DUMP_ALLOC_ARG
49 #include <linux/netlink.h>
50 /* remove last arg */
51 #define netlink_dump_start(a, b, c, d, e, f) netlink_dump_start(a, b, c, d, e)
52 #endif
53
54 /*
55  * Getting something that works in C and CPP for an arg that may or may
56  * not be defined is tricky.  Here, if we have "#define CONFIG_BOOGER 1"
57  * we match on the placeholder define, insert the "0," for arg1 and generate
58  * the triplet (0, 1, 0).  Then the last step cherry picks the 2nd arg (a one).
59  * When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when
60  * the last step cherry picks the 2nd arg, we get a zero.
61  */
62 #define __ARG_PLACEHOLDER_1 0,
63 #define config_enabled(cfg) _config_enabled(cfg)
64 #define _config_enabled(value) __config_enabled(__ARG_PLACEHOLDER_##value)
65 #define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0)
66 #define ___config_enabled(__ignored, val, ...) val
67 #define genl_dump_check_consistent(cb, user_hdr, family)
68
69 /*
70  * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
71  * 0 otherwise.
72  *
73  */
74 #define IS_ENABLED(option) \
75         (config_enabled(option) || config_enabled(option##_MODULE))
76
77 #define IFF_TX_SKB_SHARING      0x10000 /* The interface supports sharing
78                                          * skbs on transmit */
79
80 #define PCMCIA_DEVICE_MANF_CARD_PROD_ID3(manf, card, v3, vh3) { \
81         .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
82                         PCMCIA_DEV_ID_MATCH_CARD_ID| \
83                         PCMCIA_DEV_ID_MATCH_PROD_ID3, \
84         .manf_id = (manf), \
85         .card_id = (card), \
86         .prod_id = { NULL, NULL, (v3), NULL }, \
87         .prod_id_hash = { 0, 0, (vh3), 0 }, }
88
89 /*
90  * This has been defined in include/linux/security.h for some time, but was
91  * only given an EXPORT_SYMBOL for 3.1.  Add a compat_* definition to avoid
92  * breaking the compile.
93  */
94 #define security_sk_clone(a, b) compat_security_sk_clone(a, b)
95
96 static inline void security_sk_clone(const struct sock *sk, struct sock *newsk)
97 {
98 }
99
100 /*
101  * In many versions, several architectures do not seem to include an
102  * atomic64_t implementation, and do not include the software emulation from
103  * asm-generic/atomic64_t.
104  * Detect and handle this here.
105  */
106 #include <asm/atomic.h>
107
108 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)) && !defined(ATOMIC64_INIT) && !defined(CONFIG_X86) && !((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) && defined(CONFIG_ARM) && !defined(CONFIG_GENERIC_ATOMIC64))
109 #include <asm-generic/atomic64.h>
110 #endif
111
112 int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end,
113                    gfp_t gfp_mask);
114 void ida_simple_remove(struct ida *ida, unsigned int id);
115
116 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) */
117
118 #endif /* LINUX_3_1_COMPAT_H */