wlan: WDA/WDI Implementation for Extended Scan
WDA/WDI enhancements to support Extended scan feature.
CRs-fixed: 677849
Change-Id: I5e0b2d207f71078ade24cb8cc6d9229a3f9e6ac2
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index e61543c..5c000d4 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -223,6 +223,25 @@
tSirLPHBReq *pData);
#endif /* FEATURE_WLAN_LPHB */
+#ifdef WLAN_FEATURE_EXTSCAN
+VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
+ tSirEXTScanStartReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
+ tSirEXTScanStopReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
+ tSirEXTScanGetCachedResultsReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
+ tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanSetBssidHotListReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
+ tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
+ tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
+#endif /* WLAN_FEATURE_EXTSCAN */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
tSirLLStatsSetReq *wdaRequest);
@@ -12579,6 +12598,56 @@
break;
}
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
+#ifdef WLAN_FEATURE_EXTSCAN
+ case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
+ {
+ WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
+ (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_START_REQ:
+ {
+ WDA_ProcessEXTScanStartReq(pWDA,
+ (tSirEXTScanStartReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_STOP_REQ:
+ {
+ WDA_ProcessEXTScanStopReq(pWDA,
+ (tSirEXTScanStopReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
+ {
+ WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
+ (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
+ {
+ WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
+ (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
+ {
+ WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
+ (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
+ {
+ WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
+ (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
+ {
+ WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
+ (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
+ break;
+ }
+#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WDA_UT
case WDA_WDI_EVENT_MSG:
{
@@ -13571,6 +13640,104 @@
}
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
+#ifdef WLAN_FEATURE_EXTSCAN
+ case WDI_EXTSCAN_PROGRESS_IND:
+ case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
+ case WDI_EXTSCAN_SCAN_RESULT_IND:
+ case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
+ case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
+ {
+ void *pEXTScanData;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+ tANI_U16 indType;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "Received WDI_EXTSCAN Indications from FW");
+ /*sanity check*/
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pWDA is NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+ if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
+ {
+ indType = WDA_EXTSCAN_PROGRESS_IND;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
+ }
+ if (wdiLowLevelInd->wdiIndicationType ==
+ WDI_EXTSCAN_SCAN_AVAILABLE_IND)
+ {
+ indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
+ }
+ if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
+ {
+ indType = WDA_EXTSCAN_SCAN_RESULT_IND;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
+ }
+ if (wdiLowLevelInd->wdiIndicationType ==
+ WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
+ {
+ indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
+ }
+ if (wdiLowLevelInd->wdiIndicationType ==
+ WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
+ {
+ indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
+ }
+
+ pEXTScanData =
+ (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
+ if (NULL == pEXTScanData)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
+ __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if(pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext,
+ indType,
+ pEXTScanData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ }
+ break;
+ }
+#endif /* WLAN_FEATURE_EXTSCAN */
+
default:
{
/* TODO error */
@@ -16062,6 +16229,970 @@
}
vos_mem_free(pData);
}
+
+#ifdef WLAN_FEATURE_EXTSCAN
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanStartRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Start Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanStopRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Stop Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD call back function called", __func__);
+ pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanGetCachedResultsRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Get Cached Results Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext,
+ WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Get Capabilities Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext,
+ WDA_EXTSCAN_GET_CAPABILITIES_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Set BSSID Hotlist Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext,
+ WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
+
+ DESCRIPTION
+ API to send EXTScan ReSet BSSID Hotlist Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext,
+ WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Set Significant RSSI Change RSP to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext,
+ WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Set Significant RSSI Change RSP to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
+ void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return;
+ }
+
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWDA received NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ goto error;
+ }
+
+ pCallbackContext = pMac->sme.pEXTScanCallbackContext;
+
+ if (pMac->sme.pEXTScanIndCb)
+ {
+ pMac->sme.pEXTScanIndCb(pCallbackContext,
+ WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
+ pEventData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ VOS_ASSERT(0);
+ }
+
+
+error:
+
+ if (pWdaParams->wdaWdiApiMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if (pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanStartReq
+
+ DESCRIPTION
+ API to send EXTScan Start Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
+ tSirEXTScanStartReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanStartReq((void *)wdaRequest,
+ (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanStopReq
+
+ DESCRIPTION
+ API to send EXTScan Start Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
+ tSirEXTScanStopReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanStopReq((void *)wdaRequest,
+ (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
+
+ DESCRIPTION
+ API to send EXTScan Get Cached Results Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
+ tSirEXTScanGetCachedResultsReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
+ (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
+
+ DESCRIPTION
+ API to send EXTScan Get Capabilities Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
+ tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
+ (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
+
+ DESCRIPTION
+ API to send Set BSSID Hotlist Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanSetBssidHotListReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
+ (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
+
+ DESCRIPTION
+ API to send Reset BSSID Hotlist Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
+ (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
+
+ DESCRIPTION
+ API to send Set Significant RSSI Change Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
+ tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
+ (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
+
+ DESCRIPTION
+ API to send Reset Significant RSSI Change Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
+ tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = wdaRequest;
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+
+ status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
+ (WDI_EXTScanResetSignfRSSIChangeRspCb)
+ WDA_EXTScanResetSignfRSSIChangeRspCallback,
+ (void *)pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure to request. Free all the memory " );
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+#endif /* WLAN_FEATURE_EXTSCAN */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
/*==========================================================================