Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 652de35e authored by Kalle Valo's avatar Kalle Valo
Browse files

ath10k: remove htt rx amsdu clear retry bit hack



With commit 0cfcefef ("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: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent c4dd0d01
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1182,6 +1182,7 @@ struct htt_rx_info {
		u32 info2;
	} rate;
	bool fcs_err;
	bool amsdu_more;
};

struct ath10k_htt {
+3 −17
Original line number Diff line number Diff line
@@ -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);
	}

+3 −0
Original line number Diff line number Diff line
@@ -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);