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

Commit 22569400 authored by Janusz Dziedzic's avatar Janusz Dziedzic Committed by Kalle Valo
Browse files

ath10k: handle TKIP MIC error correctly



We should check MIC error flag base on
rx_attention, to have consistent status
of MIC failure and FCS error.

Signed-off-by: default avatarJanusz Dziedzic <janusz.dziedzic@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 2b6a6a90
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1183,6 +1183,7 @@ struct htt_rx_info {
	} rate;
	bool fcs_err;
	bool amsdu_more;
	bool mic_err;
};

struct ath10k_htt {
+15 −0
Original line number Diff line number Diff line
@@ -838,6 +838,20 @@ static bool ath10k_htt_rx_has_fcs_err(struct sk_buff *skb)
	return false;
}

static bool ath10k_htt_rx_has_mic_err(struct sk_buff *skb)
{
	struct htt_rx_desc *rxd;
	u32 flags;

	rxd = (void *)skb->data - sizeof(*rxd);
	flags = __le32_to_cpu(rxd->attention.flags);

	if (flags & RX_ATTENTION_FLAGS_TKIP_MIC_ERR)
		return true;

	return false;
}

static int ath10k_htt_rx_get_csum_state(struct sk_buff *skb)
{
	struct htt_rx_desc *rxd;
@@ -960,6 +974,7 @@ static void ath10k_htt_rx_handler(struct ath10k_htt *htt,

			info.skb     = msdu_head;
			info.fcs_err = ath10k_htt_rx_has_fcs_err(msdu_head);
			info.mic_err = ath10k_htt_rx_has_mic_err(msdu_head);
			info.signal  = ATH10K_DEFAULT_NOISE_FLOOR;
			info.signal += rx->ppdu.combined_rssi;

+1 −1
Original line number Diff line number Diff line
@@ -231,7 +231,7 @@ void ath10k_process_rx(struct ath10k *ar, struct htt_rx_info *info)
				~IEEE80211_FCTL_PROTECTED);
	}

	if (info->status == HTT_RX_IND_MPDU_STATUS_TKIP_MIC_ERR)
	if (info->mic_err)
		status->flag |= RX_FLAG_MMIC_ERROR;

	if (info->fcs_err)