diff options
Diffstat (limited to 'drivers/net/wireless/ath9k/main.c')
-rw-r--r-- | drivers/net/wireless/ath9k/main.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index 32acaf7ff622..a7656a3ea1b0 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
@@ -457,12 +457,13 @@ void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, | |||
457 | DPRINTF(sc, ATH_DBG_XMIT, | 457 | DPRINTF(sc, ATH_DBG_XMIT, |
458 | "%s: TX complete: skb: %p\n", __func__, skb); | 458 | "%s: TX complete: skb: %p\n", __func__, skb); |
459 | 459 | ||
460 | ieee80211_tx_info_clear_status(tx_info); | ||
460 | if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK || | 461 | if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK || |
461 | tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED) { | 462 | tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED) { |
462 | /* free driver's private data area of tx_info */ | 463 | /* free driver's private data area of tx_info, XXX: HACK! */ |
463 | if (tx_info->driver_data[0] != NULL) | 464 | if (tx_info->control.vif != NULL) |
464 | kfree(tx_info->driver_data[0]); | 465 | kfree(tx_info->control.vif); |
465 | tx_info->driver_data[0] = NULL; | 466 | tx_info->control.vif = NULL; |
466 | } | 467 | } |
467 | 468 | ||
468 | if (tx_status->flags & ATH_TX_BAR) { | 469 | if (tx_status->flags & ATH_TX_BAR) { |
@@ -470,17 +471,12 @@ void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, | |||
470 | tx_status->flags &= ~ATH_TX_BAR; | 471 | tx_status->flags &= ~ATH_TX_BAR; |
471 | } | 472 | } |
472 | 473 | ||
473 | if (tx_status->flags & (ATH_TX_ERROR | ATH_TX_XRETRY)) { | 474 | if (!(tx_status->flags & (ATH_TX_ERROR | ATH_TX_XRETRY))) { |
474 | if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) { | ||
475 | /* Frame was not ACKed, but an ACK was expected */ | ||
476 | tx_info->status.excessive_retries = 1; | ||
477 | } | ||
478 | } else { | ||
479 | /* Frame was ACKed */ | 475 | /* Frame was ACKed */ |
480 | tx_info->flags |= IEEE80211_TX_STAT_ACK; | 476 | tx_info->flags |= IEEE80211_TX_STAT_ACK; |
481 | } | 477 | } |
482 | 478 | ||
483 | tx_info->status.retry_count = tx_status->retries; | 479 | tx_info->status.rates[0].count = tx_status->retries + 1; |
484 | 480 | ||
485 | ieee80211_tx_status(hw, skb); | 481 | ieee80211_tx_status(hw, skb); |
486 | if (an) | 482 | if (an) |