diff options
Diffstat (limited to 'net/wireless/scan.c')
| -rw-r--r-- | net/wireless/scan.c | 35 | 
1 files changed, 19 insertions, 16 deletions
diff --git a/net/wireless/scan.c b/net/wireless/scan.c index ae8c186b50d6..eeb71480f1af 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c @@ -465,10 +465,6 @@ static int cmp_bss(struct cfg80211_bss *a,  		}  	} -	/* -	 * we can't use compare_ether_addr here since we need a < > operator. -	 * The binary return value of compare_ether_addr isn't enough -	 */  	r = memcmp(a->bssid, b->bssid, sizeof(a->bssid));  	if (r)  		return r; @@ -651,6 +647,8 @@ static bool cfg80211_combine_bsses(struct cfg80211_registered_device *dev,  			continue;  		if (bss->pub.channel != new->pub.channel)  			continue; +		if (bss->pub.scan_width != new->pub.scan_width) +			continue;  		if (rcu_access_pointer(bss->pub.beacon_ies))  			continue;  		ies = rcu_access_pointer(bss->pub.ies); @@ -870,11 +868,12 @@ cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,  /* Returned bss is reference counted and must be cleaned up appropriately. */  struct cfg80211_bss* -cfg80211_inform_bss(struct wiphy *wiphy, -		    struct ieee80211_channel *channel, -		    const u8 *bssid, u64 tsf, u16 capability, -		    u16 beacon_interval, const u8 *ie, size_t ielen, -		    s32 signal, gfp_t gfp) +cfg80211_inform_bss_width(struct wiphy *wiphy, +			  struct ieee80211_channel *channel, +			  enum nl80211_bss_scan_width scan_width, +			  const u8 *bssid, u64 tsf, u16 capability, +			  u16 beacon_interval, const u8 *ie, size_t ielen, +			  s32 signal, gfp_t gfp)  {  	struct cfg80211_bss_ies *ies;  	struct cfg80211_internal_bss tmp = {}, *res; @@ -892,6 +891,7 @@ cfg80211_inform_bss(struct wiphy *wiphy,  	memcpy(tmp.pub.bssid, bssid, ETH_ALEN);  	tmp.pub.channel = channel; +	tmp.pub.scan_width = scan_width;  	tmp.pub.signal = signal;  	tmp.pub.beacon_interval = beacon_interval;  	tmp.pub.capability = capability; @@ -924,14 +924,15 @@ cfg80211_inform_bss(struct wiphy *wiphy,  	/* cfg80211_bss_update gives us a referenced result */  	return &res->pub;  } -EXPORT_SYMBOL(cfg80211_inform_bss); +EXPORT_SYMBOL(cfg80211_inform_bss_width);  /* Returned bss is reference counted and must be cleaned up appropriately. */  struct cfg80211_bss * -cfg80211_inform_bss_frame(struct wiphy *wiphy, -			  struct ieee80211_channel *channel, -			  struct ieee80211_mgmt *mgmt, size_t len, -			  s32 signal, gfp_t gfp) +cfg80211_inform_bss_width_frame(struct wiphy *wiphy, +				struct ieee80211_channel *channel, +				enum nl80211_bss_scan_width scan_width, +				struct ieee80211_mgmt *mgmt, size_t len, +				s32 signal, gfp_t gfp)  {  	struct cfg80211_internal_bss tmp = {}, *res;  	struct cfg80211_bss_ies *ies; @@ -941,7 +942,8 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,  	BUILD_BUG_ON(offsetof(struct ieee80211_mgmt, u.probe_resp.variable) !=  			offsetof(struct ieee80211_mgmt, u.beacon.variable)); -	trace_cfg80211_inform_bss_frame(wiphy, channel, mgmt, len, signal); +	trace_cfg80211_inform_bss_width_frame(wiphy, channel, scan_width, mgmt, +					      len, signal);  	if (WARN_ON(!mgmt))  		return NULL; @@ -976,6 +978,7 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,  	memcpy(tmp.pub.bssid, mgmt->bssid, ETH_ALEN);  	tmp.pub.channel = channel; +	tmp.pub.scan_width = scan_width;  	tmp.pub.signal = signal;  	tmp.pub.beacon_interval = le16_to_cpu(mgmt->u.probe_resp.beacon_int);  	tmp.pub.capability = le16_to_cpu(mgmt->u.probe_resp.capab_info); @@ -991,7 +994,7 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,  	/* cfg80211_bss_update gives us a referenced result */  	return &res->pub;  } -EXPORT_SYMBOL(cfg80211_inform_bss_frame); +EXPORT_SYMBOL(cfg80211_inform_bss_width_frame);  void cfg80211_ref_bss(struct wiphy *wiphy, struct cfg80211_bss *pub)  {  | 
