diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/eeprom.h | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/gpio.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hif_usb.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_gpio.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 11 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/rc.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/recv.c | 23 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 19 |
11 files changed, 48 insertions, 48 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 94d887b65e69..1e8614783181 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -340,7 +340,8 @@ void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); | |||
340 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); | 340 | void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); |
341 | 341 | ||
342 | void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an); | 342 | void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an); |
343 | bool ath_tx_aggr_sleep(struct ath_softc *sc, struct ath_node *an); | 343 | void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, |
344 | struct ath_node *an); | ||
344 | 345 | ||
345 | /********/ | 346 | /********/ |
346 | /* VIFs */ | 347 | /* VIFs */ |
diff --git a/drivers/net/wireless/ath/ath9k/eeprom.h b/drivers/net/wireless/ath/ath9k/eeprom.h index a3c7d0c247a3..5d92f96980e6 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom.h +++ b/drivers/net/wireless/ath/ath9k/eeprom.h | |||
@@ -104,16 +104,11 @@ | |||
104 | #define OLC_FOR_AR9287_10_LATER (AR_SREV_9287_11_OR_LATER(ah) && \ | 104 | #define OLC_FOR_AR9287_10_LATER (AR_SREV_9287_11_OR_LATER(ah) && \ |
105 | ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL)) | 105 | ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL)) |
106 | 106 | ||
107 | #define AR_EEPROM_RFSILENT_GPIO_SEL 0x001c | ||
108 | #define AR_EEPROM_RFSILENT_GPIO_SEL_S 2 | ||
109 | #define AR_EEPROM_RFSILENT_POLARITY 0x0002 | ||
110 | #define AR_EEPROM_RFSILENT_POLARITY_S 1 | ||
111 | |||
112 | #define EEP_RFSILENT_ENABLED 0x0001 | 107 | #define EEP_RFSILENT_ENABLED 0x0001 |
113 | #define EEP_RFSILENT_ENABLED_S 0 | 108 | #define EEP_RFSILENT_ENABLED_S 0 |
114 | #define EEP_RFSILENT_POLARITY 0x0002 | 109 | #define EEP_RFSILENT_POLARITY 0x0002 |
115 | #define EEP_RFSILENT_POLARITY_S 1 | 110 | #define EEP_RFSILENT_POLARITY_S 1 |
116 | #define EEP_RFSILENT_GPIO_SEL 0x001c | 111 | #define EEP_RFSILENT_GPIO_SEL (AR_SREV_9480(ah) ? 0x00fc : 0x001c) |
117 | #define EEP_RFSILENT_GPIO_SEL_S 2 | 112 | #define EEP_RFSILENT_GPIO_SEL_S 2 |
118 | 113 | ||
119 | #define AR5416_OPFLAGS_11A 0x01 | 114 | #define AR5416_OPFLAGS_11A 0x01 |
diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c index afbf5400a52a..fd0f84ebdb51 100644 --- a/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c | |||
@@ -84,9 +84,14 @@ void ath_init_leds(struct ath_softc *sc) | |||
84 | static bool ath_is_rfkill_set(struct ath_softc *sc) | 84 | static bool ath_is_rfkill_set(struct ath_softc *sc) |
85 | { | 85 | { |
86 | struct ath_hw *ah = sc->sc_ah; | 86 | struct ath_hw *ah = sc->sc_ah; |
87 | bool is_blocked; | ||
87 | 88 | ||
88 | return ath9k_hw_gpio_get(ah, ah->rfkill_gpio) == | 89 | ath9k_ps_wakeup(sc); |
90 | is_blocked = ath9k_hw_gpio_get(ah, ah->rfkill_gpio) == | ||
89 | ah->rfkill_polarity; | 91 | ah->rfkill_polarity; |
92 | ath9k_ps_restore(sc); | ||
93 | |||
94 | return is_blocked; | ||
90 | } | 95 | } |
91 | 96 | ||
92 | void ath9k_rfkill_poll_state(struct ieee80211_hw *hw) | 97 | void ath9k_rfkill_poll_state(struct ieee80211_hw *hw) |
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c index d3f4a59cd456..77c8ded8de57 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c | |||
@@ -38,6 +38,7 @@ static struct usb_device_id ath9k_hif_usb_ids[] = { | |||
38 | { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ | 38 | { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ |
39 | { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ | 39 | { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ |
40 | { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */ | 40 | { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */ |
41 | { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */ | ||
41 | 42 | ||
42 | { USB_DEVICE(0x0cf3, 0x7015), | 43 | { USB_DEVICE(0x0cf3, 0x7015), |
43 | .driver_info = AR9287_USB }, /* Atheros */ | 44 | .driver_info = AR9287_USB }, /* Atheros */ |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c index db2352e5cc0d..e3a02eb8e0cc 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c | |||
@@ -228,8 +228,14 @@ void ath9k_init_leds(struct ath9k_htc_priv *priv) | |||
228 | 228 | ||
229 | static bool ath_is_rfkill_set(struct ath9k_htc_priv *priv) | 229 | static bool ath_is_rfkill_set(struct ath9k_htc_priv *priv) |
230 | { | 230 | { |
231 | return ath9k_hw_gpio_get(priv->ah, priv->ah->rfkill_gpio) == | 231 | bool is_blocked; |
232 | priv->ah->rfkill_polarity; | 232 | |
233 | ath9k_htc_ps_wakeup(priv); | ||
234 | is_blocked = ath9k_hw_gpio_get(priv->ah, priv->ah->rfkill_gpio) == | ||
235 | priv->ah->rfkill_polarity; | ||
236 | ath9k_htc_ps_restore(priv); | ||
237 | |||
238 | return is_blocked; | ||
233 | } | 239 | } |
234 | 240 | ||
235 | void ath9k_htc_rfkill_poll_state(struct ieee80211_hw *hw) | 241 | void ath9k_htc_rfkill_poll_state(struct ieee80211_hw *hw) |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c index 17dbbd9d2f53..0b9a0e8a4958 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c | |||
@@ -1352,7 +1352,8 @@ static int ath9k_htc_sta_remove(struct ieee80211_hw *hw, | |||
1352 | return ret; | 1352 | return ret; |
1353 | } | 1353 | } |
1354 | 1354 | ||
1355 | static int ath9k_htc_conf_tx(struct ieee80211_hw *hw, u16 queue, | 1355 | static int ath9k_htc_conf_tx(struct ieee80211_hw *hw, |
1356 | struct ieee80211_vif *vif, u16 queue, | ||
1356 | const struct ieee80211_tx_queue_params *params) | 1357 | const struct ieee80211_tx_queue_params *params) |
1357 | { | 1358 | { |
1358 | struct ath9k_htc_priv *priv = hw->priv; | 1359 | struct ath9k_htc_priv *priv = hw->priv; |
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index f2de7ee047ce..42ebe8fb053a 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -284,7 +284,12 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah) | |||
284 | ah->hw_version.macVersion = | 284 | ah->hw_version.macVersion = |
285 | (val & AR_SREV_VERSION2) >> AR_SREV_TYPE2_S; | 285 | (val & AR_SREV_VERSION2) >> AR_SREV_TYPE2_S; |
286 | ah->hw_version.macRev = MS(val, AR_SREV_REVISION2); | 286 | ah->hw_version.macRev = MS(val, AR_SREV_REVISION2); |
287 | ah->is_pciexpress = (val & AR_SREV_TYPE2_HOST_MODE) ? 0 : 1; | 287 | |
288 | if (AR_SREV_9480(ah)) | ||
289 | ah->is_pciexpress = true; | ||
290 | else | ||
291 | ah->is_pciexpress = (val & | ||
292 | AR_SREV_TYPE2_HOST_MODE) ? 0 : 1; | ||
288 | } else { | 293 | } else { |
289 | if (!AR_SREV_9100(ah)) | 294 | if (!AR_SREV_9100(ah)) |
290 | ah->hw_version.macVersion = MS(val, AR_SREV_VERSION); | 295 | ah->hw_version.macVersion = MS(val, AR_SREV_VERSION); |
@@ -2153,6 +2158,10 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah) | |||
2153 | pCap->num_gpio_pins = AR9271_NUM_GPIO; | 2158 | pCap->num_gpio_pins = AR9271_NUM_GPIO; |
2154 | else if (AR_DEVID_7010(ah)) | 2159 | else if (AR_DEVID_7010(ah)) |
2155 | pCap->num_gpio_pins = AR7010_NUM_GPIO; | 2160 | pCap->num_gpio_pins = AR7010_NUM_GPIO; |
2161 | else if (AR_SREV_9300_20_OR_LATER(ah)) | ||
2162 | pCap->num_gpio_pins = AR9300_NUM_GPIO; | ||
2163 | else if (AR_SREV_9287_11_OR_LATER(ah)) | ||
2164 | pCap->num_gpio_pins = AR9287_NUM_GPIO; | ||
2156 | else if (AR_SREV_9285_12_OR_LATER(ah)) | 2165 | else if (AR_SREV_9285_12_OR_LATER(ah)) |
2157 | pCap->num_gpio_pins = AR9285_NUM_GPIO; | 2166 | pCap->num_gpio_pins = AR9285_NUM_GPIO; |
2158 | else if (AR_SREV_9280_20_OR_LATER(ah)) | 2167 | else if (AR_SREV_9280_20_OR_LATER(ah)) |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index edaa7843bf4c..988318665758 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -1833,8 +1833,7 @@ static void ath9k_sta_notify(struct ieee80211_hw *hw, | |||
1833 | switch (cmd) { | 1833 | switch (cmd) { |
1834 | case STA_NOTIFY_SLEEP: | 1834 | case STA_NOTIFY_SLEEP: |
1835 | an->sleeping = true; | 1835 | an->sleeping = true; |
1836 | if (ath_tx_aggr_sleep(sc, an)) | 1836 | ath_tx_aggr_sleep(sta, sc, an); |
1837 | ieee80211_sta_set_tim(sta); | ||
1838 | break; | 1837 | break; |
1839 | case STA_NOTIFY_AWAKE: | 1838 | case STA_NOTIFY_AWAKE: |
1840 | an->sleeping = false; | 1839 | an->sleeping = false; |
@@ -1843,7 +1842,8 @@ static void ath9k_sta_notify(struct ieee80211_hw *hw, | |||
1843 | } | 1842 | } |
1844 | } | 1843 | } |
1845 | 1844 | ||
1846 | static int ath9k_conf_tx(struct ieee80211_hw *hw, u16 queue, | 1845 | static int ath9k_conf_tx(struct ieee80211_hw *hw, |
1846 | struct ieee80211_vif *vif, u16 queue, | ||
1847 | const struct ieee80211_tx_queue_params *params) | 1847 | const struct ieee80211_tx_queue_params *params) |
1848 | { | 1848 | { |
1849 | struct ath_softc *sc = hw->priv; | 1849 | struct ath_softc *sc = hw->priv; |
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index 4f1301881137..8448281dd069 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c | |||
@@ -1362,12 +1362,6 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband, | |||
1362 | if (tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED) | 1362 | if (tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED) |
1363 | return; | 1363 | return; |
1364 | 1364 | ||
1365 | if (!(tx_info->flags & IEEE80211_TX_STAT_AMPDU)) { | ||
1366 | tx_info->status.ampdu_ack_len = | ||
1367 | (tx_info->flags & IEEE80211_TX_STAT_ACK ? 1 : 0); | ||
1368 | tx_info->status.ampdu_len = 1; | ||
1369 | } | ||
1370 | |||
1371 | if (!(tx_info->flags & IEEE80211_TX_STAT_ACK)) | 1365 | if (!(tx_info->flags & IEEE80211_TX_STAT_ACK)) |
1372 | tx_status = 1; | 1366 | tx_status = 1; |
1373 | 1367 | ||
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index 49843500fe7c..f658ec60b510 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c | |||
@@ -586,22 +586,11 @@ static bool ath_beacon_dtim_pending_cab(struct sk_buff *skb) | |||
586 | 586 | ||
587 | static void ath_rx_ps_beacon(struct ath_softc *sc, struct sk_buff *skb) | 587 | static void ath_rx_ps_beacon(struct ath_softc *sc, struct sk_buff *skb) |
588 | { | 588 | { |
589 | struct ieee80211_mgmt *mgmt; | ||
590 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 589 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
591 | 590 | ||
592 | if (skb->len < 24 + 8 + 2 + 2) | 591 | if (skb->len < 24 + 8 + 2 + 2) |
593 | return; | 592 | return; |
594 | 593 | ||
595 | mgmt = (struct ieee80211_mgmt *)skb->data; | ||
596 | if (memcmp(common->curbssid, mgmt->bssid, ETH_ALEN) != 0) { | ||
597 | /* TODO: This doesn't work well if you have stations | ||
598 | * associated to two different APs because curbssid | ||
599 | * is just the last AP that any of the stations associated | ||
600 | * with. | ||
601 | */ | ||
602 | return; /* not from our current AP */ | ||
603 | } | ||
604 | |||
605 | sc->ps_flags &= ~PS_WAIT_FOR_BEACON; | 594 | sc->ps_flags &= ~PS_WAIT_FOR_BEACON; |
606 | 595 | ||
607 | if (sc->ps_flags & PS_BEACON_SYNC) { | 596 | if (sc->ps_flags & PS_BEACON_SYNC) { |
@@ -637,7 +626,7 @@ static void ath_rx_ps_beacon(struct ath_softc *sc, struct sk_buff *skb) | |||
637 | } | 626 | } |
638 | } | 627 | } |
639 | 628 | ||
640 | static void ath_rx_ps(struct ath_softc *sc, struct sk_buff *skb) | 629 | static void ath_rx_ps(struct ath_softc *sc, struct sk_buff *skb, bool mybeacon) |
641 | { | 630 | { |
642 | struct ieee80211_hdr *hdr; | 631 | struct ieee80211_hdr *hdr; |
643 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 632 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
@@ -646,7 +635,7 @@ static void ath_rx_ps(struct ath_softc *sc, struct sk_buff *skb) | |||
646 | 635 | ||
647 | /* Process Beacon and CAB receive in PS state */ | 636 | /* Process Beacon and CAB receive in PS state */ |
648 | if (((sc->ps_flags & PS_WAIT_FOR_BEACON) || ath9k_check_auto_sleep(sc)) | 637 | if (((sc->ps_flags & PS_WAIT_FOR_BEACON) || ath9k_check_auto_sleep(sc)) |
649 | && ieee80211_is_beacon(hdr->frame_control)) | 638 | && mybeacon) |
650 | ath_rx_ps_beacon(sc, skb); | 639 | ath_rx_ps_beacon(sc, skb); |
651 | else if ((sc->ps_flags & PS_WAIT_FOR_CAB) && | 640 | else if ((sc->ps_flags & PS_WAIT_FOR_CAB) && |
652 | (ieee80211_is_data(hdr->frame_control) || | 641 | (ieee80211_is_data(hdr->frame_control) || |
@@ -1952,10 +1941,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) | |||
1952 | spin_lock_irqsave(&sc->sc_pm_lock, flags); | 1941 | spin_lock_irqsave(&sc->sc_pm_lock, flags); |
1953 | 1942 | ||
1954 | if ((sc->ps_flags & (PS_WAIT_FOR_BEACON | | 1943 | if ((sc->ps_flags & (PS_WAIT_FOR_BEACON | |
1955 | PS_WAIT_FOR_CAB | | 1944 | PS_WAIT_FOR_CAB | |
1956 | PS_WAIT_FOR_PSPOLL_DATA)) || | 1945 | PS_WAIT_FOR_PSPOLL_DATA)) || |
1957 | ath9k_check_auto_sleep(sc)) | 1946 | ath9k_check_auto_sleep(sc)) |
1958 | ath_rx_ps(sc, skb); | 1947 | ath_rx_ps(sc, skb, rs.is_mybeacon); |
1959 | spin_unlock_irqrestore(&sc->sc_pm_lock, flags); | 1948 | spin_unlock_irqrestore(&sc->sc_pm_lock, flags); |
1960 | 1949 | ||
1961 | if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx == 3) | 1950 | if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx == 3) |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index fa3dcfdf7174..c2bfc57958d8 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -542,7 +542,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, | |||
542 | /* prepend un-acked frames to the beginning of the pending frame queue */ | 542 | /* prepend un-acked frames to the beginning of the pending frame queue */ |
543 | if (!skb_queue_empty(&bf_pending)) { | 543 | if (!skb_queue_empty(&bf_pending)) { |
544 | if (an->sleeping) | 544 | if (an->sleeping) |
545 | ieee80211_sta_set_tim(sta); | 545 | ieee80211_sta_set_buffered(sta, tid->tidno, true); |
546 | 546 | ||
547 | spin_lock_bh(&txq->axq_lock); | 547 | spin_lock_bh(&txq->axq_lock); |
548 | if (clear_filter) | 548 | if (clear_filter) |
@@ -1153,12 +1153,13 @@ void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid) | |||
1153 | ath_tx_flush_tid(sc, txtid); | 1153 | ath_tx_flush_tid(sc, txtid); |
1154 | } | 1154 | } |
1155 | 1155 | ||
1156 | bool ath_tx_aggr_sleep(struct ath_softc *sc, struct ath_node *an) | 1156 | void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, |
1157 | struct ath_node *an) | ||
1157 | { | 1158 | { |
1158 | struct ath_atx_tid *tid; | 1159 | struct ath_atx_tid *tid; |
1159 | struct ath_atx_ac *ac; | 1160 | struct ath_atx_ac *ac; |
1160 | struct ath_txq *txq; | 1161 | struct ath_txq *txq; |
1161 | bool buffered = false; | 1162 | bool buffered; |
1162 | int tidno; | 1163 | int tidno; |
1163 | 1164 | ||
1164 | for (tidno = 0, tid = &an->tid[tidno]; | 1165 | for (tidno = 0, tid = &an->tid[tidno]; |
@@ -1172,8 +1173,7 @@ bool ath_tx_aggr_sleep(struct ath_softc *sc, struct ath_node *an) | |||
1172 | 1173 | ||
1173 | spin_lock_bh(&txq->axq_lock); | 1174 | spin_lock_bh(&txq->axq_lock); |
1174 | 1175 | ||
1175 | if (!skb_queue_empty(&tid->buf_q)) | 1176 | buffered = !skb_queue_empty(&tid->buf_q); |
1176 | buffered = true; | ||
1177 | 1177 | ||
1178 | tid->sched = false; | 1178 | tid->sched = false; |
1179 | list_del(&tid->list); | 1179 | list_del(&tid->list); |
@@ -1184,9 +1184,9 @@ bool ath_tx_aggr_sleep(struct ath_softc *sc, struct ath_node *an) | |||
1184 | } | 1184 | } |
1185 | 1185 | ||
1186 | spin_unlock_bh(&txq->axq_lock); | 1186 | spin_unlock_bh(&txq->axq_lock); |
1187 | } | ||
1188 | 1187 | ||
1189 | return buffered; | 1188 | ieee80211_sta_set_buffered(sta, tidno, buffered); |
1189 | } | ||
1190 | } | 1190 | } |
1191 | 1191 | ||
1192 | void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an) | 1192 | void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an) |
@@ -2043,10 +2043,9 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, | |||
2043 | tx_info->flags |= IEEE80211_TX_STAT_AMPDU; | 2043 | tx_info->flags |= IEEE80211_TX_STAT_AMPDU; |
2044 | 2044 | ||
2045 | BUG_ON(nbad > nframes); | 2045 | BUG_ON(nbad > nframes); |
2046 | |||
2047 | tx_info->status.ampdu_len = nframes; | ||
2048 | tx_info->status.ampdu_ack_len = nframes - nbad; | ||
2049 | } | 2046 | } |
2047 | tx_info->status.ampdu_len = nframes; | ||
2048 | tx_info->status.ampdu_ack_len = nframes - nbad; | ||
2050 | 2049 | ||
2051 | if ((ts->ts_status & ATH9K_TXERR_FILT) == 0 && | 2050 | if ((ts->ts_status & ATH9K_TXERR_FILT) == 0 && |
2052 | (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) == 0) { | 2051 | (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) == 0) { |