aboutsummaryrefslogtreecommitdiffstats
path: root/package/madwifi/patches/329-new_napi.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2008-02-20 21:26:21 +0000
committerFelix Fietkau <nbd@openwrt.org>2008-02-20 21:26:21 +0000
commit4f8a59539d9e93f645e615e80506abb957dc5e34 (patch)
treedb27c0836796feb7dd01dac04300377bd1018d5d /package/madwifi/patches/329-new_napi.patch
parent32d7e0916a8deecb1ea9ea0c9d156bdfd083475a (diff)
downloadupstream-4f8a59539d9e93f645e615e80506abb957dc5e34.tar.gz
upstream-4f8a59539d9e93f645e615e80506abb957dc5e34.tar.bz2
upstream-4f8a59539d9e93f645e615e80506abb957dc5e34.zip
refresh madwifi patches, fix an issue with napi polling (thx SeG)
SVN-Revision: 10511
Diffstat (limited to 'package/madwifi/patches/329-new_napi.patch')
-rw-r--r--package/madwifi/patches/329-new_napi.patch245
1 files changed, 0 insertions, 245 deletions
diff --git a/package/madwifi/patches/329-new_napi.patch b/package/madwifi/patches/329-new_napi.patch
deleted file mode 100644
index 554c1c1e8e..0000000000
--- a/package/madwifi/patches/329-new_napi.patch
+++ /dev/null
@@ -1,245 +0,0 @@
-Index: madwifi-trunk-r3314/ath/if_ath.c
-===================================================================
---- madwifi-trunk-r3314.orig/ath/if_ath.c 2008-02-11 19:10:30.010051203 +0100
-+++ madwifi-trunk-r3314/ath/if_ath.c 2008-02-11 19:18:00.615729758 +0100
-@@ -184,7 +184,11 @@
- struct sk_buff *, int, int, u_int64_t);
- static void ath_setdefantenna(struct ath_softc *, u_int);
- static struct ath_txq *ath_txq_setup(struct ath_softc *, int, int);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+static int ath_rx_poll(struct napi_struct *napi, int budget);
-+#else
- static int ath_rx_poll(struct net_device *dev, int *budget);
-+#endif
- static int ath_hardstart(struct sk_buff *, struct net_device *);
- static int ath_mgtstart(struct ieee80211com *, struct sk_buff *);
- #ifdef ATH_SUPERG_COMP
-@@ -374,6 +378,9 @@
- u_int32_t new_clamped_maxtxpower);
- static u_int32_t ath_get_real_maxtxpower(struct ath_softc *sc);
-
-+static void ath_poll_disable(struct net_device *dev);
-+static void ath_poll_enable(struct net_device *dev);
-+
- /* calibrate every 30 secs in steady state but check every second at first. */
- static int ath_calinterval = ATH_SHORT_CALINTERVAL;
- static int ath_countrycode = CTRY_DEFAULT; /* country code */
-@@ -818,8 +825,12 @@
- dev->set_mac_address = ath_set_mac_address;
- dev->change_mtu = ath_change_mtu;
- 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);
-+#else
- dev->poll = ath_rx_poll;
- dev->weight = 64;
-+#endif
- #ifdef USE_HEADERLEN_RESV
- dev->hard_header_len += sizeof(struct ieee80211_qosframe) +
- sizeof(struct llc) +
-@@ -2268,12 +2279,21 @@
- if (status & (HAL_INT_RX | HAL_INT_RXPHY)) {
- ath_uapsd_processtriggers(sc, hw_tsf);
- sc->sc_isr &= ~HAL_INT_RX;
-- if (netif_rx_schedule_prep(dev)) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ if (netif_rx_schedule_prep(dev, &sc->sc_napi))
-+#else
-+ if (netif_rx_schedule_prep(dev))
-+#endif
-+ {
- #ifndef ATH_PRECISE_TSF
- sc->sc_imask &= ~HAL_INT_RX;
- ath_hal_intrset(ah, sc->sc_imask);
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ __netif_rx_schedule(dev, &sc->sc_napi);
-+#else
- __netif_rx_schedule(dev);
-+#endif
- }
- }
- if (status & HAL_INT_TX) {
-@@ -2517,6 +2537,7 @@
- if (sc->sc_tx99 != NULL)
- sc->sc_tx99->start(sc->sc_tx99);
- #endif
-+ ath_poll_enable(dev);
-
- done:
- ATH_UNLOCK(sc);
-@@ -2557,6 +2578,9 @@
- if (sc->sc_tx99 != NULL)
- sc->sc_tx99->stop(sc->sc_tx99);
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ ath_poll_disable(dev);
-+#endif
- netif_stop_queue(dev); /* XXX re-enabled by ath_newstate */
- dev->flags &= ~IFF_RUNNING; /* NB: avoid recursion */
- ieee80211_stop_running(ic); /* stop all VAPs */
-@@ -4015,6 +4039,39 @@
- return ath_keyset(sc, k, mac, vap->iv_bss);
- }
-
-+static void ath_poll_disable(struct net_device *dev)
-+{
-+ struct ath_softc *sc = dev->priv;
-+
-+ /*
-+ * XXX Using in_softirq is not right since we might
-+ * be called from other soft irq contexts than
-+ * ath_rx_poll
-+ */
-+ if (!in_softirq()) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ napi_disable(&sc->sc_napi);
-+#else
-+ netif_poll_disable(dev);
-+#endif
-+ }
-+}
-+
-+static void ath_poll_enable(struct net_device *dev)
-+{
-+ struct ath_softc *sc = dev->priv;
-+
-+ /* NB: see above */
-+ if (!in_softirq()) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ napi_enable(&sc->sc_napi);
-+#else
-+ netif_poll_enable(dev);
-+#endif
-+ }
-+}
-+
-+
- /*
- * Block/unblock tx+rx processing while a key change is done.
- * We assume the caller serializes key management operations
-@@ -4032,13 +4089,8 @@
- * When called from the rx tasklet we cannot use
- * tasklet_disable because it will block waiting
- * for us to complete execution.
-- *
-- * XXX Using in_softirq is not right since we might
-- * be called from other soft irq contexts than
-- * ath_rx_poll
- */
-- if (!in_softirq())
-- netif_poll_disable(dev);
-+ ath_poll_disable(dev);
- netif_stop_queue(dev);
- }
-
-@@ -4050,8 +4102,7 @@
-
- DPRINTF(sc, ATH_DEBUG_KEYCACHE, "End\n");
- netif_wake_queue(dev);
-- if (!in_softirq()) /* NB: see above */
-- netif_poll_enable(dev);
-+ ath_poll_enable(dev);
- }
-
- /*
-@@ -6359,24 +6410,34 @@
- }
-
- static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ath_rx_poll(struct napi_struct *napi, int budget)
-+#else
- ath_rx_poll(struct net_device *dev, int *budget)
-+#endif
- {
- #define PA2DESC(_sc, _pa) \
- ((struct ath_desc *)((caddr_t)(_sc)->sc_rxdma.dd_desc + \
- ((_pa) - (_sc)->sc_rxdma.dd_desc_paddr)))
-- struct ath_buf *bf;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ struct ath_softc *sc = container_of(napi, struct ath_softc, sc_napi);
-+ struct net_device *dev = sc->sc_dev;
-+ u_int rx_limit = budget;
-+#else
- struct ath_softc *sc = dev->priv;
-+ u_int rx_limit = dev->quota;
-+#endif
- struct ieee80211com *ic = &sc->sc_ic;
- struct ath_hal *ah = sc ? sc->sc_ah : NULL;
- struct ath_desc *ds;
- struct ath_rx_status *rs;
- struct sk_buff *skb = NULL;
- struct ieee80211_node *ni;
-+ struct ath_buf *bf;
- unsigned int len;
- int type;
- u_int phyerr;
- u_int processed = 0, early_stop = 0;
-- u_int rx_limit = dev->quota;
- u_int mic_fail = 0;
-
- DPRINTF(sc, ATH_DEBUG_RX_PROC, "invoked\n");
-@@ -6405,7 +6466,9 @@
- break;
- }
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
- processed++;
-+#endif
- if (rx_limit-- < 0) {
- early_stop = 1;
- break;
-@@ -6675,8 +6738,6 @@
- goto process_rx_again;
- }
- #endif
-- netif_rx_complete(dev);
--
- #ifndef ATH_PRECISE_TSF
- sc->sc_imask |= HAL_INT_RX;
- ath_hal_intrset(ah, sc->sc_imask);
-@@ -6684,11 +6745,17 @@
- #endif
- }
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ netif_rx_complete(dev, napi);
-+#else
-+ netif_rx_complete(dev);
- *budget -= processed;
-+#endif
-
- /* rx signal state monitoring, only necessary/applicable for sta mode */
- if (sc->sc_opmode == HAL_M_STA)
- ath_hal_rxmonitor(ah, &sc->sc_halstats, &sc->sc_curchan);
-+
- return early_stop;
- #undef PA2DESC
- }
-@@ -10378,9 +10445,9 @@
- dev->mtu = mtu;
- if ((dev->flags & IFF_RUNNING) && !sc->sc_invalid) {
- /* NB: the rx buffers may need to be reallocated */
-- netif_poll_disable(dev);
-+ ath_poll_disable(dev);
- error = ath_reset(dev);
-- netif_poll_enable(dev);
-+ ath_poll_enable(dev);
- }
- ATH_UNLOCK(sc);
-
-Index: madwifi-trunk-r3314/ath/if_athvar.h
-===================================================================
---- madwifi-trunk-r3314.orig/ath/if_athvar.h 2008-02-11 19:10:29.758036841 +0100
-+++ madwifi-trunk-r3314/ath/if_athvar.h 2008-02-11 19:17:35.042272406 +0100
-@@ -620,6 +620,9 @@
- struct ath_softc {
- struct ieee80211com sc_ic; /* NB: must be first */
- struct net_device *sc_dev;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+ struct napi_struct sc_napi;
-+#endif
- void __iomem *sc_iobase; /* address of the device */
- struct semaphore sc_lock; /* dev-level lock */
- struct net_device_stats sc_devstats; /* device statistics */