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