Remove the stupid SET_NETDEVOP
[~tnikolova/compat/.git] / compat / compat-2.6.29.c
1 /*
2  * Copyright 2007-2010  Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * Compatibility file for Linux wireless for kernels 2.6.29.
9  */
10
11 #include <linux/compat.h>
12
13 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29))
14
15 #include <linux/usb.h>
16 #include <linux/etherdevice.h>
17
18 /*
19  * If you don't see your net_device_ops implemented on
20  * netdev_attach_ops() then you are shit out of luck and
21  * you must do the nasty ifdef magic, unless you figure
22  * out a way to squeze your hacks into this routine :)
23  */
24 void netdev_attach_ops(struct net_device *dev,
25                        const struct net_device_ops *ops)
26 {
27         dev->open = ops->ndo_open;
28         dev->stop = ops->ndo_stop;
29         dev->hard_start_xmit = ops->ndo_start_xmit;
30         dev->change_rx_flags = ops->ndo_change_rx_flags;
31         dev->set_multicast_list = ops->ndo_set_multicast_list;
32         dev->validate_addr = ops->ndo_validate_addr;
33         dev->do_ioctl = ops->ndo_do_ioctl;
34         dev->set_config = ops->ndo_set_config;
35         dev->change_mtu = ops->ndo_change_mtu;
36         dev->set_mac_address = ops->ndo_set_mac_address;
37         dev->tx_timeout = ops->ndo_tx_timeout;
38         dev->get_stats = ops->ndo_get_stats;
39         dev->vlan_rx_register = ops->ndo_vlan_rx_register;
40         dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid;
41         dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid;
42 #ifdef CONFIG_NET_POLL_CONTROLLER
43         dev->poll_controller = ops->ndo_poll_controller;
44 #endif
45
46 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
47         dev->select_queue = ops->ndo_select_queue;
48 #endif
49 }
50 EXPORT_SYMBOL(netdev_attach_ops);
51
52 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23))
53 #if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE)
54 /**
55  * usb_unpoison_anchored_urbs - let an anchor be used successfully again
56  * @anchor: anchor the requests are bound to
57  *
58  * Reverses the effect of usb_poison_anchored_urbs
59  * the anchor can be used normally after it returns
60  */
61 void usb_unpoison_anchored_urbs(struct usb_anchor *anchor)
62 {
63         unsigned long flags;
64         struct urb *lazarus;
65
66         spin_lock_irqsave(&anchor->lock, flags);
67         list_for_each_entry(lazarus, &anchor->urb_list, anchor_list) {
68                 usb_unpoison_urb(lazarus);
69         }
70         //anchor->poisoned = 0; /* XXX: cannot backport */
71         spin_unlock_irqrestore(&anchor->lock, flags);
72 }
73 EXPORT_SYMBOL_GPL(usb_unpoison_anchored_urbs);
74 #endif /* CONFIG_USB */
75 #endif
76
77 /**
78  * eth_mac_addr - set new Ethernet hardware address
79  * @dev: network device
80  * @p: socket address
81  * Change hardware address of device.
82  *
83  * This doesn't change hardware matching, so needs to be overridden
84  * for most real devices.
85  */
86 int eth_mac_addr(struct net_device *dev, void *p)
87 {
88         struct sockaddr *addr = p;
89
90         if (netif_running(dev))
91                 return -EBUSY;
92         if (!is_valid_ether_addr(addr->sa_data))
93                 return -EADDRNOTAVAIL;
94         memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
95         return 0;
96 }
97 EXPORT_SYMBOL(eth_mac_addr);
98
99 /**
100  * eth_change_mtu - set new MTU size
101  * @dev: network device
102  * @new_mtu: new Maximum Transfer Unit
103  *
104  * Allow changing MTU size. Needs to be overridden for devices
105  * supporting jumbo frames.
106  */
107 int eth_change_mtu(struct net_device *dev, int new_mtu)
108 {
109         if (new_mtu < 68 || new_mtu > ETH_DATA_LEN)
110                 return -EINVAL;
111         dev->mtu = new_mtu;
112         return 0;
113 }
114 EXPORT_SYMBOL(eth_change_mtu);
115
116 int eth_validate_addr(struct net_device *dev)
117 {
118         if (!is_valid_ether_addr(dev->dev_addr))
119                 return -EADDRNOTAVAIL;
120
121         return 0;
122 }
123 EXPORT_SYMBOL(eth_validate_addr);
124 /* Source: net/ethernet/eth.c */
125
126
127 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) */
128