wl12xx: update scan cmd api
authorEliad Peller <eliad@wizery.com>
Sun, 14 Aug 2011 10:17:10 +0000 (13:17 +0300)
committerLuciano Coelho <coelho@ti.com>
Mon, 22 Aug 2011 09:35:25 +0000 (12:35 +0300)
Update the scan command to use the new fw api
(fw 6/7.3.0.0.75).

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/scan.c
drivers/net/wireless/wl12xx/scan.h

index 78a9b23a41b84870f1598c951bc234eb3fff3348..54a4e75a37fe8de1f41bee557506c9cf76080ddf 100644 (file)
@@ -156,6 +156,11 @@ static int wl1271_scan_send(struct wl1271 *wl, enum ieee80211_band band,
        if (passive || wl->scan.req->n_ssids == 0)
                scan_options |= WL1271_SCAN_OPT_PASSIVE;
 
+       if (WARN_ON(wl->role_id == WL12XX_INVALID_ROLE_ID)) {
+               ret = -EINVAL;
+               goto out;
+       }
+       cmd->params.role_id = wl->role_id;
        cmd->params.scan_options = cpu_to_le16(scan_options);
 
        cmd->params.n_ch = wl1271_get_scan_channels(wl, wl->scan.req,
@@ -167,7 +172,6 @@ static int wl1271_scan_send(struct wl1271 *wl, enum ieee80211_band band,
        }
 
        cmd->params.tx_rate = cpu_to_le32(basic_rate);
-
        cmd->params.n_probe_reqs = wl->conf.scan.num_probe_reqs;
        cmd->params.tx_rate = cpu_to_le32(basic_rate);
        cmd->params.tid_trigger = 0;
@@ -183,6 +187,8 @@ static int wl1271_scan_send(struct wl1271 *wl, enum ieee80211_band band,
                memcpy(cmd->params.ssid, wl->scan.ssid, wl->scan.ssid_len);
        }
 
+       memcpy(cmd->addr, wl->mac_addr, ETH_ALEN);
+
        ret = wl1271_cmd_build_probe_req(wl, wl->scan.ssid, wl->scan.ssid_len,
                                         wl->scan.req->ie, wl->scan.req->ie_len,
                                         band);
index 0b2a2987439d40afce9c4a69ba12c9d95e745184..92115156522fd73512fb2d78c2f7267710fac08b 100644 (file)
@@ -46,7 +46,10 @@ void wl1271_scan_sched_scan_results(struct wl1271 *wl);
 #define WL1271_SCAN_CURRENT_TX_PWR     0
 #define WL1271_SCAN_OPT_ACTIVE         0
 #define WL1271_SCAN_OPT_PASSIVE               1
+#define WL1271_SCAN_OPT_TRIGGERED_SCAN 2
 #define WL1271_SCAN_OPT_PRIORITY_HIGH  4
+/* scan even if we fail to enter psm */
+#define WL1271_SCAN_OPT_FORCE          8
 #define WL1271_SCAN_BAND_2_4_GHZ 0
 #define WL1271_SCAN_BAND_5_GHZ 1
 
@@ -62,27 +65,27 @@ enum {
 };
 
 struct basic_scan_params {
-       __le32 rx_config_options;
-       __le32 rx_filter_options;
        /* Scan option flags (WL1271_SCAN_OPT_*) */
        __le16 scan_options;
+       u8 role_id;
        /* Number of scan channels in the list (maximum 30) */
        u8 n_ch;
        /* This field indicates the number of probe requests to send
           per channel for an active scan */
        u8 n_probe_reqs;
-       /* Rate bit field for sending the probes */
-       __le32 tx_rate;
        u8 tid_trigger;
        u8 ssid_len;
-       /* in order to align */
-       u8 padding1[2];
+       u8 use_ssid_list;
+
+       /* Rate bit field for sending the probes */
+       __le32 tx_rate;
+
        u8 ssid[IEEE80211_MAX_SSID_LEN];
        /* Band to scan */
        u8 band;
-       u8 use_ssid_list;
+
        u8 scan_tag;
-       u8 padding2;
+       u8 padding2[2];
 } __packed;
 
 struct basic_scan_channel_params {
@@ -105,6 +108,10 @@ struct wl1271_cmd_scan {
 
        struct basic_scan_params params;
        struct basic_scan_channel_params channels[WL1271_SCAN_MAX_CHANNELS];
+
+       /* src mac address */
+       u8 addr[ETH_ALEN];
+       u8 padding[2];
 } __packed;
 
 struct wl1271_cmd_trigger_scan_to {
@@ -184,7 +191,7 @@ struct wl1271_cmd_sched_scan_config {
 } __packed;
 
 
-#define SCHED_SCAN_MAX_SSIDS 8
+#define SCHED_SCAN_MAX_SSIDS 16
 
 enum {
        SCAN_SSID_TYPE_PUBLIC = 0,