aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant
diff options
context:
space:
mode:
authorEyal Shapira <eyal@wizery.com>2012-01-18 16:19:24 +0200
committerArik Nemtsov <arik@wizery.com>2012-08-02 13:01:42 +0300
commitec0e5394ebb986f71b640f488659ddba89f940b0 (patch)
treef967dcb8a7aa42b43f3523abe38b9c563e7d9d7e /wpa_supplicant
parent61270d8694738559c7887ee7002c07e41ba65149 (diff)
downloadexternal_wpa_supplicant_8_ti-ec0e5394ebb986f71b640f488659ddba89f940b0.zip
external_wpa_supplicant_8_ti-ec0e5394ebb986f71b640f488659ddba89f940b0.tar.gz
external_wpa_supplicant_8_ti-ec0e5394ebb986f71b640f488659ddba89f940b0.tar.bz2
sched scan: add support for short and long intervals
Configure sched scan to use short and long intervals if the driver supports it
Diffstat (limited to 'wpa_supplicant')
-rw-r--r--wpa_supplicant/ctrl_iface.c2
-rw-r--r--wpa_supplicant/driver_i.h9
-rw-r--r--wpa_supplicant/scan.c34
3 files changed, 36 insertions, 9 deletions
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index 46c6845..a5bbbbe 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -101,7 +101,7 @@ static int pno_start(struct wpa_supplicant *wpa_s)
if (wpa_s->conf->filter_rssi)
params.filter_rssi = wpa_s->conf->filter_rssi;
- ret = wpa_drv_sched_scan(wpa_s, &params, 10 * 1000);
+ ret = wpa_drv_sched_scan(wpa_s, &params, 10 * 1000, 10 * 1000, 0);
os_free(params.filter_ssids);
if (ret == 0)
wpa_s->pno = 1;
diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
index 2ab455b..0972196 100644
--- a/wpa_supplicant/driver_i.h
+++ b/wpa_supplicant/driver_i.h
@@ -75,11 +75,16 @@ static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s,
struct wpa_driver_scan_params *params,
- u32 interval)
+ u32 long_interval,
+ u32 short_interval,
+ u8 num_short_intervals)
{
if (wpa_s->driver->sched_scan)
return wpa_s->driver->sched_scan(wpa_s->drv_priv,
- params, interval);
+ params,
+ long_interval,
+ short_interval,
+ num_short_intervals);
return -1;
}
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index 87d3de7..e3f314e 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -223,11 +223,16 @@ wpa_supplicant_delayed_sched_scan_timeout(void *eloop_ctx, void *timeout_ctx)
static int
wpa_supplicant_start_sched_scan(struct wpa_supplicant *wpa_s,
struct wpa_driver_scan_params *params,
- int interval)
+ int long_interval,
+ int short_interval,
+ u8 num_short_intervals)
{
int ret;
- ret = wpa_drv_sched_scan(wpa_s, params, interval * 1000);
+ ret = wpa_drv_sched_scan(wpa_s, params,
+ long_interval * 1000,
+ short_interval * 1000,
+ num_short_intervals);
if (!ret)
wpa_s->sched_scanning = 1;
@@ -883,11 +888,28 @@ start_scan:
scan_params = &params;
scan:
- wpa_dbg(wpa_s, MSG_DEBUG, "Starting sched scan: interval %d",
- wpa_s->sched_scan_interval);
- ret = wpa_supplicant_start_sched_scan(wpa_s, scan_params,
- wpa_s->sched_scan_interval);
+ if (wpa_s->sched_scan_intervals_supported) {
+ wpa_dbg(wpa_s, MSG_DEBUG, "Starting sched scan: "
+ " short interval %d long_interval %d"
+ " num_short_intervals %d",
+ wpa_s->conf->sched_scan_short_interval,
+ wpa_s->conf->sched_scan_long_interval,
+ wpa_s->conf->sched_scan_num_short_intervals);
+
+ ret = wpa_supplicant_start_sched_scan(wpa_s, scan_params,
+ wpa_s->conf->sched_scan_long_interval,
+ wpa_s->conf->sched_scan_short_interval,
+ wpa_s->conf->sched_scan_num_short_intervals);
+ } else {
+ wpa_dbg(wpa_s, MSG_DEBUG, "Starting sched scan: interval %d",
+ wpa_s->conf->sched_scan_long_interval);
+
+ ret = wpa_supplicant_start_sched_scan(wpa_s, scan_params,
+ wpa_s->conf->sched_scan_long_interval, 0, 0);
+ }
+
+
wpabuf_free(wps_ie);
if (params.filter_ssids)
os_free(params.filter_ssids);