181 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Convert to net_device_ops for Linux 2.6.29+
 | 
						|
http://madwifi-project.org/changeset/4005
 | 
						|
--- a/ath/if_ath.c
 | 
						|
+++ b/ath/if_ath.c
 | 
						|
@@ -566,6 +566,20 @@ static inline int rate_factor(int mode)
 | 
						|
 
 | 
						|
 /* Initialize ath_softc structure */
 | 
						|
 
 | 
						|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
 | 
						|
+static const struct net_device_ops ath_netdev_ops = {
 | 
						|
+	.ndo_open		= ath_init,
 | 
						|
+	.ndo_stop		= ath_stop,
 | 
						|
+	.ndo_start_xmit		= ath_hardstart,
 | 
						|
+	.ndo_tx_timeout 	= ath_tx_timeout,
 | 
						|
+	.ndo_set_multicast_list = ath_mode_init,
 | 
						|
+	.ndo_do_ioctl		= ath_ioctl,
 | 
						|
+	.ndo_get_stats		= ath_getstats,
 | 
						|
+	.ndo_set_mac_address	= ath_set_mac_address,
 | 
						|
+	.ndo_change_mtu 	= ath_change_mtu,
 | 
						|
+};
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 int
 | 
						|
 ath_attach(u_int16_t devid, struct net_device *dev, HAL_BUS_TAG tag)
 | 
						|
 {
 | 
						|
@@ -865,16 +879,20 @@ ath_attach(u_int16_t devid, struct net_d
 | 
						|
 	}
 | 
						|
 
 | 
						|
 	/* NB: ether_setup is done by bus-specific code */
 | 
						|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
 | 
						|
 	dev->open = ath_init;
 | 
						|
 	dev->stop = ath_stop;
 | 
						|
 	dev->hard_start_xmit = ath_hardstart;
 | 
						|
 	dev->tx_timeout = ath_tx_timeout;
 | 
						|
-	dev->watchdog_timeo = 5 * HZ;
 | 
						|
 	dev->set_multicast_list = ath_mode_init;
 | 
						|
 	dev->do_ioctl = ath_ioctl;
 | 
						|
 	dev->get_stats = ath_getstats;
 | 
						|
 	dev->set_mac_address = ath_set_mac_address;
 | 
						|
 	dev->change_mtu = ath_change_mtu;
 | 
						|
+#else
 | 
						|
+	dev->netdev_ops = &ath_netdev_ops;
 | 
						|
+#endif
 | 
						|
+	dev->watchdog_timeo = 5 * HZ;
 | 
						|
 	dev->tx_queue_len = ATH_TXBUF - ATH_TXBUF_MGT_RESERVED;
 | 
						|
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
 | 
						|
 	netif_napi_add(dev, &sc->sc_napi, ath_rx_poll, 64);
 | 
						|
@@ -1257,7 +1275,6 @@ ath_detach(struct net_device *dev)
 | 
						|
 	ath_dynamic_sysctl_unregister(sc);
 | 
						|
 	ATH_LOCK_DESTROY(sc);
 | 
						|
 	ATH_HAL_LOCK_DESTROY(sc);
 | 
						|
-	dev->stop = NULL; /* prevent calling ath_stop again */
 | 
						|
 	unregister_netdev(dev);
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
@@ -12729,8 +12746,13 @@ ath_rcv_dev_event(struct notifier_block 
 | 
						|
 	struct net_device *dev = (struct net_device *)ptr;
 | 
						|
 	struct ath_softc *sc = (struct ath_softc *)netdev_priv(dev);
 | 
						|
 
 | 
						|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
 | 
						|
 	if (!dev || !sc || dev->open != &ath_init)
 | 
						|
 		return 0;
 | 
						|
+#else
 | 
						|
+	if (!dev || !sc || dev->netdev_ops->ndo_open != &ath_init)
 | 
						|
+		return 0;
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 	switch (event) {
 | 
						|
 	case NETDEV_CHANGENAME:
 | 
						|
--- a/net80211/ieee80211.c
 | 
						|
+++ b/net80211/ieee80211.c
 | 
						|
@@ -450,6 +450,18 @@ ieee80211_ifdetach(struct ieee80211com *
 | 
						|
 }
 | 
						|
 EXPORT_SYMBOL(ieee80211_ifdetach);
 | 
						|
 
 | 
						|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
 | 
						|
+static const struct net_device_ops ieee80211_netdev_ops = {
 | 
						|
+	.ndo_get_stats		= ieee80211_getstats,
 | 
						|
+	.ndo_open		= ieee80211_open,
 | 
						|
+	.ndo_stop		= ieee80211_stop,
 | 
						|
+	.ndo_start_xmit		= ieee80211_hardstart,
 | 
						|
+	.ndo_set_multicast_list = ieee80211_set_multicast_list,
 | 
						|
+	.ndo_change_mtu 	= ieee80211_change_mtu,
 | 
						|
+	.ndo_do_ioctl		= ieee80211_ioctl,
 | 
						|
+};
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 int
 | 
						|
 ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev,
 | 
						|
 	const char *name, int opmode, int flags, struct ieee80211vap *master)
 | 
						|
@@ -470,12 +482,17 @@ ieee80211_vap_setup(struct ieee80211com 
 | 
						|
 		} else
 | 
						|
 			strncpy(dev->name, name, sizeof(dev->name));
 | 
						|
 	}
 | 
						|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
 | 
						|
 
 | 
						|
 	dev->get_stats = ieee80211_getstats;
 | 
						|
 	dev->open = ieee80211_open;
 | 
						|
 	dev->stop = ieee80211_stop;
 | 
						|
 	dev->hard_start_xmit = ieee80211_hardstart;
 | 
						|
 	dev->set_multicast_list = ieee80211_set_multicast_list;
 | 
						|
+	dev->do_ioctl = ieee80211_ioctl;
 | 
						|
+#else
 | 
						|
+	dev->netdev_ops = &ieee80211_netdev_ops;
 | 
						|
+#endif
 | 
						|
 #if 0
 | 
						|
 	dev->set_mac_address = ieee80211_set_mac_address;
 | 
						|
 #endif
 | 
						|
@@ -1823,7 +1840,11 @@ ieee80211_set_multicast_list(struct net_
 | 
						|
 	IEEE80211_UNLOCK_IRQ(ic);
 | 
						|
 
 | 
						|
 	/* XXX: Merge multicast list into parent device */
 | 
						|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
 | 
						|
 	parent->set_multicast_list(ic->ic_dev);
 | 
						|
+#else
 | 
						|
+	parent->netdev_ops->ndo_set_multicast_list(ic->ic_dev);
 | 
						|
+#endif
 | 
						|
 }
 | 
						|
 
 | 
						|
 void
 | 
						|
--- a/net80211/ieee80211_linux.c
 | 
						|
+++ b/net80211/ieee80211_linux.c
 | 
						|
@@ -984,8 +984,14 @@ ieee80211_rcv_dev_event(struct notifier_
 | 
						|
 	void *ptr)
 | 
						|
 {
 | 
						|
 	struct net_device *dev = (struct net_device *) ptr;
 | 
						|
+
 | 
						|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
 | 
						|
 	if (!dev || dev->open != &ieee80211_open)
 | 
						|
 		return 0;
 | 
						|
+#else
 | 
						|
+	if (!dev || dev->netdev_ops->ndo_open != &ieee80211_open)
 | 
						|
+		return 0;
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 	switch (event) {
 | 
						|
 	case NETDEV_CHANGENAME:
 | 
						|
--- a/net80211/ieee80211_var.h
 | 
						|
+++ b/net80211/ieee80211_var.h
 | 
						|
@@ -740,6 +740,7 @@ void ieee80211_build_sc_ie(struct ieee80
 | 
						|
 void ieee80211_dfs_action(struct ieee80211com *);
 | 
						|
 void ieee80211_expire_channel_excl_restrictions(struct ieee80211com *);
 | 
						|
 void ieee80211_setpuregbasicrates(struct ieee80211_rateset *rs);
 | 
						|
+int ieee80211_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
 | 
						|
 
 | 
						|
 /*
 | 
						|
  * Iterate through ic_channels to enumerate all distinct ic_ieee channel numbers.
 | 
						|
--- a/net80211/ieee80211_wireless.c
 | 
						|
+++ b/net80211/ieee80211_wireless.c
 | 
						|
@@ -5945,7 +5945,7 @@ static struct iw_handler_def ieee80211_i
 | 
						|
 /*
 | 
						|
  * Handle private ioctl requests.
 | 
						|
  */
 | 
						|
-static int
 | 
						|
+int
 | 
						|
 ieee80211_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 | 
						|
 {
 | 
						|
 	struct ieee80211vap *vap = netdev_priv(dev);
 | 
						|
@@ -6035,7 +6035,6 @@ ieee80211_ioctl_vattach(struct ieee80211
 | 
						|
 {
 | 
						|
 	struct net_device *dev = vap->iv_dev;
 | 
						|
 
 | 
						|
-	dev->do_ioctl = ieee80211_ioctl;
 | 
						|
 #if IW_HANDLER_VERSION < 7
 | 
						|
 	dev->get_wireless_stats = ieee80211_iw_getstats;
 | 
						|
 #endif
 | 
						|
--- a/net80211/ieee80211_input.c
 | 
						|
+++ b/net80211/ieee80211_input.c
 | 
						|
@@ -1185,7 +1185,11 @@ ieee80211_deliver_data(struct ieee80211_
 | 
						|
 			skb1->protocol = __constant_htons(ETH_P_802_2);
 | 
						|
 			/* XXX insert vlan tag before queue it? */
 | 
						|
 			ni_tmp = SKB_CB(skb1)->ni; /* remember node so we can free it */
 | 
						|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
 | 
						|
 			ret = dev->hard_start_xmit(skb1, dev);
 | 
						|
+#else
 | 
						|
+			ret = dev->netdev_ops->ndo_start_xmit(skb1, dev);
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 			if (ret == NETDEV_TX_BUSY)
 | 
						|
 				ieee80211_dev_kfree_skb(&skb1);
 |