aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/319-ath9k-Use-a-helper-function-to-set-NoA.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/319-ath9k-Use-a-helper-function-to-set-NoA.patch')
-rw-r--r--package/kernel/mac80211/patches/319-ath9k-Use-a-helper-function-to-set-NoA.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/319-ath9k-Use-a-helper-function-to-set-NoA.patch b/package/kernel/mac80211/patches/319-ath9k-Use-a-helper-function-to-set-NoA.patch
new file mode 100644
index 0000000000..e975995565
--- /dev/null
+++ b/package/kernel/mac80211/patches/319-ath9k-Use-a-helper-function-to-set-NoA.patch
@@ -0,0 +1,84 @@
+From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+Date: Fri, 17 Oct 2014 07:40:24 +0530
+Subject: [PATCH] ath9k: Use a helper function to set NoA
+
+Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+---
+
+--- a/drivers/net/wireless/ath/ath9k/channel.c
++++ b/drivers/net/wireless/ath/ath9k/channel.c
+@@ -392,6 +392,39 @@ static void ath_chanctx_offchannel_noa(s
+ avp->noa_duration = 0;
+ }
+
++static void ath_chanctx_set_periodic_noa(struct ath_softc *sc,
++ struct ath_vif *avp,
++ struct ath_beacon_config *cur_conf,
++ u32 tsf_time,
++ u32 beacon_int)
++{
++ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++
++ avp->noa_index++;
++ avp->noa_start = tsf_time;
++
++ if (sc->sched.extend_absence)
++ avp->noa_duration = (3 * beacon_int / 2) +
++ sc->sched.channel_switch_time;
++ else
++ avp->noa_duration =
++ TU_TO_USEC(cur_conf->beacon_interval) / 2 +
++ sc->sched.channel_switch_time;
++
++ if (test_bit(ATH_OP_SCANNING, &common->op_flags) ||
++ sc->sched.extend_absence)
++ avp->periodic_noa = false;
++ else
++ avp->periodic_noa = true;
++
++ ath_dbg(common, CHAN_CTX,
++ "noa_duration: %d, noa_start: %d, noa_index: %d, periodic: %d\n",
++ avp->noa_duration,
++ avp->noa_start,
++ avp->noa_index,
++ avp->periodic_noa);
++}
++
+ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
+ enum ath_chanctx_event ev)
+ {
+@@ -521,31 +554,9 @@ void ath_chanctx_event(struct ath_softc
+ * announcement.
+ */
+ if (ctx->active &&
+- (!avp->noa_duration || sc->sched.force_noa_update)) {
+- avp->noa_index++;
+- avp->noa_start = tsf_time;
+-
+- if (sc->sched.extend_absence)
+- avp->noa_duration = (3 * beacon_int / 2) +
+- sc->sched.channel_switch_time;
+- else
+- avp->noa_duration =
+- TU_TO_USEC(cur_conf->beacon_interval) / 2 +
+- sc->sched.channel_switch_time;
+-
+- if (test_bit(ATH_OP_SCANNING, &common->op_flags) ||
+- sc->sched.extend_absence)
+- avp->periodic_noa = false;
+- else
+- avp->periodic_noa = true;
+-
+- ath_dbg(common, CHAN_CTX,
+- "noa_duration: %d, noa_start: %d, noa_index: %d, periodic: %d\n",
+- avp->noa_duration,
+- avp->noa_start,
+- avp->noa_index,
+- avp->periodic_noa);
+- }
++ (!avp->noa_duration || sc->sched.force_noa_update))
++ ath_chanctx_set_periodic_noa(sc, avp, cur_conf,
++ tsf_time, beacon_int);
+
+ if (ctx->active && sc->sched.force_noa_update)
+ sc->sched.force_noa_update = false;