diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/stats.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/stats.c | 14 | 
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/wireless/rtlwifi/stats.c b/drivers/net/wireless/rtlwifi/stats.c index 8ed31744a05..4f083fc1d36 100644 --- a/drivers/net/wireless/rtlwifi/stats.c +++ b/drivers/net/wireless/rtlwifi/stats.c @@ -176,6 +176,7 @@ static void rtl_process_pwdb(struct ieee80211_hw *hw, struct rtl_stats *pstatus)  	struct rtl_sta_info *drv_priv = NULL;  	struct ieee80211_sta *sta = NULL;  	long undec_sm_pwdb; +	long undec_sm_cck;  	rcu_read_lock();  	if (rtlpriv->mac80211.opmode != NL80211_IFTYPE_STATION) @@ -185,12 +186,16 @@ static void rtl_process_pwdb(struct ieee80211_hw *hw, struct rtl_stats *pstatus)  	if (sta) {  		drv_priv = (struct rtl_sta_info *) sta->drv_priv;  		undec_sm_pwdb = drv_priv->rssi_stat.undec_sm_pwdb; +		undec_sm_cck = drv_priv->rssi_stat.undec_sm_cck;  	} else {  		undec_sm_pwdb = rtlpriv->dm.undec_sm_pwdb; +		undec_sm_cck = rtlpriv->dm.undec_sm_cck;  	}  	if (undec_sm_pwdb < 0)  		undec_sm_pwdb = pstatus->rx_pwdb_all; +	if (undec_sm_cck < 0) +		undec_sm_cck = pstatus->rx_pwdb_all;  	if (pstatus->rx_pwdb_all > (u32) undec_sm_pwdb) {  		undec_sm_pwdb = (((undec_sm_pwdb) *  		      (RX_SMOOTH_FACTOR - 1)) + @@ -200,6 +205,15 @@ static void rtl_process_pwdb(struct ieee80211_hw *hw, struct rtl_stats *pstatus)  		undec_sm_pwdb = (((undec_sm_pwdb) * (RX_SMOOTH_FACTOR - 1)) +  		     (pstatus->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);  	} +	if (pstatus->rx_pwdb_all > (u32) undec_sm_cck) { +		undec_sm_cck = (((undec_sm_pwdb) * +		      (RX_SMOOTH_FACTOR - 1)) + +		     (pstatus->rx_pwdb_all)) / (RX_SMOOTH_FACTOR); +		undec_sm_cck = undec_sm_cck + 1; +	} else { +		undec_sm_pwdb = (((undec_sm_cck) * (RX_SMOOTH_FACTOR - 1)) + +		     (pstatus->rx_pwdb_all)) / (RX_SMOOTH_FACTOR); +	}  	if (sta) {  		drv_priv->rssi_stat.undec_sm_pwdb = undec_sm_pwdb;  | 
