|
@@ -99,14 +99,18 @@ static int wl1271_get_scan_channels(struct wl1271 *wl,
|
|
|
for (i = 0, j = 0;
|
|
|
i < req->n_channels && j < WL1271_SCAN_MAX_CHANNELS;
|
|
|
i++) {
|
|
|
-
|
|
|
flags = req->channels[i]->flags;
|
|
|
|
|
|
if (!test_bit(i, wl->scan.scanned_ch) &&
|
|
|
!(flags & IEEE80211_CHAN_DISABLED) &&
|
|
|
- ((!!(flags & IEEE80211_CHAN_PASSIVE_SCAN)) == passive) &&
|
|
|
- (req->channels[i]->band == band)) {
|
|
|
-
|
|
|
+ (req->channels[i]->band == band) &&
|
|
|
+ /*
|
|
|
+ * In passive scans, we scan all remaining
|
|
|
+ * channels, even if not marked as such.
|
|
|
+ * In active scans, we only scan channels not
|
|
|
+ * marked as passive.
|
|
|
+ */
|
|
|
+ (passive || !(flags & IEEE80211_CHAN_PASSIVE_SCAN))) {
|
|
|
wl1271_debug(DEBUG_SCAN, "band %d, center_freq %d ",
|
|
|
req->channels[i]->band,
|
|
|
req->channels[i]->center_freq);
|
|
@@ -158,6 +162,10 @@ static int wl1271_scan_send(struct wl1271 *wl, enum ieee80211_band band,
|
|
|
int ret;
|
|
|
u16 scan_options = 0;
|
|
|
|
|
|
+ /* skip active scans if we don't have SSIDs */
|
|
|
+ if (!passive && wl->scan.req->n_ssids == 0)
|
|
|
+ return WL1271_NOTHING_TO_SCAN;
|
|
|
+
|
|
|
cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
|
|
|
trigger = kzalloc(sizeof(*trigger), GFP_KERNEL);
|
|
|
if (!cmd || !trigger) {
|
|
@@ -165,8 +173,7 @@ static int wl1271_scan_send(struct wl1271 *wl, enum ieee80211_band band,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- /* No SSIDs means that we have a forced passive scan */
|
|
|
- if (passive || wl->scan.req->n_ssids == 0)
|
|
|
+ if (passive)
|
|
|
scan_options |= WL1271_SCAN_OPT_PASSIVE;
|
|
|
|
|
|
if (WARN_ON(wl->role_id == WL12XX_INVALID_ROLE_ID)) {
|