iwlagn: don't stop rts/cts until last aggregation queue close
authorWey-Yi Guy <wey-yi.w.guy@intel.com>
Mon, 10 Oct 2011 14:27:09 +0000 (07:27 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 14 Oct 2011 18:48:12 +0000 (14:48 -0400)
Once enable rts/cts for aggregation queue, do not disable until the
last aggregation queue closed.

Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-agn.c

index afd4b4c9b3f2a3d54200d095704b4dbfb497c554..f00484ea1b21d97be6f57fd9f3bce94f1815043f 100644 (file)
@@ -2418,11 +2418,6 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
        case IEEE80211_AMPDU_TX_START:
                IWL_DEBUG_HT(priv, "start Tx\n");
                ret = iwlagn_tx_agg_start(priv, vif, sta, tid, ssn);
-               if (ret == 0) {
-                       priv->agg_tids_count++;
-                       IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n",
-                                    priv->agg_tids_count);
-               }
                break;
        case IEEE80211_AMPDU_TX_STOP:
                IWL_DEBUG_HT(priv, "stop Tx\n");
@@ -2434,7 +2429,7 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
                }
                if (test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
                        ret = 0;
-               if (priv->cfg->ht_params &&
+               if (!priv->agg_tids_count && priv->cfg->ht_params &&
                    priv->cfg->ht_params->use_rts_for_aggregation) {
                        /*
                         * switch off RTS/CTS if it was previously enabled
@@ -2481,6 +2476,9 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
                        sta_priv->lq_sta.lq.general_params.flags |=
                                LINK_QUAL_FLAGS_SET_STA_TLC_RTS_MSK;
                }
+               priv->agg_tids_count++;
+               IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n",
+                            priv->agg_tids_count);
 
                sta_priv->lq_sta.lq.agg_params.agg_frame_cnt_limit =
                        sta_priv->max_agg_bufsize;