wlan: Monitor Mode.
This change contains
1)interaction with user using iwpriv commands.
2)interaction with firmware using WDI req/resp
in case of monitor mode.
3)Start req send to firmware will share the
monitor mode configuration with firmware
as per user request.
Change-Id: Iba823320f1a111910d8c8094aca5723640d1eb9c
CRs-Fixed: 816464
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 453d6a9..7957ca9 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -260,6 +260,8 @@
tANI_U32 val);
+VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
+VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
/*
* FUNCTION: WDA_ProcessNanRequest
* Process NAN request
@@ -14143,6 +14145,18 @@
WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
break;
}
+
+ case WDA_MON_START_REQ:
+ {
+ WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
+ break;
+ }
+ case WDA_MON_STOP_REQ:
+ {
+ WDA_ProcessMonStopReq(pWDA,NULL);
+ break;
+ }
+
default:
{
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
@@ -19044,3 +19058,107 @@
}
return CONVERT_WDI2VOS_STATUS(status) ;
}
+void WDA_MonStartRspCallback(void *pEventData, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+
+ 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 ;
+ }
+
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+
+VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest)
+{
+
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ FL("%s: "), __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ FL("%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_MonStartReq((void *)wdaRequest,
+ (WDI_MonStartRspCb)WDA_MonStartRspCallback,
+ (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);
+}
+
+void WDA_MonStopRspCallback(void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+
+ 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 ;
+ }
+
+ vos_mem_free(pWdaParams) ;
+
+ return;
+}
+
+VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
+{
+
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ tWDA_ReqParams *pWdaParams;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ FL("%s: "), __func__);
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ FL("%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_MonStopReq((WDI_MonStopRspCb)WDA_MonStopRspCallback,
+ (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);
+}