wlan: Add mgmt frame logging init routine

Initialize frame logging providing following config options
to FW during startup:
1. frameType - (Mgmt pkt)
2. frameSize - (128bytes/64bytes)
3. Buffertype - (circular/freeze)
4. enableFlag

Change-Id: Ic4a6f153914ef4e3dcfa9d29dd05bc3cac91e873
CRs-Fixed: 808160
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 01a7788..8efe026 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -5077,6 +5077,57 @@
 }
 
 /*
+ * FUNCTION: WDA_MgmtLoggingInitRspCallback
+ * recieves Mgmt Logging init response from FW
+ */
+void WDA_MgmtLoggingInitRspCallback(WDI_MgmtLoggingRspParamType* wdiRsp,
+                                                            void* pUserData)
+{
+   tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+   tSirMgmtLoggingInitParam *pMgmtLoggingInitParams;
+
+   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 ;
+   }
+
+   if(NULL == pWdaParams->wdaMsgParam)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+              "%s: pWdaParams->wdaMsgParam is NULL", __func__);
+      VOS_ASSERT(0);
+      vos_mem_free(pWdaParams);
+      return ;
+   }
+
+   pMgmtLoggingInitParams = (tSirMgmtLoggingInitParam *)pWdaParams->wdaMsgParam;
+
+   if(pMgmtLoggingInitParams->mgmtlogInitCallback)
+   {
+      pMgmtLoggingInitParams->mgmtlogInitCallback(
+                               pMgmtLoggingInitParams->mgmtlogInitCbContext,
+                               CONVERT_WDI2VOS_STATUS(wdiRsp->wdiStatus));
+   }
+   else
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+              "%s: pMgmtLoggingInitParams callback is NULL", __func__);
+   }
+
+   vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+   vos_mem_free(pWdaParams->wdaMsgParam);
+   vos_mem_free(pWdaParams);
+
+   return;
+}
+
+/*
  * FUNCTION: WDA_SpoofMacAddrRspCallback
  * recieves spoof mac addr response from FW
  */
@@ -9435,6 +9486,82 @@
    }
    return status;
 }
+
+/*
+ * FUNCTION: WDA_ProcessMgmtLoggingInitReq
+ *
+ */
+VOS_STATUS WDA_ProcessMgmtLoggingInitReq(tWDA_CbContext *pWDA,
+                                tSirMgmtLoggingInitParam *pMgmtLoggingInitParam)
+{
+   VOS_STATUS status = VOS_STATUS_SUCCESS;
+   WDI_Status wstatus;
+   WDI_MgmtLoggingInitReqInfoType *wdiMgmtLoggingInitInfo;
+   tWDA_ReqParams *pWdaParams ;
+
+   VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+                                          "------> %s " ,__func__);
+
+   /* Sanity Check*/
+   if(NULL == pMgmtLoggingInitParam)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+                           "%s: pMgmtLoggingInitParam received NULL", __func__);
+      VOS_ASSERT(0) ;
+      return VOS_STATUS_E_FAULT;
+   }
+
+   wdiMgmtLoggingInitInfo = (WDI_MgmtLoggingInitReqInfoType *)vos_mem_malloc(
+                                       sizeof(WDI_MgmtLoggingInitReqInfoType));
+   if(NULL == wdiMgmtLoggingInitInfo)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+                           "%s: VOS MEM Alloc Failure", __func__);
+      VOS_ASSERT(0);
+      vos_mem_free(pMgmtLoggingInitParam);
+      return VOS_STATUS_E_NOMEM;
+   }
+
+   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);
+      vos_mem_free(wdiMgmtLoggingInitInfo);
+      vos_mem_free(pMgmtLoggingInitParam);
+      return VOS_STATUS_E_NOMEM;
+   }
+
+   wdiMgmtLoggingInitInfo->enableFlag=
+                                 pMgmtLoggingInitParam->enableFlag;
+   wdiMgmtLoggingInitInfo->frameType=
+                                 pMgmtLoggingInitParam->frameType;
+   wdiMgmtLoggingInitInfo->frameSize=
+                                 pMgmtLoggingInitParam->frameSize;
+   wdiMgmtLoggingInitInfo->bufferMode=
+                                 pMgmtLoggingInitParam->bufferMode;
+
+   pWdaParams->pWdaContext = pWDA;
+   pWdaParams->wdaMsgParam = pMgmtLoggingInitParam;
+   pWdaParams->wdaWdiApiMsgParam = (void *)wdiMgmtLoggingInitInfo;
+
+   wstatus = WDI_MgmtLoggingInitReq(wdiMgmtLoggingInitInfo,
+                       (WDI_MgmtLoggingInitRspCb)WDA_MgmtLoggingInitRspCallback,
+                        pWdaParams);
+   if(IS_WDI_STATUS_FAILURE(wstatus))
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+              "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
+      status = CONVERT_WDI2VOS_STATUS(wstatus);
+      vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
+      vos_mem_free(pWdaParams->wdaMsgParam);
+      vos_mem_free(pWdaParams);
+   }
+
+   return status;
+}
+
 /*
  * FUNCTION: WDA_WdiIndicationCallback
  * 
@@ -13298,6 +13425,12 @@
                              (tSirWlanSetRxpFilters *)pMsg->bodyptr);
          break;
       }
+      case WDA_MGMT_LOGGING_INIT_REQ:
+      {
+         WDA_ProcessMgmtLoggingInitReq(pWDA,
+                                 (tSirMgmtLoggingInitParam *)pMsg->bodyptr);
+         break;
+      }
       case WDA_SET_HOST_OFFLOAD:
       {
          WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);