compat: Prevent redefining ETH_FLAG_TXVLAN/ETH_FLAG_RXVLAN.
[~emulex/for-vlad/old/compat.git] / include / linux / compat-2.6.37.h
1 #ifndef LINUX_26_37_COMPAT_H
2 #define LINUX_26_37_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37))
7
8 #include <linux/skbuff.h>
9 #include <linux/leds.h>
10 #include <linux/in.h>
11 #include <linux/rcupdate.h>
12 #include <linux/netdevice.h>
13 #include <linux/errno.h>
14
15 static inline int proto_ports_offset(int proto)
16 {
17         switch (proto) {
18         case IPPROTO_TCP:
19         case IPPROTO_UDP:
20         case IPPROTO_DCCP:
21         case IPPROTO_ESP:       /* SPI */
22         case IPPROTO_SCTP:
23         case IPPROTO_UDPLITE:
24                 return 0;
25         case IPPROTO_AH:        /* SPI */
26                 return 4;
27         default:
28                 return -EINVAL;
29         }
30 }
31
32 /* supports eipoib flags, priv_flags is short till that version */
33 #define CONFIG_COMPAT_IFF_EIPOIB_PIF 0x8000 /*== IFF_OVS_DATAPATH*/
34 #define CONFIG_COMPAT_IFF_EIPOIB_VIF 0x4000 /*IFF_MACVLAN_PORT*/
35
36 /* Definitions for tx_flags in struct skb_shared_info */
37 enum {
38         /* generate hardware time stamp */
39         SKBTX_HW_TSTAMP = 1 << 0,
40
41         /* generate software time stamp */
42         SKBTX_SW_TSTAMP = 1 << 1,
43
44         /* device driver is going to provide hardware time stamp */
45         SKBTX_IN_PROGRESS = 1 << 2,
46
47         /* ensure the originating sk reference is available on driver level */
48         SKBTX_DRV_NEEDS_SK_REF = 1 << 3,
49 };
50
51
52 #define SDIO_CLASS_BT_AMP       0x09    /* Type-A Bluetooth AMP interface */
53
54 #define VLAN_N_VID              4096
55
56 /*
57  *     netif_set_real_num_rx_queues - set actual number of RX queues used
58  *     @dev: Network device
59  *     @rxq: Actual number of RX queues
60  *
61  *     This function actully sets the real_num_rx_queues field in struct
62  *     net_device. Since real_num_rx_queues field is not present in net_device
63  *     structure in 2.6.37 kernel making this function to set that field is not
64  *     possible. Hence adding this function to avoid changes in driver source
65  *     code and making this function to always return success.
66  */
67 /* mask netif_set_real_num_rx_queues as RHEL6.4 backports this */
68 #define netif_set_real_num_rx_queues(a, b) compat_netif_set_real_num_rx_queues(a, b)
69 static inline int netif_set_real_num_rx_queues(struct net_device *dev,
70         unsigned int rxq)
71 {
72     return 0;
73 }
74
75 #define net_ns_type_operations LINUX_BACKPORT(net_ns_type_operations)
76 extern struct kobj_ns_type_operations net_ns_type_operations;
77
78 /* mask skb_checksum_none_assert as RHEL6 backports this */
79 #define skb_checksum_none_assert(a) compat_skb_checksum_none_assert(a)
80
81 /**
82  * skb_checksum_none_assert - make sure skb ip_summed is CHECKSUM_NONE
83  * @skb: skb to check
84  *
85  * fresh skbs have their ip_summed set to CHECKSUM_NONE.
86  * Instead of forcing ip_summed to CHECKSUM_NONE, we can
87  * use this helper, to document places where we make this assertion.
88  */
89 static inline void skb_checksum_none_assert(struct sk_buff *skb)
90 {
91 #ifdef DEBUG
92         BUG_ON(skb->ip_summed != CHECKSUM_NONE);
93 #endif
94 }
95
96 #include <net/genetlink.h>
97
98 struct compat_genl_info {
99         struct genl_info *info;
100
101         u32 snd_seq;
102         u32 snd_pid;
103         struct genlmsghdr *genlhdr;
104         struct nlattr **attrs;
105         void *user_ptr[2];
106 };
107 #define genl_info compat_genl_info
108
109 struct compat_genl_ops {
110         struct genl_ops ops;
111
112         u8 cmd;
113         u8 internal_flags;
114         unsigned int flags;
115         const struct nla_policy *policy;
116
117         int (*doit)(struct sk_buff *skb, struct genl_info *info);
118         int (*dumpit)(struct sk_buff *skb, struct netlink_callback *cb);
119         int (*done)(struct netlink_callback *cb);
120 };
121 #define genl_ops compat_genl_ops
122
123 struct compat_genl_family {
124         struct genl_family family;
125
126         struct list_head list;
127
128         unsigned int id, hdrsize, version, maxattr;
129         const char *name;
130         bool netnsok;
131
132         struct nlattr **attrbuf;
133
134         int (*pre_doit)(struct genl_ops *ops, struct sk_buff *skb,
135                         struct genl_info *info);
136
137         void (*post_doit)(struct genl_ops *ops, struct sk_buff *skb,
138                           struct genl_info *info);
139 };
140
141 #define genl_family compat_genl_family
142
143 #define genl_register_family_with_ops compat_genl_register_family_with_ops
144
145 int genl_register_family_with_ops(struct genl_family *family,
146                                   struct genl_ops *ops, size_t n_ops);
147
148 #define genl_unregister_family compat_genl_unregister_family
149
150 int genl_unregister_family(struct genl_family *family);
151
152 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32))
153 #define genl_info_net(_info) genl_info_net((_info)->info)
154 #endif
155
156 #define genlmsg_reply(_msg, _info) genlmsg_reply(_msg, (_info)->info)
157 #define genlmsg_put(_skb, _pid, _seq, _fam, _flags, _cmd) genlmsg_put(_skb, _pid, _seq, &(_fam)->family, _flags, _cmd)
158 #define genl_register_mc_group(_fam, _grp) genl_register_mc_group(&(_fam)->family, _grp)
159 #define genl_unregister_mc_group(_fam, _grp) genl_unregister_mc_group(&(_fam)->family, _grp)
160
161
162 #define led_blink_set LINUX_BACKPORT(led_blink_set)
163 extern void led_blink_set(struct led_classdev *led_cdev,
164                           unsigned long *delay_on,
165                           unsigned long *delay_off);
166
167 #define led_classdev_unregister compat_led_classdev_unregister
168 extern void compat_led_classdev_unregister(struct led_classdev *led_cdev);
169
170 #define led_brightness_set compat_led_brightness_set
171 extern void compat_led_brightness_set(struct led_classdev *led_cdev,
172                                       enum led_brightness brightness);
173
174 #define alloc_ordered_workqueue(name, flags) create_singlethread_workqueue(name)
175
176 #define netdev_refcnt_read(a) atomic_read(&a->refcnt)
177
178 #define vzalloc LINUX_BACKPORT(vzalloc)
179 #define vzalloc_node LINUX_BACKPORT(vzalloc_node)
180
181 extern void *vzalloc(unsigned long size);
182 extern void *vzalloc_node(unsigned long size, int node);
183
184 #ifndef rtnl_dereference
185 #define rtnl_dereference(p)                                     \
186         rcu_dereference_protected(p, lockdep_rtnl_is_held())
187 #endif
188
189 #ifndef rcu_dereference_protected
190 #define rcu_dereference_protected(p, c) \
191                 rcu_dereference((p))
192 #endif
193
194 #ifndef rcu_dereference_bh
195 #define rcu_dereference_bh(p) \
196                 rcu_dereference((p))
197 #endif
198
199 /**
200  * RCU_INIT_POINTER() - initialize an RCU protected pointer
201  *
202  * Initialize an RCU-protected pointer in such a way to avoid RCU-lockdep
203  * splats.
204  */
205 #define RCU_INIT_POINTER(p, v) \
206                 p = (typeof(*v) __force __rcu *)(v)
207
208 #define skb_has_frag_list LINUX_BACKPORT(skb_has_frag_list)
209 static inline bool skb_has_frag_list(const struct sk_buff *skb)
210 {
211         return skb_shinfo(skb)->frag_list != NULL;
212 }
213
214 /* boolean flags controlling per-interface behavior characteristics.
215  * When reading, the flag indicates whether or not a certain behavior
216  * is enabled/present.  When writing, the flag indicates whether
217  * or not the driver should turn on (set) or off (clear) a behavior.
218  *
219  * Some behaviors may read-only (unconditionally absent or present).
220  * If such is the case, return EINVAL in the set-flags operation if the
221  * flag differs from the read-only value.
222  *
223  * Adding missing enums for ethtool_flags in 2.6.32 kernel.
224  */
225 #ifndef CONFIG_COMPAT_IS_ETH_FLAG_TXVLAN
226 enum additional_ethtool_flags {
227     ETH_FLAG_TXVLAN         = (1 << 7),     /* TX VLAN offload enabled */
228     ETH_FLAG_RXVLAN         = (1 << 8),     /* RX VLAN offload enabled */
229 };
230 #endif
231
232 extern void             unregister_netdevice_queue(struct net_device *dev,
233                                                    struct list_head *head);
234
235 #ifndef max3
236 #define max3(x, y, z) ({                        \
237         typeof(x) _max1 = (x);                  \
238         typeof(y) _max2 = (y);                  \
239         typeof(z) _max3 = (z);                  \
240         (void) (&_max1 == &_max2);              \
241         (void) (&_max1 == &_max3);              \
242         _max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \
243                 (_max2 > _max3 ? _max2 : _max3); })
244 #endif
245
246 #ifndef CONFIG_COMPAT_XPRTRDMA_NEEDED
247 struct rpc_xprt *       xprt_alloc(int size, int max_req);
248 void                    xprt_free(struct rpc_xprt *);
249 #endif /* CONFIG_COMPAT_XPRTRDMA_NEEDED */
250
251 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) */
252
253 #endif /* LINUX_26_37_COMPAT_H */