brcmfmac: use requested scan interval in scheduled scan
authorArend Van Spriel <arend.vanspriel@broadcom.com>
Wed, 23 Nov 2016 10:25:30 +0000 (10:25 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 29 Nov 2016 15:29:30 +0000 (17:29 +0200)
User-space can specify the interval for the scheduled scan. This
interval is found in scheduled scan plan. The driver supports only
one plan, which is legacy behaviour.

Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h

index 75ad8b3d53e2b6fb4b70815cfb5fdc1d84a64550..cc12b14c0f032815a4a7d1b77c2ac793d453e3b6 100644 (file)
@@ -6312,6 +6312,7 @@ static void brcmf_wiphy_pno_params(struct wiphy *wiphy)
        wiphy->max_sched_scan_ssids = BRCMF_PNO_MAX_PFN_COUNT;
        wiphy->max_match_sets = BRCMF_PNO_MAX_PFN_COUNT;
        wiphy->max_sched_scan_ie_len = BRCMF_SCAN_IE_LEN_MAX;
+       wiphy->max_sched_scan_plan_interval = BRCMF_PNO_SCHED_SCAN_MAX_PERIOD;
        wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
 }
 
index bc33bdcabaffa2ed81220106a5563eea920efc23..f273cab0da1022647842caf27020b01d613f05ba 100644 (file)
@@ -63,6 +63,10 @@ static int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
        pfn_param.exp = BRCMF_PNO_FREQ_EXPO_MAX;
 
        /* set up pno scan fr */
+       if (scan_freq < BRCMF_PNO_SCHED_SCAN_MIN_PERIOD) {
+               brcmf_dbg(SCAN, "scan period too small, using minimum\n");
+               scan_freq = BRCMF_PNO_SCHED_SCAN_MIN_PERIOD;
+       }
        pfn_param.scan_freq = cpu_to_le32(scan_freq);
 
        if (mscan) {
@@ -191,7 +195,7 @@ int brcmf_pno_start_sched_scan(struct brcmf_if *ifp,
        }
 
        /* configure pno */
-       ret = brcmf_pno_config(ifp, BRCMF_PNO_SCHED_SCAN_PERIOD, 0, 0);
+       ret = brcmf_pno_config(ifp, req->scan_plans[0].interval, 0, 0);
        if (ret < 0)
                return ret;
 
index 5803a4ca8cc4decb85fc7565c77d91a70da8122e..bae55b2af78c027b975c20e5e486ea6047511ab1 100644 (file)
 #ifndef _BRCMF_PNO_H
 #define _BRCMF_PNO_H
 
-#define BRCMF_PNO_SCAN_COMPLETE                1
-#define BRCMF_PNO_MAX_PFN_COUNT                16
+#define BRCMF_PNO_SCAN_COMPLETE                        1
+#define BRCMF_PNO_MAX_PFN_COUNT                        16
+#define BRCMF_PNO_SCHED_SCAN_MIN_PERIOD        10
+#define BRCMF_PNO_SCHED_SCAN_MAX_PERIOD        508
 
 /**
  * brcmf_pno_clean - disable and clear pno in firmware.