From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Thu, 14 May 2009 19:00:11 +0000 (+0000)
Subject: Make madwifi compile with kernel 2.6.30.
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=f9532a06b17d38f86e116b2ef57629ebe4b5d12d;p=openwrt%2Fstaging%2Flinusw.git

Make madwifi compile with kernel 2.6.30.

SVN-Revision: 15850
---

diff --git a/package/madwifi/patches/431-compile_fixes.patch b/package/madwifi/patches/431-compile_fixes.patch
index 03ca2e64bd..16485cb8e5 100644
--- a/package/madwifi/patches/431-compile_fixes.patch
+++ b/package/madwifi/patches/431-compile_fixes.patch
@@ -6,7 +6,7 @@
  			sc->sc_isr &= ~HAL_INT_RX;
 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
-+			if (netif_rx_schedule_prep(&sc->sc_napi))
++			if (napi_schedule_prep(&sc->sc_napi))
 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
  			if (netif_rx_schedule_prep(dev, &sc->sc_napi))
  #else
@@ -17,7 +17,7 @@
  				ath_hal_intrset(ah, sc->sc_imask);
 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
-+				__netif_rx_schedule(&sc->sc_napi);
++				__napi_schedule(&sc->sc_napi);
 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
  				__netif_rx_schedule(dev, &sc->sc_napi);
  #else
@@ -28,7 +28,7 @@
  
 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
-+	netif_rx_complete(napi);
++	napi_complete(napi);
 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
  	netif_rx_complete(dev, napi);
  #else
diff --git a/package/madwifi/patches/432-backport_oops.patch b/package/madwifi/patches/432-backport_oops.patch
new file mode 100644
index 0000000000..5bcfa08093
--- /dev/null
+++ b/package/madwifi/patches/432-backport_oops.patch
@@ -0,0 +1,127 @@
+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);
+@@ -12726,8 +12744,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,17 @@ 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,
++};
++#endif
++
+ int
+ ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev,
+ 	const char *name, int opmode, int flags, struct ieee80211vap *master)
+@@ -470,12 +481,16 @@ 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;
++#else
++	dev->netdev_ops = &ieee80211_netdev_ops;
++#endif
+ #if 0
+ 	dev->set_mac_address = ieee80211_set_mac_address;
+ #endif
+@@ -1823,7 +1838,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:
diff --git a/package/madwifi/patches/433-backport_remove_irq_none.patch b/package/madwifi/patches/433-backport_remove_irq_none.patch
new file mode 100644
index 0000000000..5166d9e103
--- /dev/null
+++ b/package/madwifi/patches/433-backport_remove_irq_none.patch
@@ -0,0 +1,21 @@
+Fix Linux 2.6.30 compatibility
+
+Linux 2.6.30 doesn't define IRQ_NONE as a macro. Assume irqreturn_t,
+IRQ_NONE and IRQ_HANDLED to be present on Linux 2.6.29 and newer.
+http://madwifi-project.org/changeset/3986
+--- a/ath/if_athvar.h
++++ b/ath/if_athvar.h
+@@ -83,11 +83,13 @@ typedef void *TQUEUE_ARG;
+ /*
+  * Guess how the interrupt handler should work.
+  */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
+ #if !defined(IRQ_NONE)
+ typedef void irqreturn_t;
+ #define	IRQ_NONE
+ #define	IRQ_HANDLED
+ #endif /* !defined(IRQ_NONE) */
++#endif /* Linux < 2.6.29 */
+ 
+ #ifndef SET_MODULE_OWNER
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)