brcmfmac: Improve scanning settings for connect.
authorHante Meuleman <meuleman@broadcom.com>
Sat, 15 Mar 2014 16:18:19 +0000 (17:18 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 17 Mar 2014 17:44:14 +0000 (13:44 -0400)
When connecting without specifying the channel it can take quite
some time to connect. This is because not all parameters for the
scan operation are set to optimized values. This patch changes
these parameters resulting in a much faster connect in certain
situations.

Reviewed-by: Arend Van Spriel <arend@broadcom.com>
Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Daniel (Deognyoun) Kim <dekim@broadcom.com>
Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c

index 00bd1e1..adbd5b7 100644 (file)
@@ -1682,22 +1682,9 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
        ext_join_params->ssid_le.SSID_len = cpu_to_le32(profile->ssid.SSID_len);
        memcpy(&ext_join_params->ssid_le.SSID, sme->ssid,
               profile->ssid.SSID_len);
-       /*increase dwell time to receive probe response or detect Beacon
-        * from target AP at a noisy air only during connect command
-        */
-       ext_join_params->scan_le.active_time =
-               cpu_to_le32(BRCMF_SCAN_JOIN_ACTIVE_DWELL_TIME_MS);
-       ext_join_params->scan_le.passive_time =
-               cpu_to_le32(BRCMF_SCAN_JOIN_PASSIVE_DWELL_TIME_MS);
+
        /* Set up join scan parameters */
        ext_join_params->scan_le.scan_type = -1;
-       /* to sync with presence period of VSDB GO.
-        * Send probe request more frequently. Probe request will be stopped
-        * when it gets probe response from target AP/GO.
-        */
-       ext_join_params->scan_le.nprobes =
-               cpu_to_le32(BRCMF_SCAN_JOIN_ACTIVE_DWELL_TIME_MS /
-                           BRCMF_SCAN_JOIN_PROBE_INTERVAL_MS);
        ext_join_params->scan_le.home_time = cpu_to_le32(-1);
 
        if (sme->bssid)
@@ -1710,6 +1697,25 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
 
                ext_join_params->assoc_le.chanspec_list[0] =
                        cpu_to_le16(chanspec);
+               /* Increase dwell time to receive probe response or detect
+                * beacon from target AP at a noisy air only during connect
+                * command.
+                */
+               ext_join_params->scan_le.active_time =
+                       cpu_to_le32(BRCMF_SCAN_JOIN_ACTIVE_DWELL_TIME_MS);
+               ext_join_params->scan_le.passive_time =
+                       cpu_to_le32(BRCMF_SCAN_JOIN_PASSIVE_DWELL_TIME_MS);
+               /* To sync with presence period of VSDB GO send probe request
+                * more frequently. Probe request will be stopped when it gets
+                * probe response from target AP/GO.
+                */
+               ext_join_params->scan_le.nprobes =
+                       cpu_to_le32(BRCMF_SCAN_JOIN_ACTIVE_DWELL_TIME_MS /
+                                   BRCMF_SCAN_JOIN_PROBE_INTERVAL_MS);
+       } else {
+               ext_join_params->scan_le.active_time = cpu_to_le32(-1);
+               ext_join_params->scan_le.passive_time = cpu_to_le32(-1);
+               ext_join_params->scan_le.nprobes = cpu_to_le32(-1);
        }
 
        err  = brcmf_fil_bsscfg_data_set(ifp, "join", ext_join_params,