[PATCH 2/2] pno: change sched_scan_stopped event to handle pending pno properly
Ilan Peer
ilan.peer
Tue Feb 25 22:04:11 PST 2014
From: Alexander Bondar <alexander.bondar at intel.com>
When a sched_scan_stopped event is received and there is a pending PNO,
it uses regular scheduled scan parameters instead of PNO specific
parameters. Change it by calling wpas_start_pno.
Signed-off-by: Alexander Bondar <alexander.bondar at intel.com>
Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
wpa_supplicant/events.c | 14 +++++---------
wpa_supplicant/scan.c | 17 ++++++++++-------
2 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 47434e4..37c3733 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -3302,15 +3302,11 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
* Start a new sched scan to continue searching for more SSIDs
* either if timed out or PNO schedule scan is pending.
*/
- if (wpa_s->sched_scan_timed_out || wpa_s->pno_sched_pending) {
-
- if (wpa_supplicant_req_sched_scan(wpa_s) < 0 &&
- wpa_s->pno_sched_pending) {
- wpa_msg(wpa_s, MSG_ERROR, "Failed to schedule PNO");
- } else if (wpa_s->pno_sched_pending) {
- wpa_s->pno_sched_pending = 0;
- wpa_s->pno = 1;
- }
+ if (wpa_s->sched_scan_timed_out) {
+ wpa_supplicant_req_sched_scan(wpa_s);
+ } else if (wpa_s->pno_sched_pending) {
+ wpa_s->pno_sched_pending = 0;
+ wpas_start_pno(wpa_s);
}
break;
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index b92a064..77b3e44 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -1816,6 +1816,9 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s)
struct wpa_ssid *ssid;
struct wpa_driver_scan_params params;
+ if (!wpa_s->sched_scan_supported)
+ return -1;
+
if (wpa_s->pno || wpa_s->pno_sched_pending)
return 0;
@@ -1888,6 +1891,8 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s)
os_free(params.filter_ssids);
if (ret == 0)
wpa_s->pno = 1;
+ else
+ wpa_msg(wpa_s, MSG_ERROR, "Failed to schedule PNO");
return ret;
}
@@ -1896,11 +1901,12 @@ int wpas_stop_pno(struct wpa_supplicant *wpa_s)
{
int ret = 0;
- if (wpa_s->pno || wpa_s->sched_scanning) {
- wpa_s->pno = 0;
- ret = wpa_supplicant_stop_sched_scan(wpa_s);
- }
+ if (!wpa_s->pno)
+ return 0;
+
+ ret = wpa_supplicant_stop_sched_scan(wpa_s);
+ wpa_s->pno = 0;
wpa_s->pno_sched_pending = 0;
if (wpa_s->wpa_state == WPA_SCANNING)
@@ -1908,6 +1914,3 @@ int wpas_stop_pno(struct wpa_supplicant *wpa_s)
return ret;
}
-
-
-
--
1.7.10.4
More information about the Hostap
mailing list