aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorKalle Valo <kvalo@qca.qualcomm.com>2013-11-13 08:23:30 -0500
committerKalle Valo <kvalo@qca.qualcomm.com>2013-11-15 04:00:33 -0500
commit652de35e86da3e206fbfa40bca254b028b6403b6 (patch)
treee97a6ea80c8519a01db091ad2bb28d68b3c398f5 /drivers/net
parentc4dd0d01da8979bd5c7f4367661115617bc389ea (diff)
ath10k: remove htt rx amsdu clear retry bit hack
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>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath10k/htt.h1
-rw-r--r--drivers/net/wireless/ath/ath10k/htt_rx.c20
-rw-r--r--drivers/net/wireless/ath/ath10k/txrx.c3
3 files changed, 7 insertions, 17 deletions
diff --git a/drivers/net/wireless/ath/ath10k/htt.h b/drivers/net/wireless/ath/ath10k/htt.h
index 1a337e93b7e9..7fc7919ea5f5 100644
--- a/drivers/net/wireless/ath/ath10k/htt.h
+++ b/drivers/net/wireless/ath/ath10k/htt.h
@@ -1182,6 +1182,7 @@ struct htt_rx_info {
1182 u32 info2; 1182 u32 info2;
1183 } rate; 1183 } rate;
1184 bool fcs_err; 1184 bool fcs_err;
1185 bool amsdu_more;
1185}; 1186};
1186 1187
1187struct ath10k_htt { 1188struct ath10k_htt {
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index 90d4f74c28d7..0335218ad579 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -659,23 +659,6 @@ static void ath10k_htt_rx_amsdu(struct ath10k_htt *htt,
659 memcpy(hdr_buf, hdr, hdr_len); 659 memcpy(hdr_buf, hdr, hdr_len);
660 hdr = (struct ieee80211_hdr *)hdr_buf; 660 hdr = (struct ieee80211_hdr *)hdr_buf;
661 661
662 /* FIXME: Hopefully this is a temporary measure.
663 *
664 * Reporting individual A-MSDU subframes means each reported frame
665 * shares the same sequence number.
666 *
667 * mac80211 drops frames it recognizes as duplicates, i.e.
668 * retransmission flag is set and sequence number matches sequence
669 * number from a previous frame (as per IEEE 802.11-2012: 9.3.2.10
670 * "Duplicate detection and recovery")
671 *
672 * To avoid frames being dropped clear retransmission flag for all
673 * received A-MSDUs.
674 *
675 * Worst case: actual duplicate frames will be reported but this should
676 * still be handled gracefully by other OSI/ISO layers. */
677 hdr->frame_control &= cpu_to_le16(~IEEE80211_FCTL_RETRY);
678
679 first = skb; 662 first = skb;
680 while (skb) { 663 while (skb) {
681 void *decap_hdr; 664 void *decap_hdr;
@@ -746,6 +729,9 @@ static void ath10k_htt_rx_amsdu(struct ath10k_htt *htt,
746 skb = skb->next; 729 skb = skb->next;
747 info->skb->next = NULL; 730 info->skb->next = NULL;
748 731
732 if (skb)
733 info->amsdu_more = true;
734
749 ath10k_process_rx(htt->ar, info); 735 ath10k_process_rx(htt->ar, info);
750 } 736 }
751 737
diff --git a/drivers/net/wireless/ath/ath10k/txrx.c b/drivers/net/wireless/ath/ath10k/txrx.c
index c511f919d541..df279a31e189 100644
--- a/drivers/net/wireless/ath/ath10k/txrx.c
+++ b/drivers/net/wireless/ath/ath10k/txrx.c
@@ -236,6 +236,9 @@ void ath10k_process_rx(struct ath10k *ar, struct htt_rx_info *info)
236 if (info->fcs_err) 236 if (info->fcs_err)
237 status->flag |= RX_FLAG_FAILED_FCS_CRC; 237 status->flag |= RX_FLAG_FAILED_FCS_CRC;
238 238
239 if (info->amsdu_more)
240 status->flag |= RX_FLAG_AMSDU_MORE;
241
239 status->signal = info->signal; 242 status->signal = info->signal;
240 243
241 spin_lock_bh(&ar->data_lock); 244 spin_lock_bh(&ar->data_lock);