wlan: Implemented ioctl to get beacon miss count.
Implemented ioctl, GETBCNMISSRATE, which provides continuous beacon
miss rate, from firmware.
Change-Id: I596aad1d534e81c534a15bb25cd0d8785c79ae48
CRs-Fixed: 656075.
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 42016af..6eefc80 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -208,6 +208,9 @@
static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
#endif // WLAN_FEATURE_GTK_OFFLOAD
+v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
+ tSirBcnMissRateReq *pData);
+
VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
tAniSetTmLevelReq *setTmLevelReq);
#ifdef WLAN_FEATURE_11AC
@@ -12790,6 +12793,10 @@
(tSirStopBatchScanInd *)pMsg->bodyptr);
break;
}
+ case WDA_GET_BCN_MISS_RATE_REQ:
+ WDA_ProcessGetBcnMissRateReq(pWDA,
+ (tSirBcnMissRateReq *)pMsg->bodyptr);
+ break;
#endif
case WDA_HT40_OBSS_SCAN_IND:
@@ -15869,3 +15876,68 @@
}
#endif /* FEATURE_WLAN_LPHB */
+void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
+ void* pUserData)
+{
+ tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "<------ %s " ,__func__);
+ if (NULL == pBcnMissRateInfo)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return ;
+ }
+ if (pBcnMissRateInfo->callback)
+ {
+ pBcnMissRateInfo->callback(status, bcnMissRate,
+ pBcnMissRateInfo->data);
+ }
+ vos_mem_free(pUserData);
+
+ return;
+}
+
+v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
+ tSirBcnMissRateReq *pData)
+{
+ WDI_Status wdiStatus;
+ tSirBcnMissRateInfo *pBcnMissRateInfo;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "------> %s " , __func__);
+
+ pBcnMissRateInfo =
+ (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
+ if (NULL == pBcnMissRateInfo)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ vos_mem_free(pData);
+ return;
+ }
+
+ pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
+ pBcnMissRateInfo->data = pData->data;
+
+ wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
+ WDA_GetBcnMissRateCallback,
+ pData->bssid);
+ if (WDI_STATUS_PENDING == wdiStatus)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "Pending received for %s:%d ", __func__, __LINE__);
+ }
+ else if (WDI_STATUS_SUCCESS != wdiStatus)
+ {
+ if (pBcnMissRateInfo->callback)
+ {
+ pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
+ -1, pBcnMissRateInfo->data);
+ }
+ }
+ vos_mem_free(pData);
+}