diff options
Diffstat (limited to 'net/mac80211/wext.c')
-rw-r--r-- | net/mac80211/wext.c | 69 |
1 files changed, 1 insertions, 68 deletions
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c index 244d830f5cfb..5acb8140ee58 100644 --- a/net/mac80211/wext.c +++ b/net/mac80211/wext.c | |||
@@ -165,73 +165,6 @@ static int ieee80211_ioctl_giwap(struct net_device *dev, | |||
165 | } | 165 | } |
166 | 166 | ||
167 | 167 | ||
168 | /* Get wireless statistics. Called by /proc/net/wireless and by SIOCGIWSTATS */ | ||
169 | static struct iw_statistics *ieee80211_get_wireless_stats(struct net_device *dev) | ||
170 | { | ||
171 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); | ||
172 | struct iw_statistics *wstats = &local->wstats; | ||
173 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); | ||
174 | struct sta_info *sta = NULL; | ||
175 | |||
176 | rcu_read_lock(); | ||
177 | |||
178 | if (sdata->vif.type == NL80211_IFTYPE_STATION) | ||
179 | sta = sta_info_get(local, sdata->u.mgd.bssid); | ||
180 | |||
181 | if (!sta) { | ||
182 | wstats->discard.fragment = 0; | ||
183 | wstats->discard.misc = 0; | ||
184 | wstats->qual.qual = 0; | ||
185 | wstats->qual.level = 0; | ||
186 | wstats->qual.noise = 0; | ||
187 | wstats->qual.updated = IW_QUAL_ALL_INVALID; | ||
188 | } else { | ||
189 | wstats->qual.updated = 0; | ||
190 | /* | ||
191 | * mirror what cfg80211 does for iwrange/scan results, | ||
192 | * otherwise userspace gets confused. | ||
193 | */ | ||
194 | if (local->hw.flags & (IEEE80211_HW_SIGNAL_UNSPEC | | ||
195 | IEEE80211_HW_SIGNAL_DBM)) { | ||
196 | wstats->qual.updated |= IW_QUAL_LEVEL_UPDATED; | ||
197 | wstats->qual.updated |= IW_QUAL_QUAL_UPDATED; | ||
198 | } else { | ||
199 | wstats->qual.updated |= IW_QUAL_LEVEL_INVALID; | ||
200 | wstats->qual.updated |= IW_QUAL_QUAL_INVALID; | ||
201 | } | ||
202 | |||
203 | if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC) { | ||
204 | wstats->qual.level = sta->last_signal; | ||
205 | wstats->qual.qual = sta->last_signal; | ||
206 | } else if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) { | ||
207 | int sig = sta->last_signal; | ||
208 | |||
209 | wstats->qual.updated |= IW_QUAL_DBM; | ||
210 | wstats->qual.level = sig; | ||
211 | if (sig < -110) | ||
212 | sig = -110; | ||
213 | else if (sig > -40) | ||
214 | sig = -40; | ||
215 | wstats->qual.qual = sig + 110; | ||
216 | } | ||
217 | |||
218 | if (local->hw.flags & IEEE80211_HW_NOISE_DBM) { | ||
219 | /* | ||
220 | * This assumes that if driver reports noise, it also | ||
221 | * reports signal in dBm. | ||
222 | */ | ||
223 | wstats->qual.noise = sta->last_noise; | ||
224 | wstats->qual.updated |= IW_QUAL_NOISE_UPDATED; | ||
225 | } else { | ||
226 | wstats->qual.updated |= IW_QUAL_NOISE_INVALID; | ||
227 | } | ||
228 | } | ||
229 | |||
230 | rcu_read_unlock(); | ||
231 | |||
232 | return wstats; | ||
233 | } | ||
234 | |||
235 | /* Structures to export the Wireless Handlers */ | 168 | /* Structures to export the Wireless Handlers */ |
236 | 169 | ||
237 | static const iw_handler ieee80211_handler[] = | 170 | static const iw_handler ieee80211_handler[] = |
@@ -298,5 +231,5 @@ const struct iw_handler_def ieee80211_iw_handler_def = | |||
298 | { | 231 | { |
299 | .num_standard = ARRAY_SIZE(ieee80211_handler), | 232 | .num_standard = ARRAY_SIZE(ieee80211_handler), |
300 | .standard = (iw_handler *) ieee80211_handler, | 233 | .standard = (iw_handler *) ieee80211_handler, |
301 | .get_wireless_stats = ieee80211_get_wireless_stats, | 234 | .get_wireless_stats = cfg80211_wireless_stats, |
302 | }; | 235 | }; |