diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/xmit.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 7b91b2aa624..97dd1fac98b 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -1663,8 +1663,7 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, int len) | |||
1663 | rix = rates[i].idx; | 1663 | rix = rates[i].idx; |
1664 | series[i].Tries = rates[i].count; | 1664 | series[i].Tries = rates[i].count; |
1665 | 1665 | ||
1666 | if ((sc->config.ath_aggr_prot && bf_isaggr(bf)) || | 1666 | if (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) { |
1667 | (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS)) { | ||
1668 | series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS; | 1667 | series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS; |
1669 | flags |= ATH9K_TXDESC_RTSENA; | 1668 | flags |= ATH9K_TXDESC_RTSENA; |
1670 | } else if (rates[i].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { | 1669 | } else if (rates[i].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { |
@@ -1733,8 +1732,6 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, int len) | |||
1733 | !is_pspoll, ctsrate, | 1732 | !is_pspoll, ctsrate, |
1734 | 0, series, 4, flags); | 1733 | 0, series, 4, flags); |
1735 | 1734 | ||
1736 | if (sc->config.ath_aggr_prot && flags) | ||
1737 | ath9k_hw_set11n_burstduration(sc->sc_ah, bf->bf_desc, 8192); | ||
1738 | } | 1735 | } |
1739 | 1736 | ||
1740 | static struct ath_buf *ath_tx_setup_buffer(struct ieee80211_hw *hw, | 1737 | static struct ath_buf *ath_tx_setup_buffer(struct ieee80211_hw *hw, |
@@ -1848,6 +1845,7 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
1848 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; | 1845 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; |
1849 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 1846 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
1850 | struct ieee80211_sta *sta = info->control.sta; | 1847 | struct ieee80211_sta *sta = info->control.sta; |
1848 | struct ieee80211_vif *vif = info->control.vif; | ||
1851 | struct ath_softc *sc = hw->priv; | 1849 | struct ath_softc *sc = hw->priv; |
1852 | struct ath_txq *txq = txctl->txq; | 1850 | struct ath_txq *txq = txctl->txq; |
1853 | struct ath_buf *bf; | 1851 | struct ath_buf *bf; |
@@ -1885,6 +1883,11 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
1885 | memmove(skb->data, skb->data + padsize, padpos); | 1883 | memmove(skb->data, skb->data + padsize, padpos); |
1886 | } | 1884 | } |
1887 | 1885 | ||
1886 | if ((vif && vif->type != NL80211_IFTYPE_AP && | ||
1887 | vif->type != NL80211_IFTYPE_AP_VLAN) || | ||
1888 | !ieee80211_is_data(hdr->frame_control)) | ||
1889 | info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT; | ||
1890 | |||
1888 | setup_frame_info(hw, skb, frmlen); | 1891 | setup_frame_info(hw, skb, frmlen); |
1889 | 1892 | ||
1890 | /* | 1893 | /* |