aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2x00dev.c
diff options
context:
space:
mode:
authorHelmut Schaa <helmut.schaa@googlemail.com>2010-06-29 15:38:12 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-06-30 15:00:48 -0400
commit1df90809f79b765fd4e8868c2b182d948f198a17 (patch)
tree2f7d7165d30b6f87f76c25389b4c0e96f9d7066c /drivers/net/wireless/rt2x00/rt2x00dev.c
parentf35376a44f7655bcb9a9abea1fbffcde1b80be55 (diff)
rt2x00: Implement tx mpdu aggregation
In order to implement tx mpdu aggregation we only have to implement the ampdu_action callback such that mac80211 allows negotiation of blockack sessions. The hardware will handle everything on its own as long as the ampdu flag in the TXWI struct is set up correctly and we translate the tx status correctly. For now, refuse requests to start rx aggregation. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00dev.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index 339cc84bf4fb..a914855099b7 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -286,6 +286,21 @@ void rt2x00lib_txdone(struct queue_entry *entry,
286 rt2x00dev->low_level_stats.dot11ACKFailureCount++; 286 rt2x00dev->low_level_stats.dot11ACKFailureCount++;
287 } 287 }
288 288
289 /*
290 * Every single frame has it's own tx status, hence report
291 * every frame as ampdu of size 1.
292 *
293 * TODO: if we can find out how many frames were aggregated
294 * by the hw we could provide the real ampdu_len to mac80211
295 * which would allow the rc algorithm to better decide on
296 * which rates are suitable.
297 */
298 if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
299 tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
300 tx_info->status.ampdu_len = 1;
301 tx_info->status.ampdu_ack_len = success ? 1 : 0;
302 }
303
289 if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) { 304 if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
290 if (success) 305 if (success)
291 rt2x00dev->low_level_stats.dot11RTSSuccessCount++; 306 rt2x00dev->low_level_stats.dot11RTSSuccessCount++;