Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 135069
b: refs/heads/master
c: 24776cf
h: refs/heads/master
i:
  135067: 546eecf
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Mar 5, 2009
1 parent 08e8de8 commit dacb953
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e79c1ba84c68de9161d541bd2bcc8ea65c89955c
refs/heads/master: 24776cfd5559d3171054d3a7ea76d5febc54b03d
58 changes: 39 additions & 19 deletions trunk/net/mac80211/wext.c
Original file line number Diff line number Diff line change
Expand Up @@ -886,21 +886,6 @@ static int ieee80211_ioctl_siwauth(struct net_device *dev,
return ret;
}

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;
}

/* Get wireless statistics. Called by /proc/net/wireless and by SIOCGIWSTATS */
static struct iw_statistics *ieee80211_get_wireless_stats(struct net_device *dev)
{
Expand All @@ -922,10 +907,45 @@ static struct iw_statistics *ieee80211_get_wireless_stats(struct net_device *dev
wstats->qual.noise = 0;
wstats->qual.updated = IW_QUAL_ALL_INVALID;
} else {
wstats->qual.level = sta->last_signal;
wstats->qual.qual = sta->last_qual;
wstats->qual.noise = sta->last_noise;
wstats->qual.updated = ieee80211_get_wstats_flags(local);
wstats->qual.updated = 0;
/*
* mirror what cfg80211 does for iwrange/scan results,
* otherwise userspace gets confused.
*/
if (local->hw.flags & (IEEE80211_HW_SIGNAL_UNSPEC |
IEEE80211_HW_SIGNAL_DBM)) {
wstats->qual.updated |= IW_QUAL_LEVEL_UPDATED;
wstats->qual.updated |= IW_QUAL_QUAL_UPDATED;
} else {
wstats->qual.updated |= IW_QUAL_LEVEL_INVALID;
wstats->qual.updated |= IW_QUAL_QUAL_INVALID;
}

if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC) {
wstats->qual.level = sta->last_signal;
wstats->qual.qual = sta->last_signal;
} else if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) {
int sig = sta->last_signal;

wstats->qual.updated |= IW_QUAL_DBM;
wstats->qual.level = sig;
if (sig < -110)
sig = -110;
else if (sig > -40)
sig = -40;
wstats->qual.qual = sig + 110;
}

if (local->hw.flags & IEEE80211_HW_NOISE_DBM) {
/*
* This assumes that if driver reports noise, it also
* reports signal in dBm.
*/
wstats->qual.noise = sta->last_noise;
wstats->qual.updated |= IW_QUAL_NOISE_UPDATED;
} else {
wstats->qual.updated |= IW_QUAL_NOISE_INVALID;
}
}

rcu_read_unlock();
Expand Down

0 comments on commit dacb953

Please sign in to comment.