mac80211: calculate wstats_flags on the fly
Just to make wext.c more self-contained. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
		
							parent
							
								
									00d3f14cf9
								
							
						
					
					
						commit
						9a03d6d7a8
					
				| @ -592,7 +592,6 @@ struct ieee80211_local { | ||||
| 	int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss; | ||||
| 	unsigned int filter_flags; /* FIF_* */ | ||||
| 	struct iw_statistics wstats; | ||||
| 	u8 wstats_flags; | ||||
| 	bool tim_in_locked_section; /* see ieee80211_beacon_get() */ | ||||
| 	int tx_headroom; /* required headroom for hardware/radiotap */ | ||||
| 
 | ||||
|  | ||||
| @ -905,14 +905,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) | ||||
| 
 | ||||
| 	local->hw.conf.listen_interval = local->hw.max_listen_interval; | ||||
| 
 | ||||
| 	local->wstats_flags |= local->hw.flags & (IEEE80211_HW_SIGNAL_UNSPEC | | ||||
| 						  IEEE80211_HW_SIGNAL_DBM) ? | ||||
| 			       IW_QUAL_QUAL_UPDATED : IW_QUAL_QUAL_INVALID; | ||||
| 	local->wstats_flags |= local->hw.flags & IEEE80211_HW_NOISE_DBM ? | ||||
| 			       IW_QUAL_NOISE_UPDATED : IW_QUAL_NOISE_INVALID; | ||||
| 	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) | ||||
| 		local->wstats_flags |= IW_QUAL_DBM; | ||||
| 
 | ||||
| 	result = sta_info_start(local); | ||||
| 	if (result < 0) | ||||
| 		goto fail_sta_info; | ||||
|  | ||||
| @ -145,6 +145,21 @@ static int ieee80211_ioctl_siwgenie(struct net_device *dev, | ||||
| 	return -EOPNOTSUPP; | ||||
| } | ||||
| 
 | ||||
| static u8 ieee80211_get_wstats_flags(struct ieee80211_local *local) | ||||
| { | ||||
| 	u8 wstats_flags = 0; | ||||
| 
 | ||||
| 	wstats_flags |= local->hw.flags & (IEEE80211_HW_SIGNAL_UNSPEC | | ||||
| 					   IEEE80211_HW_SIGNAL_DBM) ? | ||||
| 				IW_QUAL_QUAL_UPDATED : IW_QUAL_QUAL_INVALID; | ||||
| 	wstats_flags |= local->hw.flags & IEEE80211_HW_NOISE_DBM ? | ||||
| 				IW_QUAL_NOISE_UPDATED : IW_QUAL_NOISE_INVALID; | ||||
| 	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) | ||||
| 		wstats_flags |= IW_QUAL_DBM; | ||||
| 
 | ||||
| 	return wstats_flags; | ||||
| } | ||||
| 
 | ||||
| static int ieee80211_ioctl_giwrange(struct net_device *dev, | ||||
| 				 struct iw_request_info *info, | ||||
| 				 struct iw_point *data, char *extra) | ||||
| @ -187,13 +202,13 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev, | ||||
| 		range->max_qual.noise = 0; | ||||
| 
 | ||||
| 	range->max_qual.qual = 100; | ||||
| 	range->max_qual.updated = local->wstats_flags; | ||||
| 	range->max_qual.updated = ieee80211_get_wstats_flags(local); | ||||
| 
 | ||||
| 	range->avg_qual.qual = 50; | ||||
| 	/* not always true but better than nothing */ | ||||
| 	range->avg_qual.level = range->max_qual.level / 2; | ||||
| 	range->avg_qual.noise = range->max_qual.noise / 2; | ||||
| 	range->avg_qual.updated = local->wstats_flags; | ||||
| 	range->avg_qual.updated = ieee80211_get_wstats_flags(local); | ||||
| 
 | ||||
| 	range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | | ||||
| 			  IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP; | ||||
| @ -979,7 +994,7 @@ static struct iw_statistics *ieee80211_get_wireless_stats(struct net_device *dev | ||||
| 		wstats->qual.level = sta->last_signal; | ||||
| 		wstats->qual.qual = sta->last_qual; | ||||
| 		wstats->qual.noise = sta->last_noise; | ||||
| 		wstats->qual.updated = local->wstats_flags; | ||||
| 		wstats->qual.updated = ieee80211_get_wstats_flags(local); | ||||
| 	} | ||||
| 
 | ||||
| 	rcu_read_unlock(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user