]> Pileus Git - ~andy/linux/commitdiff
iwlwifi: set AMPDU status variables correctly
authorDaniel Halperin <dhalperi@cs.washington.edu>
Sun, 18 Apr 2010 16:27:58 +0000 (09:27 -0700)
committerReinette Chatre <reinette.chatre@intel.com>
Fri, 30 Apr 2010 22:34:31 +0000 (15:34 -0700)
The TX status code is currently abusing the ampdu_ack_map field (a bitmap) to
count the number of successfully received frames.  The comments in mac80211.h
show there are actually three different, relevant variables, of which we are
currently using two, both incorrectly. Fix this by making

- ampdu_ack_len -> the number of ACKed frames (i.e. successes)
- ampdu_ack_map -> the bitmap
- ampdu_len -> the total number of frames sent (i.e., attempts)

to match the header file (and verified with ath9k's usage) and updating Intel's
RS code to match.

Signed-off-by: Daniel Halperin <dhalperi@cs.washington.edu>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
drivers/net/wireless/iwlwifi/iwl-agn-rs.c
drivers/net/wireless/iwlwifi/iwl-agn-tx.c

index 8f8d5e3e688d2f4fdcac79829c0f13ee96a494a1..f01f242659c30d8522b791ab368bd20cdfc7dc74 100644 (file)
@@ -867,14 +867,14 @@ static void rs_tx_status(void *priv_r, struct ieee80211_supported_band *sband,
                rs_get_tbl_info_from_mcs(tx_rate, priv->band, &tbl_type,
                                &rs_index);
                rs_collect_tx_data(curr_tbl, rs_index,
-                                  info->status.ampdu_ack_len,
-                                  info->status.ampdu_ack_map);
+                                  info->status.ampdu_len,
+                                  info->status.ampdu_ack_len);
 
                /* Update success/fail counts if not searching for new mode */
                if (lq_sta->stay_in_tbl) {
-                       lq_sta->total_success += info->status.ampdu_ack_map;
-                       lq_sta->total_failed += (info->status.ampdu_ack_len -
-                                       info->status.ampdu_ack_map);
+                       lq_sta->total_success += info->status.ampdu_ack_len;
+                       lq_sta->total_failed += (info->status.ampdu_len -
+                                       info->status.ampdu_ack_len);
                }
        } else {
        /*
index 95e263f1d1177f37213ab464470d5f6829f2095f..c2a5c85542bfaf25a2d493f7e5a7da4bc1640086 100644 (file)
@@ -1233,8 +1233,9 @@ static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv,
        memset(&info->status, 0, sizeof(info->status));
        info->flags |= IEEE80211_TX_STAT_ACK;
        info->flags |= IEEE80211_TX_STAT_AMPDU;
-       info->status.ampdu_ack_map = successes;
-       info->status.ampdu_ack_len = agg->frame_count;
+       info->status.ampdu_ack_len = successes;
+       info->status.ampdu_ack_map = bitmap;
+       info->status.ampdu_len = agg->frame_count;
        iwlagn_hwrate_to_tx_control(priv, agg->rate_n_flags, info);
 
        IWL_DEBUG_TX_REPLY(priv, "Bitmap %llx\n", (unsigned long long)bitmap);