wl1251: use mac80211 provided channel parameters in scanning
authorKalle Valo <kalle.valo@nokia.com>
Tue, 5 Jan 2010 18:17:03 +0000 (20:17 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 12 Jan 2010 18:51:26 +0000 (13:51 -0500)
The number of channels to be used in scan was hard coded in wl1251. The
proper way is to use the channels array provided by mac80211.

Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/wl12xx/wl1251_cmd.c
drivers/net/wireless/wl12xx/wl1251_cmd.h
drivers/net/wireless/wl12xx/wl1251_main.c

index fcbfbd7585f8d13c700a67b364c393d4d1112acb..0320b478bb3f0dfde1fc6cfbee04859fe9b01a35 100644 (file)
@@ -412,6 +412,7 @@ out:
 }
 
 int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,
+                   struct ieee80211_channel *channels[],
                    unsigned int n_channels, unsigned int n_probes)
 {
        struct wl1251_cmd_scan *cmd;
@@ -442,7 +443,7 @@ int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,
                memset(&cmd->channels[i].bssid_msb, 0xff, 2);
                cmd->channels[i].early_termination = 0;
                cmd->channels[i].tx_power_att = 0;
-               cmd->channels[i].channel = i + 1;
+               cmd->channels[i].channel = channels[i]->hw_value;
        }
 
        cmd->params.ssid_len = ssid_len;
index 63ae3193f7c6f77488b4c6aef281192839300432..4ad67cae94d2a6fedf57bb6c94d01276ab06ee84 100644 (file)
@@ -27,6 +27,8 @@
 
 #include "wl1251.h"
 
+#include <net/cfg80211.h>
+
 struct acx_header;
 
 int wl1251_cmd_send(struct wl1251 *wl, u16 type, void *buf, size_t buf_len);
@@ -44,6 +46,7 @@ int wl1251_cmd_read_memory(struct wl1251 *wl, u32 addr, void *answer,
 int wl1251_cmd_template_set(struct wl1251 *wl, u16 cmd_id,
                            void *buf, size_t buf_len);
 int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,
+                   struct ieee80211_channel *channels[],
                    unsigned int n_channels, unsigned int n_probes);
 int wl1251_cmd_trigger_scan_to(struct wl1251 *wl, u32 timeout);
 
@@ -169,6 +172,8 @@ struct cmd_read_write_memory {
 #define WL1251_SCAN_MIN_DURATION 30000
 #define WL1251_SCAN_MAX_DURATION 60000
 
+#define WL1251_SCAN_NUM_PROBES 3
+
 struct wl1251_scan_parameters {
        u32 rx_config_options;
        u32 rx_filter_options;
index 1db97229af4705679a64ea5f317ef04dfbfaa4bb..4728983b4383ed26091ce06f9733972e8eaec8a4 100644 (file)
@@ -878,7 +878,8 @@ static int wl1251_op_hw_scan(struct ieee80211_hw *hw,
 
        wl->scanning = true;
 
-       ret = wl1251_cmd_scan(wl, ssid, ssid_len, 13, 3);
+       ret = wl1251_cmd_scan(wl, ssid, ssid_len, req->channels,
+                             req->n_channels, WL1251_SCAN_NUM_PROBES);
        if (ret < 0) {
                wl->scanning = false;
                goto out_sleep;