compat: Fix autoconf probe for pcie_mpss
[~emulex/for-vlad/old/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 #include <linux/usb.h>
13 #include <linux/etherdevice.h>
14
15 /*
16  * If you don't see your net_device_ops implemented on
17  * netdev_attach_ops() then you are shit out of luck and
18  * you must do the nasty ifdef magic, unless you figure
19  * out a way to squeze your hacks into this routine :)
20  */
21 void netdev_attach_ops(struct net_device *dev,
22                        const struct net_device_ops *ops)
23 {
24         dev->open = ops->ndo_open;
25         dev->init = ops->ndo_init;
26         dev->stop = ops->ndo_stop;
27         dev->hard_start_xmit = ops->ndo_start_xmit;
28         dev->change_rx_flags = ops->ndo_change_rx_flags;
29         dev->set_multicast_list = ops->ndo_set_multicast_list;
30         dev->validate_addr = ops->ndo_validate_addr;
31         dev->do_ioctl = ops->ndo_do_ioctl;
32         dev->set_config = ops->ndo_set_config;
33         dev->change_mtu = ops->ndo_change_mtu;
34         dev->set_mac_address = ops->ndo_set_mac_address;
35         dev->tx_timeout = ops->ndo_tx_timeout;
36         if (ops->ndo_get_stats)
37                 dev->get_stats = ops->ndo_get_stats;
38         dev->vlan_rx_register = ops->ndo_vlan_rx_register;
39         dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid;
40         dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid;
41 #ifdef CONFIG_NET_POLL_CONTROLLER
42         dev->poll_controller = ops->ndo_poll_controller;
43 #endif
44
45 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
46         dev->select_queue = ops->ndo_select_queue;
47 #endif
48 }
49 EXPORT_SYMBOL_GPL(netdev_attach_ops);
50
51 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23))
52 #if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE)
53 /**
54  * usb_unpoison_anchored_urbs - let an anchor be used successfully again
55  * @anchor: anchor the requests are bound to
56  *
57  * Reverses the effect of usb_poison_anchored_urbs
58  * the anchor can be used normally after it returns
59  */
60 void usb_unpoison_anchored_urbs(struct usb_anchor *anchor)
61 {
62         unsigned long flags;
63         struct urb *lazarus;
64
65         spin_lock_irqsave(&anchor->lock, flags);
66         list_for_each_entry(lazarus, &anchor->urb_list, anchor_list) {
67                 usb_unpoison_urb(lazarus);
68         }
69         //anchor->poisoned = 0; /* XXX: cannot backport */
70         spin_unlock_irqrestore(&anchor->lock, flags);
71 }
72 EXPORT_SYMBOL_GPL(usb_unpoison_anchored_urbs);
73 #endif /* CONFIG_USB */
74 #endif
75
76 /**
77  * eth_mac_addr - set new Ethernet hardware address
78  * @dev: network device
79  * @p: socket address
80  * Change hardware address of device.
81  *
82  * This doesn't change hardware matching, so needs to be overridden
83  * for most real devices.
84  */
85 int eth_mac_addr(struct net_device *dev, void *p)
86 {
87         struct sockaddr *addr = p;
88
89         if (netif_running(dev))
90                 return -EBUSY;
91         if (!is_valid_ether_addr(addr->sa_data))
92                 return -EADDRNOTAVAIL;
93         memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
94         return 0;
95 }
96 EXPORT_SYMBOL_GPL(eth_mac_addr);
97
98 /**
99  * eth_change_mtu - set new MTU size
100  * @dev: network device
101  * @new_mtu: new Maximum Transfer Unit
102  *
103  * Allow changing MTU size. Needs to be overridden for devices
104  * supporting jumbo frames.
105  */
106 int eth_change_mtu(struct net_device *dev, int new_mtu)
107 {
108         if (new_mtu < 68 || new_mtu > ETH_DATA_LEN)
109                 return -EINVAL;
110         dev->mtu = new_mtu;
111         return 0;
112 }
113 EXPORT_SYMBOL_GPL(eth_change_mtu);
114
115 int eth_validate_addr(struct net_device *dev)
116 {
117         if (!is_valid_ether_addr(dev->dev_addr))
118                 return -EADDRNOTAVAIL;
119
120         return 0;
121 }
122 EXPORT_SYMBOL_GPL(eth_validate_addr);
123 /* Source: net/ethernet/eth.c */
124
125 #define NETREG_DUMMY 5
126 /**
127  *      init_dummy_netdev       - init a dummy network device for NAPI
128  *      @dev: device to init
129  *
130  *      This takes a network device structure and initialize the minimum
131  *      amount of fields so it can be used to schedule NAPI polls without
132  *      registering a full blown interface. This is to be used by drivers
133  *      that need to tie several hardware interfaces to a single NAPI
134  *      poll scheduler due to HW limitations.
135  */
136 int init_dummy_netdev(struct net_device *dev)
137 {
138         /* Clear everything. Note we don't initialize spinlocks
139          * are they aren't supposed to be taken by any of the
140          * NAPI code and this dummy netdev is supposed to be
141          * only ever used for NAPI polls
142          */
143         memset(dev, 0, sizeof(struct net_device));
144
145         /* make sure we BUG if trying to hit standard
146          * register/unregister code path
147          */
148         dev->reg_state = NETREG_DUMMY;
149
150         /* initialize the ref count */
151         atomic_set(&dev->refcnt, 1);
152
153 #ifdef CONFIG_NETPOLL
154         /* NAPI wants this */
155         INIT_LIST_HEAD(&dev->napi_list);
156 #endif
157
158         /* a dummy interface is started by default */
159         set_bit(__LINK_STATE_PRESENT, &dev->state);
160         set_bit(__LINK_STATE_START, &dev->state);
161
162         return 0;
163 }
164 EXPORT_SYMBOL_GPL(init_dummy_netdev);
165 /* Source: net/core/dev.c */
166