diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-02-18 12:27:22 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-02-27 14:52:40 -0500 |
commit | a77b855245541823b49999a27245ad7428879096 (patch) | |
tree | 29e80ea3f90a22309b55ea1823eda5700ebc4b49 /net/mac80211/wext.c | |
parent | cb3a8eec0e66edfe8db7d3b3bf19d25745bae3c3 (diff) |
cfg80211/mac80211: fill qual.qual value/adjust max_qual.qual
Due to various bugs in the software stack we end up having
to fill qual.qual; level should be used, but wpa_supplicant
doesn't properly ignore qual.qual, NM should use qual.level
regardless of that because qual.qual is 0 but doesn't handle
IW_QUAL_DBM right now.
So fill qual.qual with the qual.level value clamped to
-110..-40 dBm or just the regular 'unspecified' signal level.
This requires a mac80211 change to properly announce the
max_qual.qual and avg_qual.qual values.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/wext.c')
-rw-r--r-- | net/mac80211/wext.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c index 8a76a979bc92..a8d4b6171916 100644 --- a/net/mac80211/wext.c +++ b/net/mac80211/wext.c | |||
@@ -200,10 +200,24 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev, | |||
200 | else | 200 | else |
201 | range->max_qual.noise = 0; | 201 | range->max_qual.noise = 0; |
202 | 202 | ||
203 | range->max_qual.qual = 100; | ||
204 | range->max_qual.updated = ieee80211_get_wstats_flags(local); | 203 | range->max_qual.updated = ieee80211_get_wstats_flags(local); |
205 | 204 | ||
206 | range->avg_qual.qual = 50; | 205 | if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) { |
206 | /* | ||
207 | * cfg80211 assumes -110 to -40 dBm and clamps to that range | ||
208 | * for qual.qual, so tell userspace this is what we give it | ||
209 | * but take into account that we have to start from 0. | ||
210 | */ | ||
211 | range->max_qual.qual = 70; | ||
212 | range->avg_qual.qual = 35; | ||
213 | } else { | ||
214 | /* | ||
215 | * cfg80211 just uses the level value for qual too, and it | ||
216 | * requires the level value to be 0 .. 100. | ||
217 | */ | ||
218 | range->max_qual.qual = 100; | ||
219 | range->avg_qual.qual = 50; | ||
220 | } | ||
207 | /* not always true but better than nothing */ | 221 | /* not always true but better than nothing */ |
208 | range->avg_qual.level = range->max_qual.level / 2; | 222 | range->avg_qual.level = range->max_qual.level / 2; |
209 | range->avg_qual.noise = range->max_qual.noise / 2; | 223 | range->avg_qual.noise = range->max_qual.noise / 2; |