Search Linux Wireless

Re: [PATCH] ath9k_htc: update RSSI values only when the device is associated

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2012-11-09 6:09 PM, Bernhard Urban wrote:
> add an if-guard, otherwise iw(8) reports weird signal strengths.
> 
> The behaviour was fine before this commit:
> 7c277349ecbd66e19fad3d949fa6ef6c131a3b62
> This patch is therefore a partially revert of it.
> 
> Tested with "TP-Link TL-WN722N"
> 
> Thanks to indoo.rs http://indoo.rs/ for sponsoring
> 
> Reported-by: Markus Krainz <markus@xxxxxxxx>
> Tested-by: Markus Krainz <markus@xxxxxxxx>
> Signed-off-by: Bernhard Urban <lewurm@xxxxxxxxx>
> ---
>  drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |   27 ++++++++++++++-----------
>  1 file changed, 15 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
> index 47e61d0..d0d329c 100644
> --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
> +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
> @@ -1060,22 +1060,25 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
>  	ath9k_process_rate(hw, rx_status, rxbuf->rxstatus.rs_rate,
>  			   rxbuf->rxstatus.rs_flags);
>  
> -	if (rxbuf->rxstatus.rs_rssi != ATH9K_RSSI_BAD &&
> -	    !rxbuf->rxstatus.rs_moreaggr)
> -		ATH_RSSI_LPF(priv->rx.last_rssi,
> -			     rxbuf->rxstatus.rs_rssi);
> +	if (priv->num_sta_assoc_vif != 0) {
> +		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;
> +		last_rssi = priv->rx.last_rssi;
>  
> -	if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
> -		rxbuf->rxstatus.rs_rssi = ATH_EP_RND(last_rssi,
> -						     ATH_RSSI_EP_MULTIPLIER);
> +		if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) {
> +			s8 rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
> +			rxbuf->rxstatus.rs_rssi = rssi;
> +		}
>  
> -	if (rxbuf->rxstatus.rs_rssi < 0)
> -		rxbuf->rxstatus.rs_rssi = 0;
> +		if (rxbuf->rxstatus.rs_rssi < 0)
> +			rxbuf->rxstatus.rs_rssi = 0;
>  
> -	if (ieee80211_is_beacon(fc))
> -		priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi;
> +		if (ieee80211_is_beacon(fc))
> +			priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi;
> +	}
>  
>  	rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp);
>  	rx_status->band = hw->conf.channel->band;
> 
Please check how RSSI is handled in ath9k, and use that as reference.
The per-packet RSSI should not be set from some internal average, it
should contain the real RSSI value of the packet. This change disables
RSSI reporting for anything but station mode, which is not a good idea.

- Felix
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux