diff options
Diffstat (limited to 'drivers/net/wireless/ti/wlcore/scan.c')
| -rw-r--r-- | drivers/net/wireless/ti/wlcore/scan.c | 57 | 
1 files changed, 38 insertions, 19 deletions
diff --git a/drivers/net/wireless/ti/wlcore/scan.c b/drivers/net/wireless/ti/wlcore/scan.c index f407101e525..1e3d51cd673 100644 --- a/drivers/net/wireless/ti/wlcore/scan.c +++ b/drivers/net/wireless/ti/wlcore/scan.c @@ -92,9 +92,31 @@ out:  static void wlcore_started_vifs_iter(void *data, u8 *mac,  				     struct ieee80211_vif *vif)  { +	struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif); +	bool active = false;  	int *count = (int *)data; -	if (!vif->bss_conf.idle) +	/* +	 * count active interfaces according to interface type. +	 * checking only bss_conf.idle is bad for some cases, e.g. +	 * we don't want to count sta in p2p_find as active interface. +	 */ +	switch (wlvif->bss_type) { +	case BSS_TYPE_STA_BSS: +		if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) +			active = true; +		break; + +	case BSS_TYPE_AP_BSS: +		if (wlvif->wl->active_sta_count > 0) +			active = true; +		break; + +	default: +		break; +	} + +	if (active)  		(*count)++;  } @@ -166,26 +188,14 @@ wlcore_scan_get_channels(struct wl1271 *wl,  		flags = req_channels[i]->flags;  		if (force_passive) -			flags |= IEEE80211_CHAN_PASSIVE_SCAN; +			flags |= IEEE80211_CHAN_NO_IR;  		if ((req_channels[i]->band == band) &&  		    !(flags & IEEE80211_CHAN_DISABLED) &&  		    (!!(flags & IEEE80211_CHAN_RADAR) == radar) &&  		    /* if radar is set, we ignore the passive flag */  		    (radar || -		     !!(flags & IEEE80211_CHAN_PASSIVE_SCAN) == passive)) { -			wl1271_debug(DEBUG_SCAN, "band %d, center_freq %d ", -				     req_channels[i]->band, -				     req_channels[i]->center_freq); -			wl1271_debug(DEBUG_SCAN, "hw_value %d, flags %X", -				     req_channels[i]->hw_value, -				     req_channels[i]->flags); -			wl1271_debug(DEBUG_SCAN, "max_power %d", -				     req_channels[i]->max_power); -			wl1271_debug(DEBUG_SCAN, "min_dwell_time %d max dwell time %d", -				     min_dwell_time_active, -				     max_dwell_time_active); - +		     !!(flags & IEEE80211_CHAN_NO_IR) == passive)) {  			if (flags & IEEE80211_CHAN_RADAR) {  				channels[j].flags |= SCAN_CHANNEL_FLAGS_DFS; @@ -208,7 +218,7 @@ wlcore_scan_get_channels(struct wl1271 *wl,  			    (band == IEEE80211_BAND_2GHZ) &&  			    (channels[j].channel >= 12) &&  			    (channels[j].channel <= 14) && -			    (flags & IEEE80211_CHAN_PASSIVE_SCAN) && +			    (flags & IEEE80211_CHAN_NO_IR) &&  			    !force_passive) {  				/* pactive channels treated as DFS */  				channels[j].flags = SCAN_CHANNEL_FLAGS_DFS; @@ -222,6 +232,17 @@ wlcore_scan_get_channels(struct wl1271 *wl,  					     *n_pactive_ch);  			} +			wl1271_debug(DEBUG_SCAN, "freq %d, ch. %d, flags 0x%x, power %d, min/max_dwell %d/%d%s%s", +				     req_channels[i]->center_freq, +				     req_channels[i]->hw_value, +				     req_channels[i]->flags, +				     req_channels[i]->max_power, +				     min_dwell_time_active, +				     max_dwell_time_active, +				     flags & IEEE80211_CHAN_RADAR ? +					", DFS" : "", +				     flags & IEEE80211_CHAN_NO_IR ? +					", NO-IR" : "");  			j++;  		}  	} @@ -364,7 +385,7 @@ wlcore_scan_sched_scan_ssid_list(struct wl1271 *wl,  	struct cfg80211_ssid *ssids = req->ssids;  	int ret = 0, type, i, j, n_match_ssids = 0; -	wl1271_debug(DEBUG_CMD, "cmd sched scan ssid list"); +	wl1271_debug((DEBUG_CMD | DEBUG_SCAN), "cmd sched scan ssid list");  	/* count the match sets that contain SSIDs */  	for (i = 0; i < req->n_match_sets; i++) @@ -442,8 +463,6 @@ wlcore_scan_sched_scan_ssid_list(struct wl1271 *wl,  		}  	} -	wl1271_dump(DEBUG_SCAN, "SSID_LIST: ", cmd, sizeof(*cmd)); -  	ret = wl1271_cmd_send(wl, CMD_CONNECTION_SCAN_SSID_CFG, cmd,  			      sizeof(*cmd), 0);  	if (ret < 0) {  | 
