iwlwifi: mvm: rs: don't allow TPC when power save is disabled
authorEyal Shapira <eyal@wizery.com>
Mon, 21 Apr 2014 18:33:17 +0000 (21:33 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Tue, 6 May 2014 17:39:58 +0000 (20:39 +0300)
Currently we were checking only if the driver power_scheme is set
to CAM. TPC shouldn't be enabled also when disabling powersave on the
interface (e.g. iw wlan0 set power_save off)
which may occur even if power_scheme wasn't set to CAM.

Signed-off-by: Eyal Shapira <eyalx.shapira@intel.com>
Reviewed-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/rs.c

index a7ad532dfd9a3a1aeb58da6c363a5e152b063939..32ac66b5c4a31da7035ae7cf749bebf73fdf9116 100644 (file)
@@ -1750,16 +1750,21 @@ static void rs_get_adjacent_txp(struct iwl_mvm *mvm, int index,
                *stronger = TPC_INVALID;
 }
 
-static bool rs_tpc_allowed(struct iwl_mvm *mvm, struct rs_rate *rate,
-                          enum ieee80211_band band)
+static bool rs_tpc_allowed(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
+                          struct rs_rate *rate, enum ieee80211_band band)
 {
        int index = rate->index;
+       bool cam = (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_CAM);
+       bool sta_ps_disabled = (vif->type == NL80211_IFTYPE_STATION &&
+                               !vif->bss_conf.ps);
 
+       IWL_DEBUG_RATE(mvm, "cam: %d sta_ps_disabled %d\n",
+                      cam, sta_ps_disabled);
        /*
         * allow tpc only if power management is enabled, or bt coex
         * activity grade allows it and we are on 2.4Ghz.
         */
-       if (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_CAM &&
+       if ((cam || sta_ps_disabled) &&
            !iwl_mvm_bt_coex_is_tpc_allowed(mvm, band))
                return false;
 
@@ -1876,7 +1881,7 @@ static bool rs_tpc_perform(struct iwl_mvm *mvm,
                band = chanctx_conf->def.chan->band;
        rcu_read_unlock();
 
-       if (!rs_tpc_allowed(mvm, rate, band)) {
+       if (!rs_tpc_allowed(mvm, vif, rate, band)) {
                IWL_DEBUG_RATE(mvm,
                               "tpc is not allowed. remove txp restrictions");
                lq_sta->lq.reduced_tpc = TPC_NO_REDUCTION;