|
@@ -3,6 +3,7 @@
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/slab.h>
|
|
|
#include <linux/crc7.h>
|
|
|
+#include <linux/etherdevice.h>
|
|
|
|
|
|
#include "wl1251.h"
|
|
|
#include "reg.h"
|
|
@@ -410,7 +411,9 @@ int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,
|
|
|
struct wl1251_cmd_scan *cmd;
|
|
|
int i, ret = 0;
|
|
|
|
|
|
- wl1251_debug(DEBUG_CMD, "cmd scan");
|
|
|
+ wl1251_debug(DEBUG_CMD, "cmd scan channels %d", n_channels);
|
|
|
+
|
|
|
+ WARN_ON(n_channels > SCAN_MAX_NUM_OF_CHANNELS);
|
|
|
|
|
|
cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
|
|
|
if (!cmd)
|
|
@@ -421,6 +424,13 @@ int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,
|
|
|
CFG_RX_MGMT_EN |
|
|
|
CFG_RX_BCN_EN);
|
|
|
cmd->params.scan_options = 0;
|
|
|
+ /*
|
|
|
+ * Use high priority scan when not associated to prevent fw issue
|
|
|
+ * causing never-ending scans (sometimes 20+ minutes).
|
|
|
+ * Note: This bug may be caused by the fw's DTIM handling.
|
|
|
+ */
|
|
|
+ if (is_zero_ether_addr(wl->bssid))
|
|
|
+ cmd->params.scan_options |= WL1251_SCAN_OPT_PRIORITY_HIGH;
|
|
|
cmd->params.num_channels = n_channels;
|
|
|
cmd->params.num_probe_requests = n_probes;
|
|
|
cmd->params.tx_rate = cpu_to_le16(1 << 1); /* 2 Mbps */
|