|
@@ -54,7 +54,7 @@ static int pno_start(struct wpa_supplicant *wpa_s)
|
|
|
struct wpa_ssid *ssid;
|
|
|
struct wpa_driver_scan_params params;
|
|
|
|
|
|
- if (wpa_s->pno)
|
|
|
+ if (wpa_s->pno || wpa_s->pno_sched_pending)
|
|
|
return 0;
|
|
|
|
|
|
if ((wpa_s->wpa_state > WPA_SCANNING) &&
|
|
@@ -64,8 +64,14 @@ static int pno_start(struct wpa_supplicant *wpa_s)
|
|
|
}
|
|
|
|
|
|
if (wpa_s->wpa_state == WPA_SCANNING) {
|
|
|
- wpa_supplicant_cancel_sched_scan(wpa_s);
|
|
|
wpa_supplicant_cancel_scan(wpa_s);
|
|
|
+ if (wpa_s->sched_scanning) {
|
|
|
+ wpa_printf(MSG_DEBUG, "Schedule PNO on completion of "
|
|
|
+ "ongoing sched scan");
|
|
|
+ wpa_supplicant_cancel_sched_scan(wpa_s);
|
|
|
+ wpa_s->pno_sched_pending = 1;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
os_memset(¶ms, 0, sizeof(params));
|
|
@@ -128,11 +134,13 @@ static int pno_stop(struct wpa_supplicant *wpa_s)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
|
|
|
- if (wpa_s->pno) {
|
|
|
+ if (wpa_s->pno || wpa_s->sched_scanning) {
|
|
|
wpa_s->pno = 0;
|
|
|
ret = wpa_supplicant_stop_sched_scan(wpa_s);
|
|
|
}
|
|
|
|
|
|
+ wpa_s->pno_sched_pending = 0;
|
|
|
+
|
|
|
if (wpa_s->wpa_state == WPA_SCANNING)
|
|
|
wpa_supplicant_req_scan(wpa_s, 0, 0);
|
|
|
|