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/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 1c98a53..ff5410e 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -767,6 +767,9 @@
/* WDA_GET_ROAMCANDIDATEIND **************************************************/
# define WDA_GET_ROAMCANDIDATEIND(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->roamCandidateInd)
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+#define WDA_GET_EXTSCANFULLSCANRESIND(pRxMeta) (((WDI_DS_RxMetaInfoType*)(pRxMeta))->extscanBuffer)
+#endif
/* WDA_GET_RX_RSSI_DB ********************************************************/
// Volans RF
# define WDA_RSSI_OFFSET 100
@@ -1213,6 +1216,32 @@
eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
tAniBool sendRegHint);
+#ifdef WLAN_FEATURE_EXTSCAN
+#define WDA_EXTSCAN_GET_CAPABILITIES_REQ SIR_HAL_EXTSCAN_GET_CAPABILITIES_REQ
+#define WDA_EXTSCAN_GET_CAPABILITIES_RSP SIR_HAL_EXTSCAN_GET_CAPABILITIES_RSP
+#define WDA_EXTSCAN_START_REQ SIR_HAL_EXTSCAN_START_REQ
+#define WDA_EXTSCAN_START_RSP SIR_HAL_EXTSCAN_START_RSP
+#define WDA_EXTSCAN_STOP_REQ SIR_HAL_EXTSCAN_STOP_REQ
+#define WDA_EXTSCAN_STOP_RSP SIR_HAL_EXTSCAN_STOP_RSP
+#define WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ SIR_HAL_EXTSCAN_SET_BSS_HOTLIST_REQ
+#define WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP SIR_HAL_EXTSCAN_SET_BSS_HOTLIST_RSP
+#define WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ SIR_HAL_EXTSCAN_RESET_BSS_HOTLIST_REQ
+#define WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP SIR_HAL_EXTSCAN_RESET_BSS_HOTLIST_RSP
+#define WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ SIR_HAL_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ
+#define WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP SIR_HAL_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP
+#define WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ SIR_HAL_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ
+#define WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP SIR_HAL_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP
+#define WDA_EXTSCAN_GET_CACHED_RESULTS_REQ SIR_HAL_EXTSCAN_GET_CACHED_RESULTS_REQ
+#define WDA_EXTSCAN_GET_CACHED_RESULTS_RSP SIR_HAL_EXTSCAN_GET_CACHED_RESULTS_RSP
+
+#define WDA_EXTSCAN_PROGRESS_IND SIR_HAL_EXTSCAN_PROGRESS_IND
+#define WDA_EXTSCAN_SCAN_AVAILABLE_IND SIR_HAL_EXTSCAN_SCAN_AVAILABLE_IND
+#define WDA_EXTSCAN_SCAN_RESULT_IND SIR_HAL_EXTSCAN_SCAN_RESULT_IND
+#define WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND SIR_HAL_EXTSCAN_HOTLIST_MATCH_IND
+#define WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND SIR_HAL_EXTSCAN_SIGNF_WIFI_CHANGE_IND
+#endif /* WLAN_FEATURE_EXTSCAN */
+
+
#define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames
#define halTxFrame(hHal, pFrmBuf, frmLen, frmType, txDir, tid, pCompFunc, pData, txFlag) \
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
/*==========================================================================
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index d7d6dd1..f354107 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -405,6 +405,14 @@
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
WDI_LL_STATS_RESULTS_IND,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_EXTSCAN_PROGRESS_IND,
+ WDI_EXTSCAN_SCAN_AVAILABLE_IND,
+ WDI_EXTSCAN_SCAN_RESULT_IND,
+ WDI_EXTSCAN_GET_CAPABILITIES_IND,
+ WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND,
+ WDI_EXTSCAN_SIGN_RSSI_RESULT_IND,
+#endif
WDI_MAX_IND
}WDI_LowLevelIndEnumType;
@@ -889,6 +897,10 @@
/*Link Layer Statistics from FW*/
void *pLinkLayerStatsResults;
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ /*EXTSCAN Results from FW*/
+ void *pEXTScanIndData;
+#endif
} wdiIndicationData;
}WDI_LowLevelIndType;
@@ -5614,6 +5626,155 @@
void* pUserData;
} WDI_DelPeriodicTxPtrnParamsType;
+#ifdef WLAN_FEATURE_EXTSCAN
+
+#define WDI_WLAN_EXTSCAN_MAX_CHANNELS 16
+#define WDI_WLAN_EXTSCAN_MAX_BUCKETS 16
+#define WDI_WLAN_EXTSCAN_MAX_HOTLIST_APS 128
+#define WDI_WLAN_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS 64
+
+typedef enum
+{
+ WDI_WIFI_BAND_UNSPECIFIED,
+ WDI_WIFI_BAND_BG = 1, // 2.4 GHz
+ WDI_WIFI_BAND_A = 2, // 5 GHz without DFS
+ WDI_WIFI_BAND_ABG = 3, // 2.4 GHz + 5 GHz; no DFS
+ WDI_WIFI_BAND_A_DFS = 4, // 5 GHz DFS only
+ WDI_WIFI_BAND_A_WITH_DFS = 6, // 5 GHz with DFS
+ WDI_WIFI_BAND_ABG_WITH_DFS = 7, // 2.4 GHz + 5 GHz with DFS
+
+ /* Keep it last */
+ WDI_WIFI_BAND_MAX
+} WDI_WifiBand;
+
+typedef struct
+{
+ wpt_uint32 channel; // frequency
+ wpt_uint32 dwellTimeMs; // dwell time hint
+ wpt_uint8 passive; // 0 => active,
+ // 1 => passive scan; ignored for DFS
+ wpt_uint8 chnlClass;
+} WDI_WifiScanChannelSpec;
+
+typedef struct
+{
+ wpt_uint8 bucket; // bucket index, 0 based
+ WDI_WifiBand band; // when UNSPECIFIED, use channel list
+
+ /*
+ * desired period, in millisecond; if this is too
+ * low, the firmware should choose to generate results as fast as
+ * it can instead of failing the command byte
+ */
+ wpt_uint32 period;
+
+ /*
+ * 0 => normal reporting (reporting rssi history
+ * only, when rssi history buffer is % full)
+ * 1 => same as 0 + report a scan completion event after scanning
+ * this bucket
+ * 2 => same as 1 + forward scan results (beacons/probe responses + IEs)
+ * in real time to HAL
+ */
+ wpt_uint8 reportEvents;
+
+ wpt_uint8 numChannels;
+
+ /*
+ * channels to scan; these may include DFS channels
+ */
+ WDI_WifiScanChannelSpec channels[WDI_WLAN_EXTSCAN_MAX_CHANNELS];
+} WDI_WifiScanBucketSpec;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+ wpt_uint32 basePeriod; // base timer period
+ wpt_uint32 maxAPperScan;
+
+ /* in %, when buffer is this much full, wake up host */
+ wpt_uint32 reportThreshold;
+
+ wpt_uint8 numBuckets;
+ WDI_WifiScanBucketSpec buckets[WDI_WLAN_EXTSCAN_MAX_BUCKETS];
+} WDI_EXTScanStartReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanStopReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+
+ /*
+ * 1 return cached results and flush it
+ * 0 return cached results and do not flush
+ */
+ wpt_boolean flush;
+} WDI_EXTScanGetCachedResultsReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanGetCapabilitiesReqParams;
+
+typedef struct
+{
+ wpt_uint8 bssid[6]; /* BSSID */
+ wpt_int32 low; // low threshold
+ wpt_int32 high; // high threshold
+ wpt_uint32 channel; // channel hint
+} WDI_APThresholdParam;
+
+typedef struct
+{
+ wpt_int32 requestId;
+ wpt_int8 sessionId; // session Id mapped to vdev_id
+
+ wpt_int32 numAp; // number of hotlist APs
+ WDI_APThresholdParam ap[WDI_WLAN_EXTSCAN_MAX_HOTLIST_APS]; // hotlist APs
+} WDI_EXTScanSetBSSIDHotlistReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanResetBSSIDHotlistReqParams;
+
+
+typedef struct
+{
+ wpt_int32 requestId;
+ wpt_int8 sessionId; // session Id mapped to vdev_id
+
+ /* number of samples for averaging RSSI */
+ wpt_int32 rssiSampleSize;
+
+ /* number of missed samples to confirm AP loss */
+ wpt_int32 lostApSampleSize;
+
+ /* number of APs breaching threshold required for firmware
+ * to generate event
+ */
+ wpt_int32 minBreaching;
+
+ wpt_int32 numAp; // number of hotlist APs
+ WDI_APThresholdParam ap[WDI_WLAN_EXTSCAN_MAX_HOTLIST_APS]; // hotlist APs
+} WDI_EXTScanSetSignfRSSIChangeReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanResetSignfRSSIChangeReqParams;
+#endif /* WLAN_FEATURE_EXTSCAN */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
typedef struct
{
@@ -7498,6 +7659,24 @@
typedef void (*WDI_GetBcnMissRateCb)(wpt_uint8 status, wpt_uint32 bcnMissRate,
void* pUserData);
+#ifdef WLAN_FEATURE_EXTSCAN
+typedef void (*WDI_EXTScanStartRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanStopRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanGetCachedResultsRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanGetCapabilitiesRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanSetBSSIDHotlistRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanResetBSSIDHotlistRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanSetSignfRSSIChangeRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanResetSignfRSSIChangeRspCb)(void *pEventData,
+ void *pUserData);
+#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
typedef void (*WDI_LLStatsSetRspCb)(void *pEventData,
@@ -10588,6 +10767,146 @@
);
#endif /* FEATURE_WLAN_LPHB */
+#ifdef WLAN_FEATURE_EXTSCAN
+/**
+ @brief WDI_EXTScanStartReq
+ This API is called to send EXTScan start request to FW
+
+ @param pwdiEXTScanStartReqParams : pointer to the request params.
+ wdiEXTScanStartRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanStartReq
+(
+ WDI_EXTScanStartReqParams* pwdiEXTScanStartReqParams,
+ WDI_EXTScanStartRspCb wdiEXTScanStartRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanStopReq
+ This API is called to stop the EXTScan operations in the FW
+
+ @param pwdiEXTScanStopReqParams : pointer to the request params.
+ wdiEXTScanStopRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanStopReq
+(
+ WDI_EXTScanStopReqParams* pwdiEXTScanStopReqParams,
+ WDI_EXTScanStopRspCb wdiEXTScanStopRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanGetCachedResultsReq
+ This API is called to send get link layer stats request in FW
+
+ @param pwdiEXTScanGetCachedResultsReqParams : pointer to the request params.
+ wdiEXTScanGetCachedResultsRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanGetCachedResultsReq
+(
+ WDI_EXTScanGetCachedResultsReqParams* pwdiEXTScanGetCachedResultsReqParams,
+ WDI_EXTScanGetCachedResultsRspCb wdiEXTScanGetCachedResultsRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanGetCapabilitiesReq
+ This API is called to send get EXTScan capabilities from FW
+
+ @param pwdiEXTScanGetCachedResultsReqParams : pointer to the request params.
+ wdiEXTScanGetCachedResultsRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanGetCapabilitiesReq
+(
+ WDI_EXTScanGetCapabilitiesReqParams* pwdiEXTScanGetCapabilitiesReqParams,
+ WDI_EXTScanGetCapabilitiesRspCb wdiEXTScanGetCapabilitiesRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanSetBSSIDHotlistReq
+ This API is called to send Set BSSID Hotlist Request FW
+
+ @param pwdiEXTScanSetBssidHotlistReqParams : pointer to the request params.
+ wdiEXTScanSetBSSIDHotlistRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanSetBSSIDHotlistReq
+(
+ WDI_EXTScanSetBSSIDHotlistReqParams* pwdiEXTScanSetBSSIDHotlistReqParams,
+ WDI_EXTScanSetBSSIDHotlistRspCb wdiEXTScanSetBSSIDHotlistRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanResetBSSIDHotlistReq
+ This API is called to send Reset BSSID Hotlist Request FW
+
+ @param pwdiEXTScanResetBssidHotlistReqParams : pointer to the request params.
+ wdiEXTScanGetCachedResultsRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanResetBSSIDHotlistReq
+(
+ WDI_EXTScanResetBSSIDHotlistReqParams* pwdiEXTScanResetBSSIDHotlistReqParams,
+ WDI_EXTScanResetBSSIDHotlistRspCb wdiEXTScanResetBSSIDHotlistRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanSetSignfRSSIChangeReq
+ This API is called to send Set Significant RSSI Request FW
+
+ @param pwdiEXTScanSetSignfRSSIChangeReqParams : pointer to the request params.
+ wdiEXTScanSetSignfRSSIChangeRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanSetSignfRSSIChangeReq
+(
+ WDI_EXTScanSetSignfRSSIChangeReqParams*
+ pwdiEXTScanSetSignfRSSIChangeReqParams,
+ WDI_EXTScanSetSignfRSSIChangeRspCb wdiEXTScanSetSignfRSSIChangeRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanResetSignfRSSIChangeReq
+ This API is called to send Reset BSSID Hotlist Request FW
+
+ @param pwdiEXTScanResetSignfRSSIChangeReqParams : pointer to the request params.
+ wdiEXTScanResetSignfRSSIChangeRs : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanResetSignfRSSIChangeReq
+(
+ WDI_EXTScanResetSignfRSSIChangeReqParams*
+ pwdiEXTScanResetSignfRSSIChangeReqParams,
+ WDI_EXTScanResetSignfRSSIChangeRspCb wdiEXTScanResetSignfRSSIChangeRspCb,
+ void* pUserData
+);
+#endif /* WLAN_FEATURE_EXTSCAN */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
/**
@brief WDI_LLStatsSetReq
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h b/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h
index be9a9cd..560b848 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_bd.h
@@ -304,10 +304,19 @@
#endif
#ifdef WCN_PRONTO
+#ifdef WLAN_FEATURE_EXTSCAN
+ wpt_uint32 extscanBuffer:1;
+#else
wpt_uint32 reserved3: 1;
+#endif
wpt_uint32 rxDXEPriorityRouting:1;
#else
- wpt_uint32 reserved3:2;
+#ifdef WLAN_FEATURE_EXTSCAN
+ wpt_uint32 extscanBuffer:1;
+ wpt_uint32 reserved3: 1;
+#else
+ wpt_uint32 reserved3: 2;
+#endif
#endif //WCN_PRONTO
@@ -322,9 +331,18 @@
wpt_uint32 tid:4;
#ifdef WCN_PRONTO
wpt_uint32 rxDXEPriorityRouting:1;
- wpt_uint32 reserved3: 1;
+#ifdef WLAN_FEATURE_EXTSCAN
+ wpt_uint32 extscanBuffer:1;
#else
- wpt_uint32 reserved3:2;
+ wpt_uint32 reserved3: 1;
+#endif
+#else
+#ifdef WLAN_FEATURE_EXTSCAN
+ wpt_uint32 reserved3: 1;
+ wpt_uint32 extscanBuffer:1;
+#else
+ wpt_uint32 reserved3: 2;
+#endif
#endif //WCN_PRONTO
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
wpt_uint32 roamCandidateInd:1;
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h
index fcffa68..4540f31 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_dp.h
@@ -295,6 +295,9 @@
#define WDI_RX_BD_GET_OFFLOADSCANLEARN( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->offloadScanLearn)
#define WDI_RX_BD_GET_ROAMCANDIDATEIND( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->roamCandidateInd)
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+#define WDI_RX_BD_GET_EXTSCANFULLSCANRESIND( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->extscanBuffer)
+#endif
/*------------ RSSI and SNR Information extraction -------------*/
#define WDI_RX_BD_GET_RSSI0( _pvBDHeader ) \
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index efb5f9a..d564f4e 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -451,6 +451,16 @@
WDI_LL_STATS_CLEAR_REQ = 92,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_EXTSCAN_START_REQ = 93,
+ WDI_EXTSCAN_STOP_REQ = 94,
+ WDI_EXTSCAN_GET_CACHED_RESULTS_REQ = 95,
+ WDI_EXTSCAN_GET_CAPABILITIES_REQ = 96,
+ WDI_EXTSCAN_SET_BSSID_HOTLIST_REQ = 97,
+ WDI_EXTSCAN_RESET_BSSID_HOTLIST_REQ = 98,
+ WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ = 99,
+ WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ = 100,
+#endif
WDI_MAX_REQ,
/*Send a suspend Indication down to HAL*/
@@ -764,6 +774,16 @@
WDI_LL_STATS_CLEAR_RSP = 92,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_EXTSCAN_START_RSP = 95,
+ WDI_EXTSCAN_STOP_RSP = 96,
+ WDI_EXTSCAN_GET_CACHED_RESULTS_RSP = 97,
+ WDI_EXTSCAN_GET_CAPABILITIES_RSP = 98,
+ WDI_EXTSCAN_SET_HOTLIST_BSSID_RSP = 99,
+ WDI_EXTSCAN_RESET_HOTLIST_BSSID_RSP = 100,
+ WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP = 101,
+ WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP = 102,
+#endif
/*-------------------------------------------------------------------------
Indications
!! Keep these last in the enum if possible
@@ -833,6 +853,13 @@
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
WDI_HAL_LL_STATS_RESULTS_IND = WDI_HAL_IND_MIN + 20,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_HAL_EXTSCAN_PROGRESS_IND = WDI_HAL_IND_MIN + 23,
+ WDI_HAL_EXTSCAN_SCAN_AVAILABLE_IND = WDI_HAL_IND_MIN + 24,
+ WDI_HAL_EXTSCAN_RESULT_IND = WDI_HAL_IND_MIN + 25,
+ WDI_HAL_EXTSCAN_BSSID_HOTLIST_RESULT_IND = WDI_HAL_IND_MIN + 26,
+ WDI_HAL_EXTSCAN_SIG_RSSI_RESULT_IND = WDI_HAL_IND_MIN + 27,
+#endif
WDI_MAX_RESP
}WDI_ResponseEnumType;
@@ -5775,6 +5802,153 @@
WDI_ControlBlockType* pWDICtx,
WDI_EventInfoType* pEventData
);
+
+#ifdef WLAN_FEATURE_EXTSCAN
+WDI_Status
+WDI_ProcessEXTScanStartReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+WDI_Status
+WDI_ProcessEXTScanStopReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+WDI_Status
+WDI_ProcessEXTScanStartRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+WDI_Status
+WDI_ProcessEXTScanStopRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanGetCachedResultsReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+WDI_Status
+WDI_ProcessEXTScanGetCachedResultsRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanProgressInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanGetCapabilitiesReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanGetCapabilitiesRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanSetBSSIDHotlistReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanSetHotlistBSSIDRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanResetBSSIDHotlistReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanResetHotlistBSSIDRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanSetSignifRSSIChangeReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanSetSignfRSSIChangeRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanResetSignfRSSIChangeReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanResetSignfRSSIChangeRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanScanAvailableInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanResultInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanBssidHotListResultInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
+WDI_ProcessEXTScanSignfRssiResultInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+#endif /* WLAN_FEATURE_EXTSCAN */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
WDI_Status
WDI_ProcessLLStatsSetRsp
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index efc56f9..be4e00e 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -419,6 +419,25 @@
NULL,
NULL,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_ProcessEXTScanStartReq, /* WDI_EXTSCAN_START_REQ */
+ WDI_ProcessEXTScanStopReq, /* WDI_EXTSCAN_STOP_REQ */
+ WDI_ProcessEXTScanGetCachedResultsReq, /* WDI_EXTSCAN_GET_CACHED_RESULTS_REQ */
+ WDI_ProcessEXTScanGetCapabilitiesReq, /* WDI_EXTSCAN_GET_CAPABILITIES_REQ */
+ WDI_ProcessEXTScanSetBSSIDHotlistReq, /* WDI_EXTSCAN_SET_BSSID_HOTLIST_REQ */
+ WDI_ProcessEXTScanResetBSSIDHotlistReq, /* WDI_EXTSCAN_RESET_BSSID_HOTLIST_REQ */
+ WDI_ProcessEXTScanSetSignifRSSIChangeReq, /* WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ */
+ WDI_ProcessEXTScanResetSignfRSSIChangeReq, /* WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ */
+#else
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#endif /* WLAN_FEATURE_EXTSCAN */
/*-------------------------------------------------------------------------
Indications
-------------------------------------------------------------------------*/
@@ -654,6 +673,25 @@
NULL,
NULL,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_ProcessEXTScanStartRsp, /* WDI_EXTSCAN_START_RSP */
+ WDI_ProcessEXTScanStopRsp, /* WDI_EXTSCAN_STOP_RSP */
+ WDI_ProcessEXTScanGetCachedResultsRsp, /* WDI_EXTSCAN_GET_CACHED_RESULTS_RSP */
+ WDI_ProcessEXTScanGetCapabilitiesRsp, /* WDI_EXTSCAN_GET_CAPABILITIES_RSP */
+ WDI_ProcessEXTScanSetHotlistBSSIDRsp, /* WDI_EXTSCAN_SET_HOTLIST_BSSID_RSP */
+ WDI_ProcessEXTScanResetHotlistBSSIDRsp, /* WDI_EXTSCAN_RESET_HOTLIST_BSSID_RSP */
+ WDI_ProcessEXTScanSetSignfRSSIChangeRsp, /* WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP */
+ WDI_ProcessEXTScanResetSignfRSSIChangeRsp, /* WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP */
+#else
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#endif /* WLAN_FEATURE_EXTSCAN */
/*---------------------------------------------------------------------
Indications
---------------------------------------------------------------------*/
@@ -719,6 +757,19 @@
#else
NULL,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_ProcessEXTScanProgressInd, /* WDI_HAL_EXTSCAN_PROGRESS_IND */
+ WDI_ProcessEXTScanScanAvailableInd, /* WDI_HAL_EXTSCAN_SCAN_AVAILABLE_IND */
+ WDI_ProcessEXTScanResultInd, /* WDI_HAL_EXTSCAN_RESULT_IND */
+ WDI_ProcessEXTScanBssidHotListResultInd, /* WDI_HAL_EXTSCAN_BSSID_HOTLIST_RESULT_IND */
+ WDI_ProcessEXTScanSignfRssiResultInd, /* WDI_HAL_EXTSCAN_SIG_RSSI_RESULT_IND */
+#else
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#endif /* WLAN_FEATURE_EXTSCAN */
};
@@ -1041,6 +1092,16 @@
CASE_RETURN_STRING( WDI_LL_STATS_GET_REQ);
CASE_RETURN_STRING( WDI_LL_STATS_CLEAR_REQ);
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ CASE_RETURN_STRING( WDI_EXTSCAN_START_REQ);
+ CASE_RETURN_STRING( WDI_EXTSCAN_STOP_REQ);
+ CASE_RETURN_STRING( WDI_EXTSCAN_GET_CACHED_RESULTS_REQ);
+ CASE_RETURN_STRING( WDI_EXTSCAN_GET_CAPABILITIES_REQ);
+ CASE_RETURN_STRING( WDI_EXTSCAN_SET_BSSID_HOTLIST_REQ);
+ CASE_RETURN_STRING( WDI_EXTSCAN_RESET_BSSID_HOTLIST_REQ);
+ CASE_RETURN_STRING( WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ);
+ CASE_RETURN_STRING( WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ);
+#endif /* WLAN_FEATURE_EXTSCAN */
default:
return "Unknown WDI MessageId";
}
@@ -1155,6 +1216,22 @@
CASE_RETURN_STRING( WDI_LL_STATS_GET_RSP);
CASE_RETURN_STRING( WDI_LL_STATS_CLEAR_RSP);
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ CASE_RETURN_STRING( WDI_EXTSCAN_START_RSP);
+ CASE_RETURN_STRING( WDI_EXTSCAN_STOP_RSP);
+ CASE_RETURN_STRING( WDI_EXTSCAN_GET_CACHED_RESULTS_RSP);
+ CASE_RETURN_STRING( WDI_EXTSCAN_GET_CAPABILITIES_RSP);
+ CASE_RETURN_STRING( WDI_EXTSCAN_SET_HOTLIST_BSSID_RSP);
+ CASE_RETURN_STRING( WDI_EXTSCAN_RESET_HOTLIST_BSSID_RSP);
+ CASE_RETURN_STRING( WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP);
+ CASE_RETURN_STRING( WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP);
+ CASE_RETURN_STRING( WDI_HAL_EXTSCAN_PROGRESS_IND);
+ CASE_RETURN_STRING( WDI_HAL_EXTSCAN_SCAN_AVAILABLE_IND);
+ CASE_RETURN_STRING( WDI_HAL_EXTSCAN_RESULT_IND);
+ CASE_RETURN_STRING( WDI_HAL_EXTSCAN_BSSID_HOTLIST_RESULT_IND);
+ CASE_RETURN_STRING( WDI_HAL_EXTSCAN_SIG_RSSI_RESULT_IND);
+
+#endif /* WLAN_FEATURE_EXTSCAN */
default:
return "Unknown WDI MessageId";
}
@@ -23449,6 +23526,24 @@
case WDI_LL_STATS_CLEAR_REQ:
return WLAN_HAL_LL_CLEAR_STATS_REQ;
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ case WDI_EXTSCAN_START_REQ:
+ return WLAN_HAL_EXT_SCAN_START_REQ;
+ case WDI_EXTSCAN_STOP_REQ:
+ return WLAN_HAL_EXT_SCAN_STOP_REQ;
+ case WDI_EXTSCAN_GET_CACHED_RESULTS_REQ:
+ return WLAN_HAL_EXT_SCAN_GET_SCAN_REQ;
+ case WDI_EXTSCAN_GET_CAPABILITIES_REQ:
+ return WLAN_HAL_EXT_SCAN_GET_CAP_REQ;
+ case WDI_EXTSCAN_SET_BSSID_HOTLIST_REQ:
+ return WLAN_HAL_BSSID_HOTLIST_SET_REQ;
+ case WDI_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
+ return WLAN_HAL_BSSID_HOTLIST_RESET_REQ;
+ case WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
+ return WLAN_HAL_SIG_RSSI_SET_REQ;
+ case WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
+ return WLAN_HAL_SIG_RSSI_RESET_REQ;
+#endif /* WLAN_FEATURE_EXTSCAN */
default:
return WLAN_HAL_MSG_MAX;
}
@@ -23728,6 +23823,35 @@
case WLAN_HAL_LL_NOTIFY_STATS:
return WDI_HAL_LL_STATS_RESULTS_IND;
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ case WLAN_HAL_EXT_SCAN_START_RSP:
+ return WDI_EXTSCAN_START_RSP;
+ case WLAN_HAL_EXT_SCAN_STOP_RSP:
+ return WDI_EXTSCAN_STOP_RSP;
+ case WLAN_HAL_EXT_SCAN_GET_CAP_RSP:
+ return WDI_EXTSCAN_GET_CAPABILITIES_RSP;
+ case WLAN_HAL_EXT_SCAN_GET_SCAN_RSP:
+ return WDI_EXTSCAN_GET_CACHED_RESULTS_RSP;
+ case WLAN_HAL_BSSID_HOTLIST_SET_RSP:
+ return WDI_EXTSCAN_SET_HOTLIST_BSSID_RSP;
+ case WLAN_HAL_BSSID_HOTLIST_RESET_RSP:
+ return WDI_EXTSCAN_RESET_HOTLIST_BSSID_RSP;
+ case WLAN_HAL_SIG_RSSI_SET_RSP:
+ return WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP;
+ case WLAN_HAL_SIG_RSSI_RESET_RSP:
+ return WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP;
+ case WLAN_HAL_EXT_SCAN_PROGRESS_IND:
+ return WDI_HAL_EXTSCAN_PROGRESS_IND;
+ case WLAN_HAL_EXT_SCAN_RESULT_AVAILABLE_IND:
+ return WDI_HAL_EXTSCAN_SCAN_AVAILABLE_IND;
+ case WLAN_HAL_EXT_SCAN_RESULT_IND:
+ return WDI_HAL_EXTSCAN_RESULT_IND;
+ case WLAN_HAL_BSSID_HOTLIST_RESULT_IND:
+ return WDI_HAL_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
+ case WLAN_HAL_SIG_RSSI_RESULT_IND:
+ return WDI_HAL_EXTSCAN_SIG_RSSI_RESULT_IND;
+#endif /* WLAN_FEATURE_EXTSCAN */
+
default:
return eDRIVER_TYPE_MAX;
}
@@ -30923,3 +31047,1808 @@
WDI_LL_STATS_CLEAR_RSP);
}
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
+
+#ifdef WLAN_FEATURE_EXTSCAN
+
+/**
+ @brief Process EXTSCAN BUffer full indication from FW
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanProgressInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LowLevelIndType wdiInd;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+
+ /* sanity check */
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ /* Fill in the indication parameters */
+ wdiInd.wdiIndicationType = WDI_EXTSCAN_PROGRESS_IND;
+
+ /* extract response and send it to UMAC */
+ wdiInd.wdiIndicationData.pEXTScanIndData = (void *)pEventData->pEventData;
+
+ /* Notify UMAC */
+ if (pWDICtx->wdiLowLevelIndCB)
+ {
+ pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: WDILowLevelIndCb is null", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ return WDI_STATUS_SUCCESS;
+
+} /* End of WDI_ProcessEXTScanProgressInd */
+
+
+/**
+ @brief Process EXTScan Scan Available indication from FW
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanScanAvailableInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LowLevelIndType wdiInd;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+
+ /* sanity check */
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+
+
+ /* Fill in the indication parameters */
+ wdiInd.wdiIndicationType = WDI_EXTSCAN_SCAN_AVAILABLE_IND;
+
+ /* extract response and send it to UMAC */
+ wdiInd.wdiIndicationData.pEXTScanIndData = (void *)pEventData->pEventData;
+
+ /* Notify UMAC */
+ if (pWDICtx->wdiLowLevelIndCB)
+ {
+ pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: WDILowLevelIndCb is null", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ return WDI_STATUS_SUCCESS;
+} /* End of WDI_ProcessEXTScanScanDoneInd */
+
+/**
+ @brief Process EXTScan Result Indication indication from FW
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanResultInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LowLevelIndType wdiInd;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+
+ /* sanity check */
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ /* Fill in the indication parameters */
+ wdiInd.wdiIndicationType = WDI_EXTSCAN_SCAN_RESULT_IND;
+
+ /* extract response and send it to UMAC */
+ wdiInd.wdiIndicationData.pEXTScanIndData = (void *)pEventData->pEventData;
+
+ /* Notify UMAC */
+ if (pWDICtx->wdiLowLevelIndCB)
+ {
+ pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: WDILowLevelIndCb is null", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ return WDI_STATUS_SUCCESS;
+} /* End of WDI_ProcessEXTScanResultInd */
+
+/**
+ @brief Process EXTScan BSSID Hotlist Result Indication indication from FW
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanBssidHotListResultInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LowLevelIndType wdiInd;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+
+ /* sanity check */
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ /* Fill in the indication parameters */
+ wdiInd.wdiIndicationType = WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
+
+ /* extract response and send it to UMAC */
+ wdiInd.wdiIndicationData.pEXTScanIndData = (void *)pEventData->pEventData;
+
+ /* Notify UMAC */
+ if (pWDICtx->wdiLowLevelIndCB)
+ {
+ pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: WDILowLevelIndCb is null", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ return WDI_STATUS_SUCCESS;
+} /* End of WDI_ProcessEXTScanBssidHotListResultInd */
+
+/**
+ @brief Process EXTScan Significant RSSI Result Indication indication from FW
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanSignfRssiResultInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LowLevelIndType wdiInd;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+
+ /* sanity check */
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ /* Fill in the indication parameters */
+ wdiInd.wdiIndicationType = WDI_EXTSCAN_SIGN_RSSI_RESULT_IND;
+
+ /* extract response and send it to UMAC */
+ wdiInd.wdiIndicationData.pEXTScanIndData = (void *)pEventData->pEventData;
+
+ /* Notify UMAC */
+ if (pWDICtx->wdiLowLevelIndCB)
+ {
+ pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: WDILowLevelIndCb is null", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ return WDI_STATUS_SUCCESS;
+} /* End of WDI_ProcessEXTScanSignfRssiResultInd */
+
+/**
+ @brief WDI_EXTScanGetCapabilitiesReq
+
+ @param WDI_EXTScanGetCapabilitiesReqParams: Req parameter for the FW
+ WDI_EXTScanGetCapabilitiesRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_EXTScanGetCapabilitiesReq(
+ WDI_EXTScanGetCapabilitiesReqParams* pwdiEXTScanGetCapabilitiesReqParams,
+ WDI_EXTScanGetCapabilitiesRspCb wdiEXTScanGetCapabilitiesRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_GET_CAPABILITIES_REQ;
+ wdiEventData.pEventData = pwdiEXTScanGetCapabilitiesReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiEXTScanGetCapabilitiesReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanGetCapabilitiesRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanGetCapabilitiesReq -
+ Extended Scan Get Capability request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanGetCapabilitiesReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanGetCapabilitiesReqParams* pwdiEXTScanGetCapabilitiesReqParams;
+ WDI_EXTScanGetCapabilitiesRspCb wdiEXTScanGetCapabilitiesRspCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tHalExtScanGetCapReq halEXTScanGetCapReqParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanGetCapabilitiesReqParams =
+ (WDI_EXTScanGetCapabilitiesReqParams* )pEventData->pEventData;
+ wdiEXTScanGetCapabilitiesRspCb =
+ (WDI_EXTScanGetCapabilitiesRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_GET_CAPABILITIES_REQ,
+ sizeof(halEXTScanGetCapReqParams),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(halEXTScanGetCapReqParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanGetCapabilitiesReqParams,
+ wdiEXTScanGetCapabilitiesRspCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ halEXTScanGetCapReqParams.requestId =
+ pwdiEXTScanGetCapabilitiesReqParams->requestId;
+ halEXTScanGetCapReqParams.sessionId =
+ pwdiEXTScanGetCapabilitiesReqParams->sessionId;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " requestId %u "
+ " sessionId %u ",
+ halEXTScanGetCapReqParams.requestId,
+ halEXTScanGetCapReqParams.sessionId);
+
+ wpalMemoryCopy(pSendBuffer+usDataOffset,
+ &halEXTScanGetCapReqParams,
+ sizeof(halEXTScanGetCapReqParams));
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+
+ /*-------------------------------------------------------------------------
+ Send EXTScan Stop Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanGetCapabilitiesRspCb, pEventData->pUserData,
+ WDI_EXTSCAN_GET_CAPABILITIES_RSP);
+}
+
+/**
+ @brief WDI_EXTScanGetCachedResultsReq
+
+ @param WDI_EXTScanGetCachedResultsReqParams: Req parameter for the FW
+ WDI_EXTScanGetCachedResultsRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+
+WDI_Status
+WDI_EXTScanGetCachedResultsReq(
+ WDI_EXTScanGetCachedResultsReqParams* pwdiEXTScanGetCachedResultsReqParams,
+ WDI_EXTScanGetCachedResultsRspCb wdiEXTScanGetCachedResultsRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_GET_CACHED_RESULTS_REQ;
+ wdiEventData.pEventData = pwdiEXTScanGetCachedResultsReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiEXTScanGetCachedResultsReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanGetCachedResultsRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanGetCachedResultsReq -
+ Extended Scan Get Cached Result request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanGetCachedResultsReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanGetCachedResultsReqParams* pwdiEXTScanGetCachedResultsReqParams;
+ WDI_EXTScanGetCachedResultsRspCb wdiEXTScanGetCachedResultsCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tHalExtScanGetScanReq halEXTScanGetScanReqParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanGetCachedResultsReqParams =
+ (WDI_EXTScanGetCachedResultsReqParams*)pEventData->pEventData;
+ wdiEXTScanGetCachedResultsCb =
+ (WDI_EXTScanGetCachedResultsRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_GET_CACHED_RESULTS_REQ,
+ sizeof(tHalExtScanGetScanReq),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(halEXTScanGetScanReqParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanGetCachedResultsReqParams,
+ wdiEXTScanGetCachedResultsCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ halEXTScanGetScanReqParams.requestId =
+ pwdiEXTScanGetCachedResultsReqParams->requestId;
+ halEXTScanGetScanReqParams.sessionId =
+ pwdiEXTScanGetCachedResultsReqParams->sessionId;
+ halEXTScanGetScanReqParams.flush =
+ pwdiEXTScanGetCachedResultsReqParams->flush;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " requestId %u "
+ " sessionId %u "
+ " flush %u ",
+ halEXTScanGetScanReqParams.requestId,
+ halEXTScanGetScanReqParams.sessionId,
+ halEXTScanGetScanReqParams.flush);
+
+ wpalMemoryCopy(pSendBuffer+usDataOffset,
+ &halEXTScanGetScanReqParams,
+ sizeof(halEXTScanGetScanReqParams));
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+
+ /*-------------------------------------------------------------------------
+ Send EXTScan Stop Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanGetCachedResultsCb, pEventData->pUserData,
+ WDI_EXTSCAN_GET_CACHED_RESULTS_RSP);
+}
+
+/**
+ @brief WDI_EXTScanStopReq
+
+ @param WDI_EXTScanStopReqParams: Req parameter for the FW
+ WDI_EXTScanStopRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_EXTScanStopReq(WDI_EXTScanStopReqParams* pwdiEXTScanStopReqParams,
+ WDI_EXTScanStopRspCb wdiEXTScanStopRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_STOP_REQ;
+ wdiEventData.pEventData = pwdiEXTScanStopReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiEXTScanStopReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanStopRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanStopReq -
+ Extended Scan Stop request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanStopReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanStopReqParams* pwdiEXTScanStopReqParams;
+ WDI_EXTScanStopRspCb wdiEXTScanStopCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tHalExtScanStopReq halEXTScanStopReqParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanStopReqParams = (WDI_EXTScanStopReqParams*)pEventData->pEventData;
+ wdiEXTScanStopCb = (WDI_EXTScanStopRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_STOP_REQ,
+ sizeof(tHalExtScanStopReq),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(halEXTScanStopReqParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanStopReqParams, wdiEXTScanStopCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ halEXTScanStopReqParams.requestId =
+ pwdiEXTScanStopReqParams->requestId;
+ halEXTScanStopReqParams.sessionId =
+ pwdiEXTScanStopReqParams->sessionId;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halEXTScanStopReqParams.requestId %u "
+ " halEXTScanStopReqParams.sessionId %u ",
+ halEXTScanStopReqParams.requestId,
+ halEXTScanStopReqParams.sessionId);
+
+ wpalMemoryCopy(pSendBuffer+usDataOffset,
+ &halEXTScanStopReqParams,
+ sizeof(halEXTScanStopReqParams));
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+
+ /*-------------------------------------------------------------------------
+ Send EXTScan Stop Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanStopCb, pEventData->pUserData,
+ WDI_EXTSCAN_STOP_RSP);
+}
+
+/**
+ @brief WDI_EXTScanStartReq
+
+ @param WDI_EXTScanStartReqParams: Req parameter for the FW
+ WDI_EXTScanStartRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_EXTScanStartReq(WDI_EXTScanStartReqParams* pwdiEXTScanStartReqParams,
+ WDI_EXTScanStartRspCb wdiEXTScanStartRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_START_REQ;
+ wdiEventData.pEventData = pwdiEXTScanStartReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiEXTScanStartReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanStartRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanStartReq -
+ Extended Scan Start Request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanStartReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanStartReqParams* pwdiEXTScanStartReqParams;
+ WDI_EXTScanStartRspCb wdiEXTScanStartCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tpHalExtScanStartReq pHalExtScanStartReqParams;
+ int i = 0;
+ int j = 0;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanStartReqParams =
+ (WDI_EXTScanStartReqParams*)pEventData->pEventData;
+ wdiEXTScanStartCb = (WDI_EXTScanStartRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_START_REQ,
+ sizeof(tHalExtScanStartReq),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tHalExtScanStartReq) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanStartReqParams, wdiEXTScanStartCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pHalExtScanStartReqParams =
+ (tpHalExtScanStartReq ) (pSendBuffer + usDataOffset);
+
+ pHalExtScanStartReqParams->basePeriod = pwdiEXTScanStartReqParams->basePeriod;
+ pHalExtScanStartReqParams->maxApPerScan =
+ pwdiEXTScanStartReqParams->maxAPperScan;
+ pHalExtScanStartReqParams->reportThreshold =
+ pwdiEXTScanStartReqParams->reportThreshold;
+ pHalExtScanStartReqParams->requestId = pwdiEXTScanStartReqParams->requestId;
+ pHalExtScanStartReqParams->sessionId = pwdiEXTScanStartReqParams->sessionId;
+ pHalExtScanStartReqParams->numBuckets = pwdiEXTScanStartReqParams->numBuckets;
+
+ for( i = 0; i < WDI_WLAN_EXTSCAN_MAX_BUCKETS ; i++ )
+ {
+ pHalExtScanStartReqParams->bucketData[i].bucketId =
+ pwdiEXTScanStartReqParams->buckets[i].bucket;
+ pHalExtScanStartReqParams->bucketData[i].channelBand =
+ pwdiEXTScanStartReqParams->buckets[i].band;
+ pHalExtScanStartReqParams->bucketData[i].period =
+ pwdiEXTScanStartReqParams->buckets[i].period;
+ pHalExtScanStartReqParams->bucketData[i].reportEvents =
+ pwdiEXTScanStartReqParams->buckets[i].reportEvents;
+ pHalExtScanStartReqParams->bucketData[i].numChannels =
+ pwdiEXTScanStartReqParams->buckets[i].numChannels;
+
+ for( j = 0; j< WDI_WLAN_EXTSCAN_MAX_CHANNELS; j++)
+ {
+ pHalExtScanStartReqParams->bucketData[i].channelList[j].channel =
+ pwdiEXTScanStartReqParams->buckets[i].channels[j].channel;
+ pHalExtScanStartReqParams->bucketData[i].channelList[j].dwellTimeMs =
+ pwdiEXTScanStartReqParams->buckets[i].channels[j].dwellTimeMs;
+ pHalExtScanStartReqParams->bucketData[i].channelList[j].passive =
+ pwdiEXTScanStartReqParams->buckets[i].channels[j].passive;
+ }
+
+ }
+
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " basePeriod %u maxApPerScan %u reportThreshold %u requestId %u"
+ " sessionId %u numBuckets%u ",
+ pHalExtScanStartReqParams->basePeriod,
+ pHalExtScanStartReqParams->maxApPerScan,
+ pHalExtScanStartReqParams->reportThreshold,
+ pHalExtScanStartReqParams->requestId,
+ pHalExtScanStartReqParams->sessionId,
+ pHalExtScanStartReqParams->numBuckets);
+
+ for( i = 0; i < pHalExtScanStartReqParams->numBuckets ; i++ )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO ,
+ " %d) bucketId %u channelBand %u period %u "
+ " reportEvents %u numChannels %u ",i,
+ pHalExtScanStartReqParams->bucketData[i].bucketId,
+ pHalExtScanStartReqParams->bucketData[i].channelBand,
+ pHalExtScanStartReqParams->bucketData[i].period,
+ pHalExtScanStartReqParams->bucketData[i].reportEvents,
+ pHalExtScanStartReqParams->bucketData[i].numChannels);
+
+ for( j = 0; j< pHalExtScanStartReqParams->bucketData[i].numChannels; j++)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%d) channel %u dwellTimeMs %u passive %u ",j,
+ pHalExtScanStartReqParams->bucketData[i].channelList[j].channel,
+ pHalExtScanStartReqParams->bucketData[i].channelList[j].dwellTimeMs,
+ pHalExtScanStartReqParams->bucketData[i].channelList[j].passive);
+ }
+
+ }
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " size of tHalExtScanStartReq %d ", sizeof(tHalExtScanStartReq) );
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send EXTSCAN Start Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanStartCb, pEventData->pUserData,
+ WDI_EXTSCAN_START_RSP);
+}
+
+/**
+ @brief WDI_EXTScanSetBSSIDHotlistReq
+
+ @param WDI_EXTScanSetBSSIDHotlistReqParams: Req parameter for the FW
+ WDI_EXTScanSetBSSIDHotlistRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_EXTScanSetBSSIDHotlistReq(
+ WDI_EXTScanSetBSSIDHotlistReqParams* pwdiEXTScanSetBSSIDHotlistReqParams,
+ WDI_EXTScanSetBSSIDHotlistRspCb wdiEXTScanSetBSSIDHotlistRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter ",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_SET_BSSID_HOTLIST_REQ;
+ wdiEventData.pEventData = pwdiEXTScanSetBSSIDHotlistReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiEXTScanSetBSSIDHotlistReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanSetBSSIDHotlistRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanSetBSSIDHotlistReq -
+ Extended Scan Set BSSSID Hotlist Request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanSetBSSIDHotlistReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanSetBSSIDHotlistReqParams* pwdiEXTScanSetBSSIDHotlistReqParams;
+ WDI_EXTScanSetBSSIDHotlistRspCb wdiEXTScanSetBSSIDHotlistRspCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tpHalBssidHotlistSetReq pHalBssidHotlistSetReqParams;
+ int i;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanSetBSSIDHotlistReqParams =
+ (WDI_EXTScanSetBSSIDHotlistReqParams *)pEventData->pEventData;
+ wdiEXTScanSetBSSIDHotlistRspCb =
+ (WDI_EXTScanSetBSSIDHotlistRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_SET_BSSID_HOTLIST_REQ,
+ sizeof(tHalBssidHotlistSetReq),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tHalBssidHotlistSetReq) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanSetBSSIDHotlistReqParams,
+ wdiEXTScanSetBSSIDHotlistRspCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pHalBssidHotlistSetReqParams =
+ (tpHalBssidHotlistSetReq) (pSendBuffer + usDataOffset);
+
+ pHalBssidHotlistSetReqParams->requestId =
+ pwdiEXTScanSetBSSIDHotlistReqParams->requestId;
+
+ pHalBssidHotlistSetReqParams->sessionId =
+ pwdiEXTScanSetBSSIDHotlistReqParams->sessionId;
+
+ pHalBssidHotlistSetReqParams->numAp =
+ pwdiEXTScanSetBSSIDHotlistReqParams->numAp;
+
+ for( i = 0; i < WLAN_HAL_EXT_SCAN_MAX_HOTLIST_APS; i++){
+
+ wpalMemoryCopy(pHalBssidHotlistSetReqParams->ap[i].bssid,
+ pwdiEXTScanSetBSSIDHotlistReqParams->ap[i].bssid,
+ WDI_MAC_ADDR_LEN);
+
+ pHalBssidHotlistSetReqParams->ap[i].lowRssiThreshold =
+ pwdiEXTScanSetBSSIDHotlistReqParams->ap[i].low;
+
+ pHalBssidHotlistSetReqParams->ap[i].highRssiThreshold =
+ pwdiEXTScanSetBSSIDHotlistReqParams->ap[i].high;
+
+ pHalBssidHotlistSetReqParams->ap[i].channel =
+ pwdiEXTScanSetBSSIDHotlistReqParams->ap[i].channel;
+
+ }
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "ReqID %u sessionId %u numAp %u ",
+ pHalBssidHotlistSetReqParams->requestId,
+ pHalBssidHotlistSetReqParams->sessionId,
+ pHalBssidHotlistSetReqParams->numAp);
+
+ for( i = 0; i < pHalBssidHotlistSetReqParams->numAp; i++){
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s %d %d) BSSID: %pM lowRssiThreshold %d highRssiThreshold %d Channel %u ",
+ __func__, __LINE__, i,
+ pHalBssidHotlistSetReqParams->ap[i].bssid,
+ pHalBssidHotlistSetReqParams->ap[i].lowRssiThreshold,
+ pHalBssidHotlistSetReqParams->ap[i].highRssiThreshold,
+ pHalBssidHotlistSetReqParams->ap[i].channel);
+
+ }
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+
+ /*-------------------------------------------------------------------------
+ Send EXTScan Stop Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanSetBSSIDHotlistRspCb, pEventData->pUserData,
+ WDI_EXTSCAN_SET_HOTLIST_BSSID_RSP);
+}
+
+/**
+ @brief WDI_EXTScanResetBSSIDHotlistReq
+
+ @param WDI_EXTScanResetBSSIDHotlistReqParams: Req parameter for the FW
+ WDI_EXTScanResetBSSIDHotlistRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_EXTScanResetBSSIDHotlistReq(
+ WDI_EXTScanResetBSSIDHotlistReqParams* pwdiEXTScanResetBSSIDHotlistReqParams,
+ WDI_EXTScanResetBSSIDHotlistRspCb wdiEXTScanResetBSSIDHotlistRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_RESET_BSSID_HOTLIST_REQ;
+ wdiEventData.pEventData = pwdiEXTScanResetBSSIDHotlistReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiEXTScanResetBSSIDHotlistReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanResetBSSIDHotlistRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanResetBSSIDHotlistReq -
+ Extended Scan reset BSSID hotlist Request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanResetBSSIDHotlistReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanResetBSSIDHotlistReqParams* pwdiEXTScanResetBSSIDHotlistReqParams;
+ WDI_EXTScanResetBSSIDHotlistRspCb wdiEXTScanResetBSSIDHotlistRspCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tpHalHotlistResetReq pHalHotlistResetReqParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanResetBSSIDHotlistReqParams =
+ (WDI_EXTScanResetBSSIDHotlistReqParams *)pEventData->pEventData;
+ wdiEXTScanResetBSSIDHotlistRspCb =
+ (WDI_EXTScanResetBSSIDHotlistRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_RESET_BSSID_HOTLIST_REQ,
+ sizeof(tHalHotlistResetReq),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tHalHotlistResetReq) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanResetBSSIDHotlistReqParams,
+ wdiEXTScanResetBSSIDHotlistRspCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pHalHotlistResetReqParams =
+ (tpHalHotlistResetReq) (pSendBuffer+usDataOffset);
+
+ pHalHotlistResetReqParams->requestId =
+ pwdiEXTScanResetBSSIDHotlistReqParams->requestId;
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send EXTScan Stop Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanResetBSSIDHotlistRspCb, pEventData->pUserData,
+ WDI_EXTSCAN_RESET_HOTLIST_BSSID_RSP);
+}
+
+/**
+ @brief WDI_EXTScanSetSignfRSSIChangeReq
+
+ @param WDI_EXTScanSetSignfRSSIChangeReqParams: Req parameter for the FW
+ WDI_EXTScanSetSignfRSSIChangeRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_EXTScanSetSignfRSSIChangeReq(
+ WDI_EXTScanSetSignfRSSIChangeReqParams* pwdiEXTScanSetSignfRSSIChangeReqParams,
+ WDI_EXTScanSetSignfRSSIChangeRspCb wdiEXTScanSetSignfRSSIChangeRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ;
+ wdiEventData.pEventData = pwdiEXTScanSetSignfRSSIChangeReqParams;
+ wdiEventData.uEventDataSize =
+ sizeof(*pwdiEXTScanSetSignfRSSIChangeReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanSetSignfRSSIChangeRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanSetSignifRSSIChangeReq -
+ Extended Scan set Significant RSSI change Request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanSetSignifRSSIChangeReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanSetSignfRSSIChangeReqParams*
+ pwdiEXTScanSetSignfRSSIChangeReqParams;
+ WDI_EXTScanSetSignfRSSIChangeRspCb wdiEXTScanSetSignfRSSIChangeRspCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tpHalSigRssiSetReq pHalSigRssiSetReqParams;
+ int i;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanSetSignfRSSIChangeReqParams =
+ (WDI_EXTScanSetSignfRSSIChangeReqParams *)pEventData->pEventData;
+ wdiEXTScanSetSignfRSSIChangeRspCb =
+ (WDI_EXTScanSetSignfRSSIChangeRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ,
+ sizeof(tHalSigRssiSetReq),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tHalSigRssiSetReq) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanSetSignfRSSIChangeReqParams,
+ wdiEXTScanSetSignfRSSIChangeRspCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pHalSigRssiSetReqParams =
+ (tpHalSigRssiSetReq) (pSendBuffer + usDataOffset);
+
+ pHalSigRssiSetReqParams->requestId =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->requestId;
+ pHalSigRssiSetReqParams->sessionId =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->sessionId;
+ pHalSigRssiSetReqParams->rssiSampleSize =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->rssiSampleSize;
+ pHalSigRssiSetReqParams->lostApSampleSize =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->lostApSampleSize;
+ pHalSigRssiSetReqParams->minBreaching =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->minBreaching;
+ pHalSigRssiSetReqParams->numAp =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->numAp;
+
+
+ for( i = 0; i < WLAN_HAL_EXT_SCAN_MAX_SIG_CHANGE_APS; i++){
+
+ wpalMemoryCopy(pHalSigRssiSetReqParams->ap[i].bssid,
+ pwdiEXTScanSetSignfRSSIChangeReqParams->ap[i].bssid,
+ WDI_MAC_ADDR_LEN);
+
+ pHalSigRssiSetReqParams->ap[i].lowRssiThreshold =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->ap[i].low;
+
+ pHalSigRssiSetReqParams->ap[i].highRssiThreshold =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->ap[i].high;
+
+ pHalSigRssiSetReqParams->ap[i].channel =
+ pwdiEXTScanSetSignfRSSIChangeReqParams->ap[i].channel;
+
+ }
+
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "ReqID %u sessionId %u rssiSampleSize %u lostApSampleSize %u "
+ " minBreaching %u numAp %u ",
+ pHalSigRssiSetReqParams->requestId,
+ pHalSigRssiSetReqParams->sessionId,
+ pHalSigRssiSetReqParams->rssiSampleSize,
+ pHalSigRssiSetReqParams->lostApSampleSize,
+ pHalSigRssiSetReqParams->minBreaching,
+ pHalSigRssiSetReqParams->numAp);
+
+ for( i = 0; i < pHalSigRssiSetReqParams->numAp; i++){
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%d) BSSID: %pM lowRssiThreshold %d highRssiThreshold %d Channel %u ",
+ i,
+ pHalSigRssiSetReqParams->ap[i].bssid,
+ pHalSigRssiSetReqParams->ap[i].lowRssiThreshold,
+ pHalSigRssiSetReqParams->ap[i].highRssiThreshold,
+ pHalSigRssiSetReqParams->ap[i].channel);
+
+ }
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+
+ /*-------------------------------------------------------------------------
+ Send EXTScan Stop Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanSetSignfRSSIChangeRspCb, pEventData->pUserData,
+ WDI_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP);
+}
+
+/**
+ @brief WDI_EXTScanResetSignfRSSIChangeReq
+
+ @param WDI_EXTScanResetSignfRSSIChangeReqParams: Req parameter for the FW
+ WDI_EXTScanResetSignfRSSIChangeRspCb: callback for passing back the response
+ of the Req operation received from the device
+ pUserData: user data will be passed back with the callback
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_EXTScanResetSignfRSSIChangeReq(
+ WDI_EXTScanResetSignfRSSIChangeReqParams*
+ pwdiEXTScanResetSignfRSSIChangeReqParams,
+ WDI_EXTScanResetSignfRSSIChangeRspCb
+ wdiEXTScanResetSignfRSSIChangeRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ;
+ wdiEventData.pEventData = pwdiEXTScanResetSignfRSSIChangeReqParams;
+ wdiEventData.uEventDataSize =
+ sizeof(*pwdiEXTScanResetSignfRSSIChangeReqParams);
+ wdiEventData.pCBfnc = wdiEXTScanResetSignfRSSIChangeRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessEXTScanResetSignfRSSIChangeReq -
+ Extended Scana reset Significant RSSI change Request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessEXTScanResetSignfRSSIChangeReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanResetSignfRSSIChangeReqParams*
+ pwdiEXTScanResetSignfRSSIChangeReqParams;
+ WDI_EXTScanResetSignfRSSIChangeRspCb wdiEXTScanResetSignfRSSIChangeRspCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tpHalSigRssiResetReq pHalSigRssiResetReqParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ pwdiEXTScanResetSignfRSSIChangeReqParams =
+ (WDI_EXTScanResetSignfRSSIChangeReqParams *)pEventData->pEventData;
+ wdiEXTScanResetSignfRSSIChangeRspCb =
+ (WDI_EXTScanResetSignfRSSIChangeRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ,
+ sizeof(tHalSigRssiResetReq),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tHalSigRssiResetReq) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiEXTScanResetSignfRSSIChangeReqParams,
+ wdiEXTScanResetSignfRSSIChangeRspCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pHalSigRssiResetReqParams =
+ (tpHalSigRssiResetReq) (pSendBuffer+usDataOffset);
+
+ pHalSigRssiResetReqParams->requestId =
+ pwdiEXTScanResetSignfRSSIChangeReqParams->requestId;
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiEXTScanResetSignfRSSIChangeRspCb,
+ pEventData->pUserData,
+ WDI_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP);
+}
+
+/**
+ @brief Process Extended Scan Start Rsp function (called when a response
+ is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanStartRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanStartRspCb wdiEXTScanStartRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d",__func__, __LINE__);
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanStartRspCb = (WDI_EXTScanStartRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanStartRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanStartRspCb((void *)pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+
+/**
+ @brief Process Extended Scan Stop Rsp function (called when a response
+ is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanStopRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanStopRspCb wdiEXTScanStopRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d",__func__, __LINE__);
+
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanStopRspCb = (WDI_EXTScanStartRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanStopRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanStopRspCb((void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+/**
+ @brief Process Extended Scan Get Cached Rsp function (called when a response
+ is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanGetCachedResultsRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanGetCachedResultsRspCb wdiEXTScanGetCachedResultsRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanGetCachedResultsRspCb = (WDI_EXTScanStartRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanGetCachedResultsRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanGetCachedResultsRspCb(
+ (void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+/**
+ @brief Process Extended Scan Get Capabilityu Rsp function (called when a response
+ is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanGetCapabilitiesRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanGetCapabilitiesRspCb wdiEXTScanGetCapabilitiesRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanGetCapabilitiesRspCb =
+ (WDI_EXTScanGetCapabilitiesRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanGetCapabilitiesRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanGetCapabilitiesRspCb(
+ (void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+/**
+ @brief Process Extended Scan Set hotlist BSSID Rsp function (called when a
+ response is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanSetHotlistBSSIDRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanSetBSSIDHotlistRspCb wdiEXTScanSetBSSIDHotlistRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanSetBSSIDHotlistRspCb =
+ (WDI_EXTScanSetBSSIDHotlistRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanSetBSSIDHotlistRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanSetBSSIDHotlistRspCb(
+ (void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+/**
+ @brief Process Extended Scan Reset Hotlist BSSID Rsp function (called
+ when a response is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanResetHotlistBSSIDRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanResetBSSIDHotlistRspCb wdiEXTScanResetBSSIDHotlistRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d ",__func__, __LINE__);
+
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanResetBSSIDHotlistRspCb =
+ (WDI_EXTScanResetBSSIDHotlistRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanResetBSSIDHotlistRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanResetBSSIDHotlistRspCb(
+ (void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+/**
+ @brief Process Extended Scan Set Significant RSSI Change Rsp function (called
+ when a response is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanSetSignfRSSIChangeRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanSetSignfRSSIChangeRspCb wdiEXTScanSetSignfRSSIChangeRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d",__func__, __LINE__);
+
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanSetSignfRSSIChangeRspCb =
+ (WDI_EXTScanSetSignfRSSIChangeRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanSetSignfRSSIChangeRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanSetSignfRSSIChangeRspCb(
+ (void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+/**
+ @brief Process Extended Scan Reset Significant RSSI Change Rsp function
+ (called when a response is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessEXTScanResetSignfRSSIChangeRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_EXTScanResetSignfRSSIChangeRspCb wdiEXTScanResetSignfRSSIChangeRspCb;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d Enter",__func__, __LINE__);
+
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanResetSignfRSSIChangeRspCb =
+ (WDI_EXTScanResetSignfRSSIChangeRspCb)pWDICtx->pfncRspCB;
+ if ( NULL == wdiEXTScanResetSignfRSSIChangeRspCb)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Callback function Invalid", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiEXTScanResetSignfRSSIChangeRspCb(
+ (void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+#endif /* WLAN_FEATURE_EXTSCAN */
diff --git a/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h b/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h
index 43f6b9d..9bebb44 100644
--- a/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h
+++ b/CORE/WDI/DP/inc/wlan_qct_wdi_ds.h
@@ -156,6 +156,9 @@
wpt_uint32 offloadScanLearn;
wpt_uint32 roamCandidateInd;
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ wpt_uint32 extscanBuffer;
+#endif
} WDI_DS_RxMetaInfoType;
typedef struct sPktMetaInfo
diff --git a/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c b/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c
index 4360138..29b3630 100644
--- a/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c
+++ b/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c
@@ -658,7 +658,9 @@
pRxMetadata->offloadScanLearn = WDI_RX_BD_GET_OFFLOADSCANLEARN(pBDHeader);
pRxMetadata->roamCandidateInd = WDI_RX_BD_GET_ROAMCANDIDATEIND(pBDHeader);
#endif
-
+#ifdef WLAN_FEATURE_EXTSCAN
+ pRxMetadata->extscanBuffer = WDI_RX_BD_GET_EXTSCANFULLSCANRESIND(pBDHeader);
+#endif
/* typeSubtype in BD doesn't look like correct. Fill from frame ctrl
TL does it for Volans but TL does not know BD for Prima. WDI should do it */
if ( 0 == WDI_RX_BD_GET_FT(pBDHeader) ) {