diff options
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/carl9170.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/main.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/tx.c | 7 |
4 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 524825720a09..dddb85de622d 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -1048,6 +1048,8 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
1048 | "Starting driver with initial channel: %d MHz\n", | 1048 | "Starting driver with initial channel: %d MHz\n", |
1049 | curchan->center_freq); | 1049 | curchan->center_freq); |
1050 | 1050 | ||
1051 | ath9k_ps_wakeup(sc); | ||
1052 | |||
1051 | mutex_lock(&sc->mutex); | 1053 | mutex_lock(&sc->mutex); |
1052 | 1054 | ||
1053 | /* setup initial channel */ | 1055 | /* setup initial channel */ |
@@ -1143,6 +1145,8 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
1143 | mutex_unlock: | 1145 | mutex_unlock: |
1144 | mutex_unlock(&sc->mutex); | 1146 | mutex_unlock(&sc->mutex); |
1145 | 1147 | ||
1148 | ath9k_ps_restore(sc); | ||
1149 | |||
1146 | return r; | 1150 | return r; |
1147 | } | 1151 | } |
1148 | 1152 | ||
diff --git a/drivers/net/wireless/ath/carl9170/carl9170.h b/drivers/net/wireless/ath/carl9170/carl9170.h index c01c43d8e61b..3d4ed5863732 100644 --- a/drivers/net/wireless/ath/carl9170/carl9170.h +++ b/drivers/net/wireless/ath/carl9170/carl9170.h | |||
@@ -443,6 +443,7 @@ struct carl9170_ba_stats { | |||
443 | u8 ampdu_len; | 443 | u8 ampdu_len; |
444 | u8 ampdu_ack_len; | 444 | u8 ampdu_ack_len; |
445 | bool clear; | 445 | bool clear; |
446 | bool req; | ||
446 | }; | 447 | }; |
447 | 448 | ||
448 | struct carl9170_sta_info { | 449 | struct carl9170_sta_info { |
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c index ede3d7e5a048..89fe60accf85 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c | |||
@@ -1355,6 +1355,7 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw, | |||
1355 | tid_info = rcu_dereference(sta_info->agg[tid]); | 1355 | tid_info = rcu_dereference(sta_info->agg[tid]); |
1356 | 1356 | ||
1357 | sta_info->stats[tid].clear = true; | 1357 | sta_info->stats[tid].clear = true; |
1358 | sta_info->stats[tid].req = false; | ||
1358 | 1359 | ||
1359 | if (tid_info) { | 1360 | if (tid_info) { |
1360 | bitmap_zero(tid_info->bitmap, CARL9170_BAW_SIZE); | 1361 | bitmap_zero(tid_info->bitmap, CARL9170_BAW_SIZE); |
diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c index 0ef70b6fc512..cb70ed7ec5cc 100644 --- a/drivers/net/wireless/ath/carl9170/tx.c +++ b/drivers/net/wireless/ath/carl9170/tx.c | |||
@@ -383,6 +383,7 @@ static void carl9170_tx_status_process_ampdu(struct ar9170 *ar, | |||
383 | 383 | ||
384 | if (sta_info->stats[tid].clear) { | 384 | if (sta_info->stats[tid].clear) { |
385 | sta_info->stats[tid].clear = false; | 385 | sta_info->stats[tid].clear = false; |
386 | sta_info->stats[tid].req = false; | ||
386 | sta_info->stats[tid].ampdu_len = 0; | 387 | sta_info->stats[tid].ampdu_len = 0; |
387 | sta_info->stats[tid].ampdu_ack_len = 0; | 388 | sta_info->stats[tid].ampdu_ack_len = 0; |
388 | } | 389 | } |
@@ -391,10 +392,16 @@ static void carl9170_tx_status_process_ampdu(struct ar9170 *ar, | |||
391 | if (txinfo->status.rates[0].count == 1) | 392 | if (txinfo->status.rates[0].count == 1) |
392 | sta_info->stats[tid].ampdu_ack_len++; | 393 | sta_info->stats[tid].ampdu_ack_len++; |
393 | 394 | ||
395 | if (!(txinfo->flags & IEEE80211_TX_STAT_ACK)) | ||
396 | sta_info->stats[tid].req = true; | ||
397 | |||
394 | if (super->f.mac_control & cpu_to_le16(AR9170_TX_MAC_IMM_BA)) { | 398 | if (super->f.mac_control & cpu_to_le16(AR9170_TX_MAC_IMM_BA)) { |
395 | super->s.rix = sta_info->stats[tid].ampdu_len; | 399 | super->s.rix = sta_info->stats[tid].ampdu_len; |
396 | super->s.cnt = sta_info->stats[tid].ampdu_ack_len; | 400 | super->s.cnt = sta_info->stats[tid].ampdu_ack_len; |
397 | txinfo->flags |= IEEE80211_TX_STAT_AMPDU; | 401 | txinfo->flags |= IEEE80211_TX_STAT_AMPDU; |
402 | if (sta_info->stats[tid].req) | ||
403 | txinfo->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK; | ||
404 | |||
398 | sta_info->stats[tid].clear = true; | 405 | sta_info->stats[tid].clear = true; |
399 | } | 406 | } |
400 | spin_unlock_bh(&tid_info->lock); | 407 | spin_unlock_bh(&tid_info->lock); |