ath10k: remove htt rx amsdu clear retry bit hack
authorKalle Valo <kvalo@qca.qualcomm.com>
Wed, 13 Nov 2013 13:23:30 +0000 (15:23 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 15 Nov 2013 09:00:33 +0000 (11:00 +0200)
With commit 0cfcefef1 ("mac80211: support reporting A-MSDU subframes
individually") there's no need to have the hack to clear the retry bit in
ath10k_htt_rx_amsdu(), mac80211 can handle this properly now.

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/htt.h
drivers/net/wireless/ath/ath10k/htt_rx.c
drivers/net/wireless/ath/ath10k/txrx.c

index 1a337e9..7fc7919 100644 (file)
@@ -1182,6 +1182,7 @@ struct htt_rx_info {
                u32 info2;
        } rate;
        bool fcs_err;
+       bool amsdu_more;
 };
 
 struct ath10k_htt {
index 90d4f74..0335218 100644 (file)
@@ -659,23 +659,6 @@ static void ath10k_htt_rx_amsdu(struct ath10k_htt *htt,
        memcpy(hdr_buf, hdr, hdr_len);
        hdr = (struct ieee80211_hdr *)hdr_buf;
 
-       /* FIXME: Hopefully this is a temporary measure.
-        *
-        * Reporting individual A-MSDU subframes means each reported frame
-        * shares the same sequence number.
-        *
-        * mac80211 drops frames it recognizes as duplicates, i.e.
-        * retransmission flag is set and sequence number matches sequence
-        * number from a previous frame (as per IEEE 802.11-2012: 9.3.2.10
-        * "Duplicate detection and recovery")
-        *
-        * To avoid frames being dropped clear retransmission flag for all
-        * received A-MSDUs.
-        *
-        * Worst case: actual duplicate frames will be reported but this should
-        * still be handled gracefully by other OSI/ISO layers. */
-       hdr->frame_control &= cpu_to_le16(~IEEE80211_FCTL_RETRY);
-
        first = skb;
        while (skb) {
                void *decap_hdr;
@@ -746,6 +729,9 @@ static void ath10k_htt_rx_amsdu(struct ath10k_htt *htt,
                skb = skb->next;
                info->skb->next = NULL;
 
+               if (skb)
+                       info->amsdu_more = true;
+
                ath10k_process_rx(htt->ar, info);
        }
 
index c511f91..df279a3 100644 (file)
@@ -236,6 +236,9 @@ void ath10k_process_rx(struct ath10k *ar, struct htt_rx_info *info)
        if (info->fcs_err)
                status->flag |= RX_FLAG_FAILED_FCS_CRC;
 
+       if (info->amsdu_more)
+               status->flag |= RX_FLAG_AMSDU_MORE;
+
        status->signal = info->signal;
 
        spin_lock_bh(&ar->data_lock);