b4e123691edf6ecc7731e38959b2e6461326b831
[~emulex/for-vlad/old/compat.git] / include / linux / compat-2.6.29.h
1 #ifndef LINUX_26_29_COMPAT_H
2 #define LINUX_26_29_COMPAT_H
3
4 #include <linux/version.h>
5 #include <linux/netdevice.h>
6 #include <linux/if_link.h>
7
8 /*
9  * I kow this looks odd.. but 2.6.32 added the netdev_tx_t
10  * and we backport that there so inlcude that header first
11  * as we need it for the netdev ops.
12  */
13 #include <linux/compat-2.6.32.h>
14
15 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29))
16
17 #include <linux/skbuff.h>
18 #include <linux/usb.h>
19
20 #define  PCI_EXP_LNKCTL_ES     0x0080  /* Extended Synch */
21
22 /*
23  * Older kernels do not have struct net_device_ops but what we can
24  * do is just define the data structure and use a caller to let us
25  * set the data structure's routines onto the old netdev, essentially
26  * doing it the old way. This avoids huge deltas on our backports.
27  */
28
29 /*
30  * This structure defines the management hooks for network devices.
31  * The following hooks can be defined; unless noted otherwise, they are
32  * optional and can be filled with a null pointer.
33  *
34  * int (*ndo_init)(struct net_device *dev);
35  *     This function is called once when network device is registered.
36  *     The network device can use this to any late stage initializaton
37  *     or semantic validattion. It can fail with an error code which will
38  *     be propogated back to register_netdev
39  *
40  * void (*ndo_uninit)(struct net_device *dev);
41  *     This function is called when device is unregistered or when registration
42  *     fails. It is not called if init fails.
43  *
44  * int (*ndo_open)(struct net_device *dev);
45  *     This function is called when network device transistions to the up
46  *     state.
47  *
48  * int (*ndo_stop)(struct net_device *dev);
49  *     This function is called when network device transistions to the down
50  *     state.
51  *
52  * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb,
53  *                               struct net_device *dev);
54  *      Called when a packet needs to be transmitted.
55  *      Must return NETDEV_TX_OK , NETDEV_TX_BUSY.
56  *        (can also return NETDEV_TX_LOCKED iff NETIF_F_LLTX)
57  *      Required can not be NULL.
58  *
59  * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb);
60  *      Called to decide which queue to when device supports multiple
61  *      transmit queues.
62  *
63  * void (*ndo_change_rx_flags)(struct net_device *dev, int flags);
64  *      This function is called to allow device receiver to make
65  *      changes to configuration when multicast or promiscious is enabled.
66  *
67  * void (*ndo_set_rx_mode)(struct net_device *dev);
68  *      This function is called device changes address list filtering.
69  *
70  * void (*ndo_set_multicast_list)(struct net_device *dev);
71  *      This function is called when the multicast address list changes.
72  *
73  * int (*ndo_set_mac_address)(struct net_device *dev, void *addr);
74  *      This function  is called when the Media Access Control address
75  *      needs to be changed. If this interface is not defined, the
76  *      mac address can not be changed.
77  *
78  * int (*ndo_validate_addr)(struct net_device *dev);
79  *      Test if Media Access Control address is valid for the device.
80  *
81  * int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
82  *      Called when a user request an ioctl which can't be handled by
83  *      the generic interface code. If not defined ioctl's return
84  *      not supported error code.
85  *
86  * int (*ndo_set_config)(struct net_device *dev, struct ifmap *map);
87  *      Used to set network devices bus interface parameters. This interface
88  *      is retained for legacy reason, new devices should use the bus
89  *      interface (PCI) for low level management.
90  *
91  * int (*ndo_change_mtu)(struct net_device *dev, int new_mtu);
92  *      Called when a user wants to change the Maximum Transfer Unit
93  *      of a device. If not defined, any request to change MTU will
94  *      will return an error.
95  *
96  * void (*ndo_tx_timeout)(struct net_device *dev);
97  *      Callback uses when the transmitter has not made any progress
98  *      for dev->watchdog ticks.
99  *
100  * struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
101  *      Called when a user wants to get the network device usage
102  *      statistics. If not defined, the counters in dev->stats will
103  *      be used.
104  *
105  * void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp);
106  *      If device support VLAN receive accleration
107  *      (ie. dev->features & NETIF_F_HW_VLAN_RX), then this function is called
108  *      when vlan groups for the device changes.  Note: grp is NULL
109  *      if no vlan's groups are being used.
110  *
111  * void (*ndo_vlan_rx_add_vid)(struct net_device *dev, unsigned short vid);
112  *      If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER)
113  *      this function is called when a VLAN id is registered.
114  *
115  * void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, unsigned short vid);
116  *      If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER)
117  *      this function is called when a VLAN id is unregistered.
118  *
119  * void (*ndo_poll_controller)(struct net_device *dev);
120  *
121  *      SR-IOV management functions.
122  * int (*ndo_set_vf_mac)(struct net_device *dev, int vf, u8* mac);
123  * int (*ndo_set_vf_vlan)(struct net_device *dev, int vf, u16 vlan, u8 qos);
124  * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate);
125  * int (*ndo_get_vf_config)(struct net_device *dev,
126  *                          int vf, struct ifla_vf_info *ivf);
127  */
128 #define HAVE_NET_DEVICE_OPS
129 struct net_device_ops {
130         int                     (*ndo_init)(struct net_device *dev);
131         void                    (*ndo_uninit)(struct net_device *dev);
132         int                     (*ndo_open)(struct net_device *dev);
133         int                     (*ndo_stop)(struct net_device *dev);
134         netdev_tx_t             (*ndo_start_xmit) (struct sk_buff *skb,
135                                                    struct net_device *dev);
136         u16                     (*ndo_select_queue)(struct net_device *dev,
137                                                     struct sk_buff *skb);
138         void                    (*ndo_change_rx_flags)(struct net_device *dev,
139                                                        int flags);
140         void                    (*ndo_set_rx_mode)(struct net_device *dev);
141         void                    (*ndo_set_multicast_list)(struct net_device *dev);
142         int                     (*ndo_set_mac_address)(struct net_device *dev,
143                                                        void *addr);
144         int                     (*ndo_validate_addr)(struct net_device *dev);
145         int                     (*ndo_do_ioctl)(struct net_device *dev,
146                                                 struct ifreq *ifr, int cmd);
147         int                     (*ndo_set_config)(struct net_device *dev,
148                                                   struct ifmap *map);
149         int                     (*ndo_change_mtu)(struct net_device *dev,
150                                                   int new_mtu);
151         int                     (*ndo_neigh_setup)(struct net_device *dev,
152                                                    struct neigh_parms *);
153         void                    (*ndo_tx_timeout) (struct net_device *dev);
154
155         struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
156
157         void                    (*ndo_vlan_rx_register)(struct net_device *dev,
158                                                         struct vlan_group *grp);
159         void                    (*ndo_vlan_rx_add_vid)(struct net_device *dev,
160                                                        unsigned short vid);
161         void                    (*ndo_vlan_rx_kill_vid)(struct net_device *dev,
162                                                         unsigned short vid);
163 #ifdef CONFIG_NET_POLL_CONTROLLER
164         void                    (*ndo_poll_controller)(struct net_device *dev);
165 #endif
166         int                     (*ndo_set_vf_mac)(struct net_device *dev,
167                                                   int queue, u8 *mac);
168         int                     (*ndo_set_vf_vlan)(struct net_device *dev,
169                                                    int queue, u16 vlan, u8 qos);
170         int                     (*ndo_set_vf_tx_rate)(struct net_device *dev,
171                                                       int vf, int rate);
172 /*
173  * The struct ifla_vf_info was added via b280da8d54b8d82b52f368a8703b7ada6c1744d5
174  * on the v2.6.34-rc1~233^2~338 release
175  */
176 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
177         int                     (*ndo_get_vf_config)(struct net_device *dev,
178                                                      int vf,
179                                                      struct ifla_vf_info *ivf);
180 #endif
181 #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
182         int                     (*ndo_fcoe_enable)(struct net_device *dev);
183         int                     (*ndo_fcoe_disable)(struct net_device *dev);
184         int                     (*ndo_fcoe_ddp_setup)(struct net_device *dev,
185                                                       u16 xid,
186                                                       struct scatterlist *sgl,
187                                                       unsigned int sgc);
188         int                     (*ndo_fcoe_ddp_done)(struct net_device *dev,
189                                                      u16 xid);
190 #define NETDEV_FCOE_WWNN 0
191 #define NETDEV_FCOE_WWPN 1
192         int                     (*ndo_fcoe_get_wwn)(struct net_device *dev,
193                                                     u64 *wwn, int type);
194 #endif
195 };
196
197 void netdev_attach_ops(struct net_device *dev,
198                        const struct net_device_ops *ops);
199
200 /**
201  *      skb_queue_is_first - check if skb is the first entry in the queue
202  *      @list: queue head
203  *      @skb: buffer
204  *
205  *      Returns true if @skb is the first buffer on the list.
206  */
207 static inline bool skb_queue_is_first(const struct sk_buff_head *list,
208                                       const struct sk_buff *skb)
209 {
210         return (skb->prev == (struct sk_buff *) list);
211 }
212
213 /**
214  *      skb_queue_prev - return the prev packet in the queue
215  *      @list: queue head
216  *      @skb: current buffer
217  *
218  *      Return the prev packet in @list before @skb.  It is only valid to
219  *      call this if skb_queue_is_first() evaluates to false.
220  */
221 static inline struct sk_buff *skb_queue_prev(const struct sk_buff_head *list,
222                                              const struct sk_buff *skb)
223 {
224         /* This BUG_ON may seem severe, but if we just return then we
225          * are going to dereference garbage.
226          */
227         BUG_ON(skb_queue_is_first(list, skb));
228         return skb->prev;
229 }
230
231
232 static inline struct net_device_stats *dev_get_stats(struct net_device *dev)
233 {
234         return dev->get_stats(dev);
235 }
236
237 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23))
238 #if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE)
239 extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor);
240 #endif /* CONFIG_USB */
241 #endif
242
243 #define DIV_ROUND_CLOSEST(x, divisor)(                  \
244 {                                                       \
245         typeof(divisor) __divisor = divisor;            \
246         (((x) + ((__divisor) / 2)) / (__divisor));      \
247 }                                                       \
248 )
249
250 extern int eth_mac_addr(struct net_device *dev, void *p);
251 extern int eth_change_mtu(struct net_device *dev, int new_mtu);
252 extern int eth_validate_addr(struct net_device *dev);
253
254 #ifdef CONFIG_NET_NS
255
256 static inline void write_pnet(struct net **pnet, struct net *net)
257 {
258         *pnet = net;
259 }
260
261 static inline struct net *read_pnet(struct net * const *pnet)
262 {
263         return *pnet;
264 }
265
266 #else
267
268 #define write_pnet(pnet, net)   do { (void)(net);} while (0)
269 #define read_pnet(pnet)         (&init_net)
270
271 /*
272  * swap - swap value of @a and @b
273  */
274 #define swap(a, b) \
275         do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
276
277 #endif
278
279 extern int              init_dummy_netdev(struct net_device *dev);
280
281 #define compat_pci_suspend(fn)                                          \
282         int fn##_compat(struct pci_dev *pdev, pm_message_t state)       \
283         {                                                               \
284                 int r;                                                  \
285                                                                         \
286                 r = fn(&pdev->dev);                                     \
287                 if (r)                                                  \
288                         return r;                                       \
289                                                                         \
290                 pci_save_state(pdev);                                   \
291                 pci_disable_device(pdev);                               \
292                 pci_set_power_state(pdev, PCI_D3hot);                   \
293                                                                         \
294                 return 0;                                               \
295         }
296
297 #define compat_pci_resume(fn)                                           \
298         int fn##_compat(struct pci_dev *pdev)                           \
299         {                                                               \
300                 int r;                                                  \
301                                                                         \
302                 pci_set_power_state(pdev, PCI_D0);                      \
303                 r = pci_enable_device(pdev);                            \
304                 if (r)                                                  \
305                         return r;                                       \
306                 pci_restore_state(pdev);                                \
307                                                                         \
308                 return fn(&pdev->dev);                                  \
309         }
310
311 #else
312
313 static inline void netdev_attach_ops(struct net_device *dev,
314                        const struct net_device_ops *ops)
315 {
316         dev->netdev_ops = ops;
317 }
318
319 #define compat_pci_suspend(fn)
320 #define compat_pci_resume(fn)
321
322 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) */
323
324 #endif /*  LINUX_26_29_COMPAT_H */