diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath9k/rc.c | 30 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/xmit.c | 1 |
2 files changed, 15 insertions, 16 deletions
diff --git a/drivers/net/wireless/ath9k/rc.c b/drivers/net/wireless/ath9k/rc.c index eb557add6567..61c86c4f9fc4 100644 --- a/drivers/net/wireless/ath9k/rc.c +++ b/drivers/net/wireless/ath9k/rc.c | |||
@@ -1479,6 +1479,20 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband, | |||
1479 | (is_underrun) ? ATH_11N_TXMAXTRY : | 1479 | (is_underrun) ? ATH_11N_TXMAXTRY : |
1480 | tx_info_priv->tx.ts_longretry); | 1480 | tx_info_priv->tx.ts_longretry); |
1481 | 1481 | ||
1482 | /* Check if aggregation has to be enabled for this tid */ | ||
1483 | if (conf_is_ht(&sc->hw->conf)) { | ||
1484 | if (ieee80211_is_data_qos(fc)) { | ||
1485 | u8 *qc, tid; | ||
1486 | struct ath_node *an; | ||
1487 | |||
1488 | qc = ieee80211_get_qos_ctl(hdr); | ||
1489 | tid = qc[0] & 0xf; | ||
1490 | an = (struct ath_node *)sta->drv_priv; | ||
1491 | |||
1492 | if(ath_tx_aggr_check(sc, an, tid)) | ||
1493 | ieee80211_start_tx_ba_session(sc->hw, hdr->addr1, tid); | ||
1494 | } | ||
1495 | } | ||
1482 | exit: | 1496 | exit: |
1483 | kfree(tx_info_priv); | 1497 | kfree(tx_info_priv); |
1484 | } | 1498 | } |
@@ -1490,7 +1504,6 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta, | |||
1490 | struct sk_buff *skb = txrc->skb; | 1504 | struct sk_buff *skb = txrc->skb; |
1491 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; | 1505 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; |
1492 | struct ath_softc *sc = priv; | 1506 | struct ath_softc *sc = priv; |
1493 | struct ieee80211_hw *hw = sc->hw; | ||
1494 | struct ath_rate_priv *ath_rc_priv = priv_sta; | 1507 | struct ath_rate_priv *ath_rc_priv = priv_sta; |
1495 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); | 1508 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); |
1496 | int is_probe = 0; | 1509 | int is_probe = 0; |
@@ -1508,21 +1521,6 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta, | |||
1508 | /* Find tx rate for unicast frames */ | 1521 | /* Find tx rate for unicast frames */ |
1509 | ath_rc_ratefind(sc, ath_rc_priv, ATH_11N_TXMAXTRY, 4, | 1522 | ath_rc_ratefind(sc, ath_rc_priv, ATH_11N_TXMAXTRY, 4, |
1510 | tx_info, &is_probe, false); | 1523 | tx_info, &is_probe, false); |
1511 | |||
1512 | /* Check if aggregation has to be enabled for this tid */ | ||
1513 | if (conf_is_ht(&hw->conf)) { | ||
1514 | if (ieee80211_is_data_qos(fc)) { | ||
1515 | u8 *qc, tid; | ||
1516 | struct ath_node *an; | ||
1517 | |||
1518 | qc = ieee80211_get_qos_ctl(hdr); | ||
1519 | tid = qc[0] & 0xf; | ||
1520 | an = (struct ath_node *)sta->drv_priv; | ||
1521 | |||
1522 | if(ath_tx_aggr_check(sc, an, tid)) | ||
1523 | ieee80211_start_tx_ba_session(hw, hdr->addr1, tid); | ||
1524 | } | ||
1525 | } | ||
1526 | } | 1524 | } |
1527 | 1525 | ||
1528 | static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband, | 1526 | static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband, |
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c index 007ca91188d1..d483f3c13501 100644 --- a/drivers/net/wireless/ath9k/xmit.c +++ b/drivers/net/wireless/ath9k/xmit.c | |||
@@ -677,6 +677,7 @@ int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta, | |||
677 | txtid = ATH_AN_2_TID(an, tid); | 677 | txtid = ATH_AN_2_TID(an, tid); |
678 | txtid->state |= AGGR_ADDBA_PROGRESS; | 678 | txtid->state |= AGGR_ADDBA_PROGRESS; |
679 | ath_tx_pause_tid(sc, txtid); | 679 | ath_tx_pause_tid(sc, txtid); |
680 | *ssn = txtid->seq_start; | ||
680 | } | 681 | } |
681 | 682 | ||
682 | return 0; | 683 | return 0; |