Kyle McMartin 8dba4a6
From c564db51fe187362c4da0a9de2905c020e981c75 Mon Sep 17 00:00:00 2001
Kyle McMartin 8dba4a6
From: Nick Kossifidis <mickflemm@gmail.com>
Kyle McMartin 8dba4a6
Date: Thu, 2 Jun 2011 03:09:48 +0300
Kyle McMartin 8dba4a6
Subject: ath5k: Disable fast channel switching by default
Kyle McMartin 8dba4a6
Kyle McMartin 8dba4a6
Disable fast channel change by default on AR2413/AR5413 due to
Kyle McMartin 8dba4a6
some bug reports (it still works for me but it's better to be safe).
Kyle McMartin 8dba4a6
Add a module parameter "fastchanswitch" in case anyone wants to enable
Kyle McMartin 8dba4a6
it and play with it.
Kyle McMartin 8dba4a6
Kyle McMartin 8dba4a6
Signed-off-by: Nick Kossifidis <mickflemm@gmail.com>
Kyle McMartin 8dba4a6
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Kyle McMartin 8dba4a6
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Kyle McMartin 8dba4a6
---
Kyle McMartin 8dba4a6
 drivers/net/wireless/ath/ath5k/base.c  |    9 ++++++++-
Kyle McMartin 8dba4a6
 drivers/net/wireless/ath/ath5k/reset.c |    5 ++++-
Kyle McMartin 8dba4a6
 2 files changed, 12 insertions(+), 2 deletions(-)
Kyle McMartin 8dba4a6
Kyle McMartin 8dba4a6
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
Kyle McMartin 8dba4a6
index 09ae4ef..0fb6333 100644
Kyle McMartin 8dba4a6
--- a/drivers/net/wireless/ath/ath5k/base.c
Kyle McMartin 8dba4a6
+++ b/drivers/net/wireless/ath/ath5k/base.c
Kyle McMartin 8dba4a6
@@ -69,6 +69,11 @@ static int modparam_all_channels;
Kyle McMartin 8dba4a6
 module_param_named(all_channels, modparam_all_channels, bool, S_IRUGO);
Kyle McMartin 8dba4a6
 MODULE_PARM_DESC(all_channels, "Expose all channels the device can use.");
Kyle McMartin 8dba4a6
 
Kyle McMartin 8dba4a6
+static int modparam_fastchanswitch;
Kyle McMartin 8dba4a6
+module_param_named(fastchanswitch, modparam_fastchanswitch, bool, S_IRUGO);
Kyle McMartin 8dba4a6
+MODULE_PARM_DESC(fastchanswitch, "Enable fast channel switching for AR2413/AR5413 radios.");
Kyle McMartin 8dba4a6
+
Kyle McMartin 8dba4a6
+
Kyle McMartin 8dba4a6
 /* Module info */
Kyle McMartin 8dba4a6
 MODULE_AUTHOR("Jiri Slaby");
Kyle McMartin 8dba4a6
 MODULE_AUTHOR("Nick Kossifidis");
Kyle McMartin 8dba4a6
@@ -2664,6 +2669,7 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
Kyle McMartin 8dba4a6
 	struct ath5k_hw *ah = sc->ah;
Kyle McMartin 8dba4a6
 	struct ath_common *common = ath5k_hw_common(ah);
Kyle McMartin 8dba4a6
 	int ret, ani_mode;
Kyle McMartin 8dba4a6
+	bool fast;
Kyle McMartin 8dba4a6
 
Kyle McMartin 8dba4a6
 	ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
Kyle McMartin 8dba4a6
 
Kyle McMartin 8dba4a6
@@ -2685,7 +2691,8 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
Kyle McMartin 8dba4a6
 		sc->curchan = chan;
Kyle McMartin 8dba4a6
 		sc->curband = &sc->sbands[chan->band];
Kyle McMartin 8dba4a6
 	}
Kyle McMartin 8dba4a6
-	ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, chan != NULL,
Kyle McMartin 8dba4a6
+	fast = ((chan != NULL) && modparam_fastchanswitch) ? 1 : 0;
Kyle McMartin 8dba4a6
+	ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, fast,
Kyle McMartin 8dba4a6
 								skip_pcu);
Kyle McMartin 8dba4a6
 	if (ret) {
Kyle McMartin 8dba4a6
 		ATH5K_ERR(sc, "can't reset hardware (%d)\n", ret);
Kyle McMartin 8dba4a6
diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
Kyle McMartin 8dba4a6
index 8420689..6f53d2b 100644
Kyle McMartin 8dba4a6
--- a/drivers/net/wireless/ath/ath5k/reset.c
Kyle McMartin 8dba4a6
+++ b/drivers/net/wireless/ath/ath5k/reset.c
Kyle McMartin 8dba4a6
@@ -1119,8 +1119,11 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
Kyle McMartin 8dba4a6
 			/* Non fatal, can happen eg.
Kyle McMartin 8dba4a6
 			 * on mode change */
Kyle McMartin 8dba4a6
 			ret = 0;
Kyle McMartin 8dba4a6
-		} else
Kyle McMartin 8dba4a6
+		} else {
Kyle McMartin 8dba4a6
+			ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_RESET,
Kyle McMartin 8dba4a6
+				"fast chan change successful\n");
Kyle McMartin 8dba4a6
 			return 0;
Kyle McMartin 8dba4a6
+		}
Kyle McMartin 8dba4a6
 	}
Kyle McMartin 8dba4a6
 
Kyle McMartin 8dba4a6
 	/*
Kyle McMartin 8dba4a6
-- 
Kyle McMartin 8dba4a6
1.7.5.2
Kyle McMartin 8dba4a6