ath9k-devel.lists.ath9k.org archive mirror
 help / color / mirror / Atom feed
* [ath9k-devel] [PATCH] ath9k_htc: partial revert of e5ba18c6901631237c49ec54ce54397369dea7fa
@ 2016-10-25 10:28 Robert Millan
  0 siblings, 0 replies; only message in thread
From: Robert Millan @ 2016-10-25 10:28 UTC (permalink / raw)
  To: ath9k-devel

A regression introduced by e5ba18c6901631237c49ec54ce54397369dea7fa
caused loss of signal power information when using Atheros AR9271
chips in monitor mode.

Fix this by a partial revert of the aforementioned commit until root
cause is found.

Signed-off-by: Robert Millan <robert.millan@beabloo.com>
---
 drivers/net/wireless/ath/ath9k/htc.h          |  1 +
 drivers/net/wireless/ath/ath9k/htc_drv_init.c |  1 -
 drivers/net/wireless/ath/ath9k/htc_drv_main.c |  1 -
 drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 21 +++++++++++++++++++--
 4 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
index 16dff4b..c4a9fca 100644
--- a/drivers/net/wireless/ath/ath9k/htc.h
+++ b/drivers/net/wireless/ath/ath9k/htc.h
@@ -279,6 +279,7 @@ struct ath9k_htc_rxbuf {
 };
 
 struct ath9k_htc_rx {
+	int last_rssi; /* FIXME: per-STA */
 	struct list_head rxbuf;
 	spinlock_t rxbuflock;
 };
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index b65c1b6..1052eb6 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -593,7 +593,6 @@ static void ath9k_init_misc(struct ath9k_htc_priv *priv)
 
 	memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
 
-	common->last_rssi = ATH_RSSI_DUMMY_MARKER;
 	priv->ah->opmode = NL80211_IFTYPE_STATION;
 
 	priv->spec_priv.ah = priv->ah;
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index a553c91..ff22882 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -1489,7 +1489,6 @@ static void ath9k_htc_bss_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
 
 	if ((vif->type == NL80211_IFTYPE_STATION) && bss_conf->assoc) {
 		common->curaid = bss_conf->aid;
-		common->last_rssi = ATH_RSSI_DUMMY_MARKER;
 		memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
 		set_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags);
 	}
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
index cea7a63..3c4f9df 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
@@ -924,6 +924,7 @@ void ath9k_host_rx_init(struct ath9k_htc_priv *priv)
 	ath9k_hw_rxena(priv->ah);
 	ath9k_htc_opmode_init(priv);
 	ath9k_hw_startpcureceive(priv->ah, test_bit(ATH_OP_SCANNING, &common->op_flags));
+	priv->rx.last_rssi = ATH_RSSI_DUMMY_MARKER;
 }
 
 static inline void convert_htc_flag(struct ath_rx_status *rx_stats,
@@ -972,6 +973,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
 	struct ath_htc_rx_status *rxstatus;
 	struct ath_rx_status rx_stats;
 	bool decrypt_error = false;
+	int last_rssi = ATH_RSSI_DUMMY_MARKER;
 
 	if (skb->len < HTC_RX_FRAME_HEADER_SIZE) {
 		ath_err(common, "Corrupted RX frame, dropping (len: %d)\n",
@@ -1029,8 +1031,23 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
 	if (ath9k_cmn_process_rate(common, hw, &rx_stats, rx_status))
 		goto rx_next;
 
-	rx_stats.is_mybeacon = ath_is_mybeacon(common, hdr);
-	ath9k_cmn_process_rssi(common, hw, &rx_stats, rx_status);
+	if (rxbuf->rxstatus.rs_rssi != ATH9K_RSSI_BAD &&
+	    !rxbuf->rxstatus.rs_moreaggr)
+	  ATH_RSSI_LPF(priv->rx.last_rssi,
+		       rxbuf->rxstatus.rs_rssi);
+	last_rssi = priv->rx.last_rssi;
+
+	if (ath_is_mybeacon(common, hdr)) {
+		s8 rssi = rxbuf->rxstatus.rs_rssi;
+
+		if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
+			rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
+
+		if (rssi < 0)
+			rssi = 0;
+
+		priv->ah->stats.avgbrssi = rssi;
+	}
 
 	rx_status->band = ah->curchan->chan->band;
 	rx_status->freq = ah->curchan->chan->center_freq;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-10-25 10:28 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-25 10:28 [ath9k-devel] [PATCH] ath9k_htc: partial revert of e5ba18c6901631237c49ec54ce54397369dea7fa Robert Millan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).