aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ieee80211/ieee80211_rx.c2
-rw-r--r--net/mac80211/debugfs_sta.c2
-rw-r--r--net/mac80211/ieee80211_i.h2
-rw-r--r--net/mac80211/main.c10
-rw-r--r--net/mac80211/mlme.c12
-rw-r--r--net/mac80211/rx.c4
-rw-r--r--net/mac80211/sta_info.h2
-rw-r--r--net/mac80211/wext.c28
8 files changed, 37 insertions, 25 deletions
diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c
index 200ee1e63728..69dbc342a464 100644
--- a/net/ieee80211/ieee80211_rx.c
+++ b/net/ieee80211/ieee80211_rx.c
@@ -391,7 +391,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
391 391
392 wstats.updated = 0; 392 wstats.updated = 0;
393 if (rx_stats->mask & IEEE80211_STATMASK_RSSI) { 393 if (rx_stats->mask & IEEE80211_STATMASK_RSSI) {
394 wstats.level = rx_stats->rssi; 394 wstats.level = rx_stats->signal;
395 wstats.updated |= IW_QUAL_LEVEL_UPDATED; 395 wstats.updated |= IW_QUAL_LEVEL_UPDATED;
396 } else 396 } else
397 wstats.updated |= IW_QUAL_LEVEL_INVALID; 397 wstats.updated |= IW_QUAL_LEVEL_INVALID;
diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c
index 1f00273d99c2..a2cc0284c9d0 100644
--- a/net/mac80211/debugfs_sta.c
+++ b/net/mac80211/debugfs_sta.c
@@ -63,8 +63,8 @@ STA_FILE(tx_fragments, tx_fragments, LU);
63STA_FILE(tx_filtered, tx_filtered_count, LU); 63STA_FILE(tx_filtered, tx_filtered_count, LU);
64STA_FILE(tx_retry_failed, tx_retry_failed, LU); 64STA_FILE(tx_retry_failed, tx_retry_failed, LU);
65STA_FILE(tx_retry_count, tx_retry_count, LU); 65STA_FILE(tx_retry_count, tx_retry_count, LU);
66STA_FILE(last_rssi, last_rssi, D);
67STA_FILE(last_signal, last_signal, D); 66STA_FILE(last_signal, last_signal, D);
67STA_FILE(last_qual, last_qual, D);
68STA_FILE(last_noise, last_noise, D); 68STA_FILE(last_noise, last_noise, D);
69STA_FILE(channel_use, channel_use, D); 69STA_FILE(channel_use, channel_use, D);
70STA_FILE(wep_weak_iv_count, wep_weak_iv_count, LU); 70STA_FILE(wep_weak_iv_count, wep_weak_iv_count, LU);
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 173b7fcb3029..ed0d9b35ae6f 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -82,7 +82,7 @@ struct ieee80211_sta_bss {
82 u16 capability; /* host byte order */ 82 u16 capability; /* host byte order */
83 enum ieee80211_band band; 83 enum ieee80211_band band;
84 int freq; 84 int freq;
85 int rssi, signal, noise; 85 int signal, noise, qual;
86 u8 *wpa_ie; 86 u8 *wpa_ie;
87 size_t wpa_ie_len; 87 size_t wpa_ie_len;
88 u8 *rsn_ie; 88 u8 *rsn_ie;
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index f277407f0f5a..390df48dfd40 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -1702,13 +1702,13 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
1702 1702
1703 local->hw.conf.beacon_int = 1000; 1703 local->hw.conf.beacon_int = 1000;
1704 1704
1705 local->wstats_flags |= local->hw.max_rssi ? 1705 local->wstats_flags |= local->hw.flags & (IEEE80211_HW_SIGNAL_UNSPEC |
1706 IW_QUAL_LEVEL_UPDATED : IW_QUAL_LEVEL_INVALID; 1706 IEEE80211_HW_SIGNAL_DB |
1707 local->wstats_flags |= local->hw.max_signal ? 1707 IEEE80211_HW_SIGNAL_DBM) ?
1708 IW_QUAL_QUAL_UPDATED : IW_QUAL_QUAL_INVALID; 1708 IW_QUAL_QUAL_UPDATED : IW_QUAL_QUAL_INVALID;
1709 local->wstats_flags |= local->hw.max_noise ? 1709 local->wstats_flags |= local->hw.flags & IEEE80211_HW_NOISE_DBM ?
1710 IW_QUAL_NOISE_UPDATED : IW_QUAL_NOISE_INVALID; 1710 IW_QUAL_NOISE_UPDATED : IW_QUAL_NOISE_INVALID;
1711 if (local->hw.max_rssi < 0 || local->hw.max_noise < 0) 1711 if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
1712 local->wstats_flags |= IW_QUAL_DBM; 1712 local->wstats_flags |= IW_QUAL_DBM;
1713 1713
1714 result = sta_info_start(local); 1714 result = sta_info_start(local);
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 6c4b27be35da..dda30e98aa1e 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1959,8 +1959,8 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
1959 local->hw.conf.channel->center_freq, 1959 local->hw.conf.channel->center_freq,
1960 ifsta->ssid, ifsta->ssid_len); 1960 ifsta->ssid, ifsta->ssid_len);
1961 if (bss) { 1961 if (bss) {
1962 sta->last_rssi = bss->rssi;
1963 sta->last_signal = bss->signal; 1962 sta->last_signal = bss->signal;
1963 sta->last_qual = bss->qual;
1964 sta->last_noise = bss->noise; 1964 sta->last_noise = bss->noise;
1965 ieee80211_rx_bss_put(dev, bss); 1965 ieee80211_rx_bss_put(dev, bss);
1966 } 1966 }
@@ -2629,9 +2629,9 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
2629 2629
2630 bss->timestamp = beacon_timestamp; 2630 bss->timestamp = beacon_timestamp;
2631 bss->last_update = jiffies; 2631 bss->last_update = jiffies;
2632 bss->rssi = rx_status->ssi;
2633 bss->signal = rx_status->signal; 2632 bss->signal = rx_status->signal;
2634 bss->noise = rx_status->noise; 2633 bss->noise = rx_status->noise;
2634 bss->qual = rx_status->qual;
2635 if (!beacon && !bss->probe_resp) 2635 if (!beacon && !bss->probe_resp)
2636 bss->probe_resp = true; 2636 bss->probe_resp = true;
2637 2637
@@ -3427,9 +3427,9 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
3427 !ieee80211_sta_match_ssid(ifsta, bss->ssid, bss->ssid_len)) 3427 !ieee80211_sta_match_ssid(ifsta, bss->ssid, bss->ssid_len))
3428 continue; 3428 continue;
3429 3429
3430 if (!selected || top_rssi < bss->rssi) { 3430 if (!selected || top_rssi < bss->signal) {
3431 selected = bss; 3431 selected = bss;
3432 top_rssi = bss->rssi; 3432 top_rssi = bss->signal;
3433 } 3433 }
3434 } 3434 }
3435 if (selected) 3435 if (selected)
@@ -4060,8 +4060,8 @@ ieee80211_sta_scan_result(struct net_device *dev,
4060 4060
4061 memset(&iwe, 0, sizeof(iwe)); 4061 memset(&iwe, 0, sizeof(iwe));
4062 iwe.cmd = IWEVQUAL; 4062 iwe.cmd = IWEVQUAL;
4063 iwe.u.qual.qual = bss->signal; 4063 iwe.u.qual.qual = bss->qual;
4064 iwe.u.qual.level = bss->rssi; 4064 iwe.u.qual.level = bss->signal;
4065 iwe.u.qual.noise = bss->noise; 4065 iwe.u.qual.noise = bss->noise;
4066 iwe.u.qual.updated = local->wstats_flags; 4066 iwe.u.qual.updated = local->wstats_flags;
4067 current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, 4067 current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index b399e09ec7aa..474f13662c84 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -209,7 +209,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
209 cpu_to_le16(IEEE80211_CHAN_DYN | 209 cpu_to_le16(IEEE80211_CHAN_DYN |
210 IEEE80211_CHAN_2GHZ); 210 IEEE80211_CHAN_2GHZ);
211 211
212 rtfixed->antsignal = status->ssi; 212 rtfixed->antsignal = status->signal;
213 rthdr->it_len = cpu_to_le16(rtap_len); 213 rthdr->it_len = cpu_to_le16(rtap_len);
214 } 214 }
215 215
@@ -719,8 +719,8 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
719 719
720 sta->rx_fragments++; 720 sta->rx_fragments++;
721 sta->rx_bytes += rx->skb->len; 721 sta->rx_bytes += rx->skb->len;
722 sta->last_rssi = rx->status->ssi;
723 sta->last_signal = rx->status->signal; 722 sta->last_signal = rx->status->signal;
723 sta->last_qual = rx->status->qual;
724 sta->last_noise = rx->status->noise; 724 sta->last_noise = rx->status->noise;
725 725
726 if (!(rx->fc & IEEE80211_FCTL_MOREFRAGS)) { 726 if (!(rx->fc & IEEE80211_FCTL_MOREFRAGS)) {
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 97a61c39ad90..e89cc1655547 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -216,8 +216,8 @@ struct sta_info {
216 * from this STA */ 216 * from this STA */
217 unsigned long rx_fragments; /* number of received MPDUs */ 217 unsigned long rx_fragments; /* number of received MPDUs */
218 unsigned long rx_dropped; /* number of dropped MPDUs from this STA */ 218 unsigned long rx_dropped; /* number of dropped MPDUs from this STA */
219 int last_rssi; /* RSSI of last received frame from this STA */
220 int last_signal; /* signal of last received frame from this STA */ 219 int last_signal; /* signal of last received frame from this STA */
220 int last_qual; /* qual of last received frame from this STA */
221 int last_noise; /* noise of last received frame from this STA */ 221 int last_noise; /* noise of last received frame from this STA */
222 /* last received seq/frag number from this STA (per RX queue) */ 222 /* last received seq/frag number from this STA (per RX queue) */
223 __le16 last_seq_ctrl[NUM_RX_DATA_QUEUES]; 223 __le16 last_seq_ctrl[NUM_RX_DATA_QUEUES];
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
index 76e1de1dc735..6a342a9a40cd 100644
--- a/net/mac80211/wext.c
+++ b/net/mac80211/wext.c
@@ -169,14 +169,26 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev,
169 range->num_encoding_sizes = 2; 169 range->num_encoding_sizes = 2;
170 range->max_encoding_tokens = NUM_DEFAULT_KEYS; 170 range->max_encoding_tokens = NUM_DEFAULT_KEYS;
171 171
172 range->max_qual.qual = local->hw.max_signal; 172 if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC ||
173 range->max_qual.level = local->hw.max_rssi; 173 local->hw.flags & IEEE80211_HW_SIGNAL_DB)
174 range->max_qual.noise = local->hw.max_noise; 174 range->max_qual.level = local->hw.max_signal;
175 else if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
176 range->max_qual.level = -110;
177 else
178 range->max_qual.level = 0;
179
180 if (local->hw.flags & IEEE80211_HW_NOISE_DBM)
181 range->max_qual.noise = -110;
182 else
183 range->max_qual.noise = 0;
184
185 range->max_qual.qual = 100;
175 range->max_qual.updated = local->wstats_flags; 186 range->max_qual.updated = local->wstats_flags;
176 187
177 range->avg_qual.qual = local->hw.max_signal/2; 188 range->avg_qual.qual = 50;
178 range->avg_qual.level = 0; 189 /* not always true but better than nothing */
179 range->avg_qual.noise = 0; 190 range->avg_qual.level = range->max_qual.level / 2;
191 range->avg_qual.noise = range->max_qual.noise / 2;
180 range->avg_qual.updated = local->wstats_flags; 192 range->avg_qual.updated = local->wstats_flags;
181 193
182 range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | 194 range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
@@ -996,8 +1008,8 @@ static struct iw_statistics *ieee80211_get_wireless_stats(struct net_device *dev
996 wstats->qual.noise = 0; 1008 wstats->qual.noise = 0;
997 wstats->qual.updated = IW_QUAL_ALL_INVALID; 1009 wstats->qual.updated = IW_QUAL_ALL_INVALID;
998 } else { 1010 } else {
999 wstats->qual.level = sta->last_rssi; 1011 wstats->qual.level = sta->last_signal;
1000 wstats->qual.qual = sta->last_signal; 1012 wstats->qual.qual = sta->last_qual;
1001 wstats->qual.noise = sta->last_noise; 1013 wstats->qual.noise = sta->last_noise;
1002 wstats->qual.updated = local->wstats_flags; 1014 wstats->qual.updated = local->wstats_flags;
1003 } 1015 }