diff options
Diffstat (limited to 'net/wireless/scan.c')
| -rw-r--r-- | net/wireless/scan.c | 23 | 
1 files changed, 12 insertions, 11 deletions
diff --git a/net/wireless/scan.c b/net/wireless/scan.c index 8d0e49c46db3..1b7fec3b53cd 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c @@ -694,7 +694,7 @@ static  void cfg80211_scan_req_add_chan(struct cfg80211_scan_request *request,  static bool cfg80211_find_ssid_match(struct cfg80211_colocated_ap *ap,  				     struct cfg80211_scan_request *request)  { -	u8 i; +	int i;  	u32 s_ssid;  	for (i = 0; i < request->n_ssids; i++) { @@ -726,7 +726,7 @@ static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev)  	int n_channels, count = 0, err;  	struct cfg80211_scan_request *request, *rdev_req = rdev->scan_req;  	LIST_HEAD(coloc_ap_list); -	bool need_scan_psc; +	bool need_scan_psc = true;  	const struct ieee80211_sband_iftype_data *iftd;  	rdev_req->scan_6ghz = true; @@ -770,20 +770,18 @@ static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev)  		(void *)&request->channels[n_channels];  	/* -	 * PSC channels should not be scanned if all the reported co-located APs -	 * are indicating that all APs in the same ESS are co-located +	 * PSC channels should not be scanned in case of direct scan with 1 SSID +	 * and at least one of the reported co-located APs with same SSID +	 * indicating that all APs in the same ESS are co-located  	 */ -	if (count) { -		need_scan_psc = false; - +	if (count && request->n_ssids == 1 && request->ssids[0].ssid_len) {  		list_for_each_entry(ap, &coloc_ap_list, list) { -			if (!ap->colocated_ess) { -				need_scan_psc = true; +			if (ap->colocated_ess && +			    cfg80211_find_ssid_match(ap, request)) { +				need_scan_psc = false;  				break;  			}  		} -	} else { -		need_scan_psc = true;  	}  	/* @@ -1901,6 +1899,9 @@ cfg80211_inform_single_bss_data(struct wiphy *wiphy,  	tmp.pub.beacon_interval = beacon_interval;  	tmp.pub.capability = capability;  	tmp.ts_boottime = data->boottime_ns; +	tmp.parent_tsf = data->parent_tsf; +	ether_addr_copy(tmp.parent_bssid, data->parent_bssid); +  	if (non_tx_data) {  		tmp.pub.transmitted_bss = non_tx_data->tx_bss;  		ts = bss_from_pub(non_tx_data->tx_bss)->ts;  | 
