diff options
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/ath9k/core.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/main.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/xmit.c | 19 |
3 files changed, 23 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath9k/core.h b/drivers/net/wireless/ath9k/core.h index 5b17e88ab9a9..69e8d3e41131 100644 --- a/drivers/net/wireless/ath9k/core.h +++ b/drivers/net/wireless/ath9k/core.h | |||
@@ -581,6 +581,7 @@ void ath_tx_aggr_teardown(struct ath_softc *sc, | |||
581 | int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, | 581 | int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, |
582 | u16 tid, u16 *ssn); | 582 | u16 tid, u16 *ssn); |
583 | int ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); | 583 | int ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); |
584 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); | ||
584 | void ath_newassoc(struct ath_softc *sc, | 585 | void ath_newassoc(struct ath_softc *sc, |
585 | struct ath_node *node, int isnew, int isuapsd); | 586 | struct ath_node *node, int isnew, int isuapsd); |
586 | void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta); | 587 | void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta); |
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index 65a532e08ecd..fb50aa0fc996 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
@@ -1482,6 +1482,9 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw, | |||
1482 | 1482 | ||
1483 | ieee80211_stop_tx_ba_cb_irqsafe(hw, sta->addr, tid); | 1483 | ieee80211_stop_tx_ba_cb_irqsafe(hw, sta->addr, tid); |
1484 | break; | 1484 | break; |
1485 | case IEEE80211_AMPDU_TX_RESUME: | ||
1486 | ath_tx_aggr_resume(sc, sta, tid); | ||
1487 | break; | ||
1485 | default: | 1488 | default: |
1486 | DPRINTF(sc, ATH_DBG_FATAL, | 1489 | DPRINTF(sc, ATH_DBG_FATAL, |
1487 | "%s: Unknown AMPDU action\n", __func__); | 1490 | "%s: Unknown AMPDU action\n", __func__); |
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c index 7e6f4e59a5d1..fe386b6dadac 100644 --- a/drivers/net/wireless/ath9k/xmit.c +++ b/drivers/net/wireless/ath9k/xmit.c | |||
@@ -2371,6 +2371,25 @@ int ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid) | |||
2371 | return 0; | 2371 | return 0; |
2372 | } | 2372 | } |
2373 | 2373 | ||
2374 | /* Resume tx aggregation */ | ||
2375 | |||
2376 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid) | ||
2377 | { | ||
2378 | struct ath_atx_tid *txtid; | ||
2379 | struct ath_node *an; | ||
2380 | |||
2381 | an = (struct ath_node *)sta->drv_priv; | ||
2382 | |||
2383 | if (sc->sc_flags & SC_OP_TXAGGR) { | ||
2384 | txtid = ATH_AN_2_TID(an, tid); | ||
2385 | txtid->baw_size = | ||
2386 | IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor; | ||
2387 | txtid->state |= AGGR_ADDBA_COMPLETE; | ||
2388 | txtid->state &= ~AGGR_ADDBA_PROGRESS; | ||
2389 | ath_tx_resume_tid(sc, txtid); | ||
2390 | } | ||
2391 | } | ||
2392 | |||
2374 | /* | 2393 | /* |
2375 | * Performs transmit side cleanup when TID changes from aggregated to | 2394 | * Performs transmit side cleanup when TID changes from aggregated to |
2376 | * unaggregated. | 2395 | * unaggregated. |