summaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/306-ath9k-Unify-reset-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/306-ath9k-Unify-reset-API.patch')
-rw-r--r--package/kernel/mac80211/patches/306-ath9k-Unify-reset-API.patch108
1 files changed, 108 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/306-ath9k-Unify-reset-API.patch b/package/kernel/mac80211/patches/306-ath9k-Unify-reset-API.patch
new file mode 100644
index 0000000000..6460a32802
--- /dev/null
+++ b/package/kernel/mac80211/patches/306-ath9k-Unify-reset-API.patch
@@ -0,0 +1,108 @@
+From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+Date: Fri, 17 Oct 2014 07:40:11 +0530
+Subject: [PATCH] ath9k: Unify reset API
+
+Instead of having ath_reset_internal() and ath_reset()
+as two separate calls to perform a HW reset, have
+one function. This makes sure that the behavior will
+be the same at all callsites.
+
+Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+---
+
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -540,7 +540,6 @@ static inline void ath_chanctx_check_act
+
+ #endif /* CPTCFG_ATH9K_CHANNEL_CONTEXT */
+
+-int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan);
+ void ath_startrecv(struct ath_softc *sc);
+ bool ath_stoprecv(struct ath_softc *sc);
+ u32 ath_calcrxfilter(struct ath_softc *sc);
+@@ -1069,7 +1068,7 @@ void ath9k_tasklet(unsigned long data);
+ int ath_cabq_update(struct ath_softc *);
+ u8 ath9k_parse_mpdudensity(u8 mpdudensity);
+ irqreturn_t ath_isr(int irq, void *dev);
+-int ath_reset(struct ath_softc *sc);
++int ath_reset(struct ath_softc *sc, struct ath9k_channel *hchan);
+ void ath_cancel_work(struct ath_softc *sc);
+ void ath_restart_work(struct ath_softc *sc);
+ int ath9k_init_device(u16 devid, struct ath_softc *sc,
+--- a/drivers/net/wireless/ath/ath9k/channel.c
++++ b/drivers/net/wireless/ath/ath9k/channel.c
+@@ -66,7 +66,7 @@ static int ath_set_channel(struct ath_so
+ }
+
+ hchan = &sc->sc_ah->channels[pos];
+- r = ath_reset_internal(sc, hchan);
++ r = ath_reset(sc, hchan);
+ if (r)
+ return r;
+
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -270,7 +270,7 @@ static bool ath_complete_reset(struct at
+ return true;
+ }
+
+-int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan)
++static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan)
+ {
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
+@@ -598,12 +598,12 @@ chip_reset:
+ #undef SCHED_INTR
+ }
+
+-int ath_reset(struct ath_softc *sc)
++int ath_reset(struct ath_softc *sc, struct ath9k_channel *hchan)
+ {
+ int r;
+
+ ath9k_ps_wakeup(sc);
+- r = ath_reset_internal(sc, NULL);
++ r = ath_reset_internal(sc, hchan);
+ ath9k_ps_restore(sc);
+
+ return r;
+@@ -623,7 +623,9 @@ void ath_reset_work(struct work_struct *
+ {
+ struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work);
+
+- ath_reset(sc);
++ ath9k_ps_wakeup(sc);
++ ath_reset_internal(sc, NULL);
++ ath9k_ps_restore(sc);
+ }
+
+ /**********************/
+@@ -2044,7 +2046,7 @@ void __ath9k_flush(struct ieee80211_hw *
+ spin_unlock_bh(&sc->sc_pcu_lock);
+
+ if (!drain_txq)
+- ath_reset(sc);
++ ath_reset(sc, NULL);
+
+ ath9k_ps_restore(sc);
+ }
+--- a/drivers/net/wireless/ath/ath9k/tx99.c
++++ b/drivers/net/wireless/ath/ath9k/tx99.c
+@@ -99,7 +99,7 @@ static struct sk_buff *ath9k_build_tx99_
+
+ static void ath9k_tx99_deinit(struct ath_softc *sc)
+ {
+- ath_reset(sc);
++ ath_reset(sc, NULL);
+
+ ath9k_ps_wakeup(sc);
+ ath9k_tx99_stop(sc);
+@@ -127,7 +127,7 @@ static int ath9k_tx99_init(struct ath_so
+ memset(&txctl, 0, sizeof(txctl));
+ txctl.txq = sc->tx.txq_map[IEEE80211_AC_VO];
+
+- ath_reset(sc);
++ ath_reset(sc, NULL);
+
+ ath9k_ps_wakeup(sc);
+