[PATCH] ath5k: Disable fast channel switching by default

Andy Whitcroft apw at canonical.com
Fri Jun 17 16:40:52 UTC 2011


On Fri, Jun 17, 2011 at 09:29:22AM -0500, Seth Forshee wrote:
> From: Nick Kossifidis <mickflemm at gmail.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/767192
> 
> Disable fast channel change by default on AR2413/AR5413 due to
> some bug reports (it still works for me but it's better to be safe).
> Add a module parameter "fastchanswitch" in case anyone wants to enable
> it and play with it.
> 
> Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
> Tested-by: Sedat Dilek <sedat.dilek at gmail.com>
> Signed-off-by: John W. Linville <linville at tuxdriver.com>
> (backported from commit a99168eece601d2a79ecfcb968ce226f2f30cf98 upstream)
> 
> Signed-off-by: Seth Forshee <seth.forshee at canonical.com>
> ---
>  drivers/net/wireless/ath/ath5k/base.c  |   11 ++++++++++-
>  drivers/net/wireless/ath/ath5k/reset.c |    5 ++++- >  2 files changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
> index 09ae4ef..f6814f0 100644
> --- a/drivers/net/wireless/ath/ath5k/base.c
> +++ b/drivers/net/wireless/ath/ath5k/base.c
> @@ -69,6 +69,11 @@ static int modparam_all_channels;
>  module_param_named(all_channels, modparam_all_channels, bool, S_IRUGO);
>  MODULE_PARM_DESC(all_channels, "Expose all channels the device can use.");
>  
> +static int modparam_fastchanswitch;
> +module_param_named(fastchanswitch, modparam_fastchanswitch, bool, S_IRUGO);
> +MODULE_PARM_DESC(fastchanswitch, "Enable fast channel switching for AR2413/AR5413 radios.");
> +
> +
>  /* Module info */
>  MODULE_AUTHOR("Jiri Slaby");
>  MODULE_AUTHOR("Nick Kossifidis");
> @@ -2664,6 +2669,7 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
>  	struct ath5k_hw *ah = sc->ah;
>  	struct ath_common *common = ath5k_hw_common(ah);
>  	int ret, ani_mode;
> +	bool fast;
>  
>  	ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
>  
> @@ -2685,7 +2691,10 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
>  		sc->curchan = chan;
>  		sc->curband = &sc->sbands[chan->band];
>  	}
> -	ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, chan != NULL,
> +
> +	fast = ((chan != NULL) && modparam_fastchanswitch) ? 1 : 0;

I suspect this could just be:

	fast = ((chan != NULL) && modparam_fastchanswitch);

but I assume that matches upstream, so don't change it.

> +
> +	ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, fast,
>  								skip_pcu);
>  	if (ret) {
>  		ATH5K_ERR(sc, "can't reset hardware (%d)\n", ret);
> diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
> index 8420689..6f53d2b 100644
> --- a/drivers/net/wireless/ath/ath5k/reset.c
> +++ b/drivers/net/wireless/ath/ath5k/reset.c
> @@ -1119,8 +1119,11 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
>  			/* Non fatal, can happen eg.
>  			 * on mode change */
>  			ret = 0;
> -		} else
> +		} else {
> +			ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_RESET,
> +				"fast chan change successful\n");
>  			return 0;
> +		}
>  	}

Otherwise it looks to do what it says and be pretty small and clear, so:

Acked-by: Andy Whitcroft <apw at canonical.com>

-apw




More information about the kernel-team mailing list