Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a03d6d7 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

mac80211: calculate wstats_flags on the fly



Just to make wext.c more self-contained.

Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 00d3f14c
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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 */

+0 −8
Original line number Diff line number Diff line
@@ -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;
+18 −3
Original line number Diff line number Diff line
@@ -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();