aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ath9k/core.h1
-rw-r--r--drivers/net/wireless/ath9k/main.c3
-rw-r--r--drivers/net/wireless/ath9k/xmit.c19
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,
581int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, 581int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta,
582 u16 tid, u16 *ssn); 582 u16 tid, u16 *ssn);
583int ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); 583int ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid);
584void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid);
584void ath_newassoc(struct ath_softc *sc, 585void ath_newassoc(struct ath_softc *sc,
585 struct ath_node *node, int isnew, int isuapsd); 586 struct ath_node *node, int isnew, int isuapsd);
586void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta); 587void 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
2376void 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.