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

Commit 41881354 authored by Mathy Vanhoef's avatar Mathy Vanhoef Committed by John W. Linville
Browse files

ath5k: support for FIF_FCSFAIL filter



When the FIF_FCSFAIL filter flag is set, pass frames with CRC errors.

Signed-off-by: default avatarMathy Vanhoef <vanhoefm@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent c64800e7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1285,6 +1285,7 @@ struct ath5k_hw {
#define ATH_STAT_STARTED	3		/* opened & irqs enabled */

	unsigned int		filter_flags;	/* HW flags, AR5K_RX_FILTER_* */
	unsigned int		fif_filter_flags; /* Current FIF_* filter flags */
	struct ieee80211_channel *curchan;	/* current h/w channel */

	u16			nvifs;
+14 −2
Original line number Diff line number Diff line
@@ -1382,6 +1382,9 @@ ath5k_receive_frame(struct ath5k_hw *ah, struct sk_buff *skb,
	rxs->flag = 0;
	if (unlikely(rs->rs_status & AR5K_RXERR_MIC))
		rxs->flag |= RX_FLAG_MMIC_ERROR;
	if (unlikely(rs->rs_status & AR5K_RXERR_CRC))
		rxs->flag |= RX_FLAG_FAILED_FCS_CRC;


	/*
	 * always extend the mac timestamp, since this information is
@@ -1449,6 +1452,8 @@ ath5k_receive_frame_ok(struct ath5k_hw *ah, struct ath5k_rx_status *rs)
	ah->stats.rx_bytes_count += rs->rs_datalen;

	if (unlikely(rs->rs_status)) {
		unsigned int filters;

		if (rs->rs_status & AR5K_RXERR_CRC)
			ah->stats.rxerr_crc++;
		if (rs->rs_status & AR5K_RXERR_FIFO)
@@ -1480,8 +1485,15 @@ ath5k_receive_frame_ok(struct ath5k_hw *ah, struct ath5k_rx_status *rs)
			return true;
		}

		/* reject any frames with non-crypto errors */
		if (rs->rs_status & ~(AR5K_RXERR_DECRYPT))
		/*
		 * Reject any frames with non-crypto errors, and take into account the
		 * current FIF_* filters.
		 */
		filters = AR5K_RXERR_DECRYPT;
		if (ah->fif_filter_flags & FIF_FCSFAIL)
			filters |= AR5K_RXERR_CRC;

		if (rs->rs_status & ~filters)
			return false;
	}

+2 −0
Original line number Diff line number Diff line
@@ -473,6 +473,8 @@ ath5k_configure_filter(struct ieee80211_hw *hw, unsigned int changed_flags,
	/* Set the cached hw filter flags, this will later actually
	 * be set in HW */
	ah->filter_flags = rfilt;
	/* Store current FIF filter flags */
	ah->fif_filter_flags = *new_flags;

	mutex_unlock(&ah->lock);
}