diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/recv.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/recv.c | 17 | 
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index 669734252664..fb4ba27d92b7 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c @@ -867,10 +867,21 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,  	 * can be dropped.  	 */  	if (rx_stats->rs_status & ATH9K_RXERR_PHY) { -		ath9k_dfs_process_phyerr(sc, hdr, rx_stats, rx_status->mactime); -		if (ath_cmn_process_fft(&sc->spec_priv, hdr, rx_stats, rx_status->mactime)) +		/* +		 * DFS and spectral are mutually exclusive +		 * +		 * Since some chips use PHYERR_RADAR as indication for both, we +		 * need to double check which feature is enabled to prevent +		 * feeding spectral or dfs-detector with wrong frames. +		 */ +		if (hw->conf.radar_enabled) { +			ath9k_dfs_process_phyerr(sc, hdr, rx_stats, +						 rx_status->mactime); +		} else if (sc->spec_priv.spectral_mode != SPECTRAL_DISABLED && +			   ath_cmn_process_fft(&sc->spec_priv, hdr, rx_stats, +					       rx_status->mactime)) {  			RX_STAT_INC(rx_spectral); - +		}  		return -EINVAL;  	}  |