diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/htt_rx.c')
-rw-r--r-- | drivers/net/wireless/ath/ath10k/htt_rx.c | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c index 90d4f74c28d7..fcb534f2f28f 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 | ||
@@ -959,6 +945,11 @@ static void ath10k_htt_rx_handler(struct ath10k_htt *htt, | |||
959 | continue; | 945 | continue; |
960 | } | 946 | } |
961 | 947 | ||
948 | if (test_bit(ATH10K_CAC_RUNNING, &htt->ar->dev_flags)) { | ||
949 | ath10k_htt_rx_free_msdu_chain(msdu_head); | ||
950 | continue; | ||
951 | } | ||
952 | |||
962 | /* FIXME: we do not support chaining yet. | 953 | /* FIXME: we do not support chaining yet. |
963 | * this needs investigation */ | 954 | * this needs investigation */ |
964 | if (msdu_chaining) { | 955 | if (msdu_chaining) { |