|
@@ -383,6 +383,7 @@ static void carl9170_tx_status_process_ampdu(struct ar9170 *ar,
|
|
|
|
|
|
if (sta_info->stats[tid].clear) {
|
|
|
sta_info->stats[tid].clear = false;
|
|
|
+ sta_info->stats[tid].req = false;
|
|
|
sta_info->stats[tid].ampdu_len = 0;
|
|
|
sta_info->stats[tid].ampdu_ack_len = 0;
|
|
|
}
|
|
@@ -391,10 +392,16 @@ static void carl9170_tx_status_process_ampdu(struct ar9170 *ar,
|
|
|
if (txinfo->status.rates[0].count == 1)
|
|
|
sta_info->stats[tid].ampdu_ack_len++;
|
|
|
|
|
|
+ if (!(txinfo->flags & IEEE80211_TX_STAT_ACK))
|
|
|
+ sta_info->stats[tid].req = true;
|
|
|
+
|
|
|
if (super->f.mac_control & cpu_to_le16(AR9170_TX_MAC_IMM_BA)) {
|
|
|
super->s.rix = sta_info->stats[tid].ampdu_len;
|
|
|
super->s.cnt = sta_info->stats[tid].ampdu_ack_len;
|
|
|
txinfo->flags |= IEEE80211_TX_STAT_AMPDU;
|
|
|
+ if (sta_info->stats[tid].req)
|
|
|
+ txinfo->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
|
|
|
+
|
|
|
sta_info->stats[tid].clear = true;
|
|
|
}
|
|
|
spin_unlock_bh(&tid_info->lock);
|