From 9a0431bd52d3b805dacbe4135f35f58e354ed690 Mon Sep 17 00:00:00 2001 From: Srinivas Girigowda Date: Thu, 9 Apr 2015 13:32:45 -0700 Subject: qcacld: Put fw in wow mode if extscan is in progress After extscan is started and APPS power collapse, host driver is sending WMI_PDEV_SUSPEND_CMDID which is stopping the extscan. Fix is to send WMI_WOW_ENABLE_CMDID if extscan is in progress during APPS power collapse. Change-Id: I968d55e94058256769302217f987fc51ebb1ffa6 CRs-Fixed: 820391 --- CORE/SERVICES/WMA/wma.c | 23 +++++++++++++++++++++-- CORE/SERVICES/WMA/wma.h | 3 +++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 74698d48371e..a6733f19d34c 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -19120,6 +19120,7 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) v_BOOL_t connected = FALSE, pno_in_progress = FALSE; VOS_STATUS ret; u_int8_t i; + bool extscan_in_progress = false; wma->no_of_suspend_ind++; @@ -19183,6 +19184,7 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) * 1) Is any one of vdev in beaconning mode (in AP mode) ? * 2) Is any one of vdev in connected state (in STA mode) ? * 3) Is PNO in progress in any one of vdev ? + * 4) Is Extscan in progress in any one of vdev ? */ for (i = 0; i < wma->max_bssid; i++) { if ( (wma_is_vdev_in_ap_mode(wma, i) @@ -19208,6 +19210,13 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) pno_in_progress = TRUE; break; } +#endif +#ifdef FEATURE_WLAN_EXTSCAN + if (wma->interfaces[i].extscan_in_progress) { + WMA_LOGD("Extscan is in progress, enabling wow"); + extscan_in_progress = true; + break; + } #endif } for (i = 0; i < wma->max_bssid; i++) { @@ -19217,8 +19226,8 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) wma->wow.gtk_pdev_enable); } - if (!connected && !pno_in_progress) { - WMA_LOGD("All vdev are in disconnected state, skipping wow"); + if (!connected && !pno_in_progress && !extscan_in_progress) { + WMA_LOGD("All vdev are in disconnected state and pno/extscan is not in progress, skipping wow"); vos_mem_free(info); goto send_ready_to_suspend; } @@ -22584,6 +22593,11 @@ VOS_STATUS wma_start_extscan(tp_wma_handle wma, adf_nbuf_free(buf); return VOS_STATUS_E_FAILURE; } + + wma->interfaces[pstart->sessionId].extscan_in_progress = true; + WMA_LOGD("Extscan start request sent successfully for vdev %d", + pstart->sessionId); + return VOS_STATUS_SUCCESS; } @@ -22628,6 +22642,11 @@ VOS_STATUS wma_stop_extscan(tp_wma_handle wma, adf_nbuf_free(wmi_buf); return VOS_STATUS_E_FAILURE; } + + wma->interfaces[pstopcmd->sessionId].extscan_in_progress = false; + WMA_LOGD("Extscan stop request sent successfully for vdev %d", + pstopcmd->sessionId); + return VOS_STATUS_SUCCESS; } diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index 07320e182e8c..1c6dba79bcec 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -545,6 +545,9 @@ struct wma_txrx_node { void *plink_status_req; void *psnr_req; u_int8_t delay_before_vdev_stop; +#ifdef FEATURE_WLAN_EXTSCAN + bool extscan_in_progress; +#endif }; #if defined(QCA_WIFI_FTM) -- cgit v1.2.3