prima: extscan: Support for SSID hotlist
Code changes to support SSID hotlist.
Change-Id: Iec3ecd109a454e606f41e12cd2cdffaae9e91b12
CRs-Fixed: 834122
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index a73d337..89e77e5 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -233,6 +233,11 @@
tSirEXTScanSetBssidHotListReqParams *wdaRequest);
VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanSetSsidHotListReqParams *wdaRequest);
+VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
+
#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
@@ -14219,6 +14224,18 @@
(tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
break;
}
+ case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
+ {
+ WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
+ (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
+ break;
+ }
+ case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
+ {
+ WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
+ (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
+ break;
+ }
#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WDA_UT
case WDA_WDI_EVENT_MSG:
@@ -15290,6 +15307,7 @@
case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
case WDI_EXTSCAN_SCAN_RESULT_IND:
case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
+ case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
{
void *pEXTScanData;
void *pCallbackContext;
@@ -15336,6 +15354,14 @@
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_SSID_HOTLIST_RESULT_IND)
+ {
+ indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
+ }
pEXTScanData =
(void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
@@ -18519,6 +18545,162 @@
}
/*==========================================================================
+ FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
+
+ DESCRIPTION
+ API to send EXTScan Set SSID Hotlist Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanSetSSIDHotlistRspCallback(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_SSID_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_EXTScanResetSSIDHotlistRspCallback
+
+ DESCRIPTION
+ API to send EXTScan ReSet SSID Hotlist Response to HDD
+
+ PARAMETERS
+ pEventData: Response from FW
+ pUserData:
+===========================================================================*/
+void WDA_EXTScanResetSSIDHotlistRspCallback(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_SSID_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_ProcessEXTScanStartReq
DESCRIPTION
@@ -18775,6 +18957,94 @@
}
return CONVERT_WDI2VOS_STATUS(status);
}
+
+/*==========================================================================
+ FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
+
+ DESCRIPTION
+ API to send Set SSID Hotlist Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanSetSsidHotListReqParams *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_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
+ (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
+ (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_ProcessEXTScanReSetSSIDHotlistReq
+
+ DESCRIPTION
+ API to send Reset SSID Hotlist Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
+ tSirEXTScanResetSsidHotlistReqParams *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_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
+ (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
+ (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