summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepak Dhamdhere <ddhamdhe@qca.qualcomm.com>2014-06-07 20:33:58 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-06-09 17:46:26 -0700
commit2e665e1d797ea9b86d4710fa79db9ce687f60f8f (patch)
tree585eaa32eb7b20bebac9fa1ef207fd8dae3b822f
parenta9c07b9c43ad1f4be06923bfb63c178504471c74 (diff)
qcacld: Send beacon miss after preauth attempts fail
WMI_ROAM_REASON_SUITABLE_AP event from firmware indicates beacon miss failure happened but candidate APs are found. When CSR restarts roam offload, WMA will send beacon miss event if WMI_ROAM_REASON_SUITABLE_AP has already been received. CRs-Fixed: 677113 Change-Id: Ie4762da2bb8354f378b0023d1f2eb1d1aa24d7fb
-rw-r--r--CORE/SERVICES/WMA/wma.c18
-rw-r--r--CORE/SERVICES/WMA/wma.h2
2 files changed, 18 insertions, 2 deletions
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 604f0eee1db9..4a2a73347a15 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -5886,6 +5886,7 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle,
/* First parameter is positive rssi value to trigger rssi based scan.
* Opportunistic scan is started at 30 dB higher that trigger rssi.
*/
+ wma_handle->suitable_ap_hb_failure = FALSE;
vos_status = wma_roam_scan_offload_rssi_thresh(wma_handle,
(roam_req->LookupThreshold - WMA_NOISE_FLOOR_DBM_DEFAULT),
@@ -5944,6 +5945,7 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle,
break;
case ROAM_SCAN_OFFLOAD_STOP:
+ wma_handle->suitable_ap_hb_failure = FALSE;
wma_roam_scan_offload_end_connect(wma_handle);
if (roam_req->StartScanReason == REASON_OS_REQUESTED_ROAMING_NOW) {
vos_msg_t vosMsg;
@@ -5965,10 +5967,22 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle,
break;
case ROAM_SCAN_OFFLOAD_RESTART:
- /* Not needed. Rome offload engine does not stop after any scan */
+ /* Rome offload engine does not stop after any scan.
+ * If this command is sent because all preauth attempts failed
+ * and WMI_ROAM_REASON_SUITABLE_AP event was received earlier,
+ * now it is time to call it heartbeat failure.
+ */
+ if ((roam_req->StartScanReason == REASON_PREAUTH_FAILED_FOR_ALL)
+ && wma_handle->suitable_ap_hb_failure) {
+ WMA_LOGE("%s: Sending heartbeat failure after preauth failures",
+ __func__);
+ wma_beacon_miss_handler(wma_handle, wma_handle->roam_offload_vdev_id);
+ wma_handle->suitable_ap_hb_failure = FALSE;
+ }
break;
case ROAM_SCAN_OFFLOAD_UPDATE_CFG:
+ wma_handle->suitable_ap_hb_failure = FALSE;
wma_roam_scan_fill_scan_params(wma_handle, pMac, roam_req, &scan_params);
vos_status = wma_roam_scan_offload_mode(wma_handle, &scan_params,
WMI_ROAM_SCAN_MODE_NONE);
@@ -17511,9 +17525,11 @@ static int wma_roam_event_callback(WMA_HANDLE handle, u_int8_t *event_buf,
case WMI_ROAM_REASON_BETTER_AP:
WMA_LOGD("%s:Better AP found for vdevid %x, rssi %d", __func__,
wmi_event->vdev_id, wmi_event->rssi);
+ wma_handle->suitable_ap_hb_failure = FALSE;
wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);
break;
case WMI_ROAM_REASON_SUITABLE_AP:
+ wma_handle->suitable_ap_hb_failure = TRUE;
WMA_LOGD("%s:Bmiss scan AP found for vdevid %x, rssi %d", __func__,
wmi_event->vdev_id, wmi_event->rssi);
wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index a2e0b7e225f0..b2d2f865be2d 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -641,7 +641,7 @@ typedef struct {
scan_timer_info wma_scan_timer_info;
u_int8_t dfs_phyerr_filter_offload;
-
+ v_BOOL_t suitable_ap_hb_failure;
}t_wma_handle, *tp_wma_handle;
struct wma_target_cap {