Added RHEL6.4 support
[~tnikolova/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/errno.h>
12
13 static inline int proto_ports_offset(int proto)
14 {
15         switch (proto) {
16         case IPPROTO_TCP:
17         case IPPROTO_UDP:
18         case IPPROTO_DCCP:
19         case IPPROTO_ESP:       /* SPI */
20         case IPPROTO_SCTP:
21         case IPPROTO_UDPLITE:
22                 return 0;
23         case IPPROTO_AH:        /* SPI */
24                 return 4;
25         default:
26                 return -EINVAL;
27         }
28 }
29
30 #define SDIO_CLASS_BT_AMP       0x09    /* Type-A Bluetooth AMP interface */
31
32 #define VLAN_N_VID              4096
33
34 #ifndef CONFIG_COMPAT_RHEL_6_4
35 /*
36  *     netif_set_real_num_rx_queues - set actual number of RX queues used
37  *     @dev: Network device
38  *     @rxq: Actual number of RX queues
39  *
40  *     This function actully sets the real_num_rx_queues field in struct
41  *     net_device. Since real_num_rx_queues field is not present in net_device
42  *     structure in 2.6.37 kernel making this function to set that field is not
43  *     possible. Hence adding this function to avoid changes in driver source
44  *     code and making this function to always return success.
45  */
46 static inline int netif_set_real_num_rx_queues(struct net_device *dev,
47         unsigned int rxq)
48 {
49     return 0;
50 }
51 #endif /* CONFIG_COMPAT_RHEL_6_4 */
52
53 extern struct kobj_ns_type_operations net_ns_type_operations;
54
55 /* mask skb_checksum_none_assert as RHEL6 backports this */
56 #define skb_checksum_none_assert(a) compat_skb_checksum_none_assert(a)
57
58 /**
59  * skb_checksum_none_assert - make sure skb ip_summed is CHECKSUM_NONE
60  * @skb: skb to check
61  *
62  * fresh skbs have their ip_summed set to CHECKSUM_NONE.
63  * Instead of forcing ip_summed to CHECKSUM_NONE, we can
64  * use this helper, to document places where we make this assertion.
65  */
66 static inline void skb_checksum_none_assert(struct sk_buff *skb)
67 {
68 #ifdef DEBUG
69         BUG_ON(skb->ip_summed != CHECKSUM_NONE);
70 #endif
71 }
72
73 #ifndef CONFIG_COMPAT_RHEL_6_4
74 #define pcmcia_enable_device(link)      pcmcia_request_configuration(link, &link->conf)
75 #endif /* CONFIG_COMPAT_RHEL_6_4 */
76
77 #include <net/genetlink.h>
78
79 struct compat_genl_info {
80         struct genl_info *info;
81
82         u32 snd_seq;
83         u32 snd_pid;
84         struct genlmsghdr *genlhdr;
85         struct nlattr **attrs;
86         void *user_ptr[2];
87 };
88 #define genl_info compat_genl_info
89
90 struct compat_genl_ops {
91         struct genl_ops ops;
92
93         u8 cmd;
94         u8 internal_flags;
95         unsigned int flags;
96         const struct nla_policy *policy;
97
98         int (*doit)(struct sk_buff *skb, struct genl_info *info);
99         int (*dumpit)(struct sk_buff *skb, struct netlink_callback *cb);
100         int (*done)(struct netlink_callback *cb);
101 };
102 #define genl_ops compat_genl_ops
103
104 struct compat_genl_family {
105         struct genl_family family;
106
107         struct list_head list;
108
109         unsigned int id, hdrsize, version, maxattr;
110         const char *name;
111         bool netnsok;
112
113         struct nlattr **attrbuf;
114
115         int (*pre_doit)(struct genl_ops *ops, struct sk_buff *skb,
116                         struct genl_info *info);
117
118         void (*post_doit)(struct genl_ops *ops, struct sk_buff *skb,
119                           struct genl_info *info);
120 };
121
122 #define genl_family compat_genl_family
123
124 #define genl_register_family_with_ops compat_genl_register_family_with_ops
125
126 int genl_register_family_with_ops(struct genl_family *family,
127                                   struct genl_ops *ops, size_t n_ops);
128
129 #define genl_unregister_family compat_genl_unregister_family
130
131 int genl_unregister_family(struct genl_family *family);
132
133 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32))
134 #define genl_info_net(_info) genl_info_net((_info)->info)
135 #endif
136
137 #define genlmsg_reply(_msg, _info) genlmsg_reply(_msg, (_info)->info)
138 #define genlmsg_put(_skb, _pid, _seq, _fam, _flags, _cmd) genlmsg_put(_skb, _pid, _seq, &(_fam)->family, _flags, _cmd)
139 #define genl_register_mc_group(_fam, _grp) genl_register_mc_group(&(_fam)->family, _grp)
140 #define genl_unregister_mc_group(_fam, _grp) genl_unregister_mc_group(&(_fam)->family, _grp)
141
142
143 extern void led_blink_set(struct led_classdev *led_cdev,
144                           unsigned long *delay_on,
145                           unsigned long *delay_off);
146
147 #define led_classdev_unregister compat_led_classdev_unregister
148 extern void compat_led_classdev_unregister(struct led_classdev *led_cdev);
149
150 #define led_brightness_set compat_led_brightness_set
151 extern void compat_led_brightness_set(struct led_classdev *led_cdev,
152                                       enum led_brightness brightness);
153
154 #define alloc_ordered_workqueue(name, flags) create_singlethread_workqueue(name)
155
156 #define netdev_refcnt_read(a) atomic_read(&a->refcnt)
157
158 /* mask vzalloc as RHEL6 backports this */
159 #define vzalloc(a) compat_vzalloc(a)
160
161 extern void *vzalloc(unsigned long size);
162
163 #ifndef CONFIG_COMPAT_RHEL_6_4
164 #define rtnl_dereference(p)                                     \
165         rcu_dereference_protected(p, lockdep_rtnl_is_held())
166 #endif /* CONFIG_COMPAT_RHEL_6_4 */
167
168 /**
169  * RCU_INIT_POINTER() - initialize an RCU protected pointer
170  *
171  * Initialize an RCU-protected pointer in such a way to avoid RCU-lockdep
172  * splats.
173  */
174 #define RCU_INIT_POINTER(p, v) \
175                 p = (typeof(*v) __force __rcu *)(v)
176
177 static inline bool skb_has_frag_list(const struct sk_buff *skb)
178 {
179         return skb_shinfo(skb)->frag_list != NULL;
180 }
181
182 /* boolean flags controlling per-interface behavior characteristics.
183  * When reading, the flag indicates whether or not a certain behavior
184  * is enabled/present.  When writing, the flag indicates whether
185  * or not the driver should turn on (set) or off (clear) a behavior.
186  *
187  * Some behaviors may read-only (unconditionally absent or present).
188  * If such is the case, return EINVAL in the set-flags operation if the
189  * flag differs from the read-only value.
190  *
191  * Adding missing enums for ethtool_flags in 2.6.32 kernel.
192  */
193 enum additional_ethtool_flags {
194     ETH_FLAG_TXVLAN         = (1 << 7),     /* TX VLAN offload enabled */
195     ETH_FLAG_RXVLAN         = (1 << 8),     /* RX VLAN offload enabled */
196 };
197
198 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) */
199
200 #endif /* LINUX_26_37_COMPAT_H */