wlan: WDA: Link Layer Statistics Implementation.
This commit introduces the link layer statistics implementation
in WDA/WDI layers.
Change-Id: I2ea3b3b4ac6be362507de4e1c19731de41362d5f
CRs-Fixed: 665003
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index a839f05..bd579b0 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -409,6 +409,16 @@
WDI_ProcessUpdateChannelParamsReq, /* WDI_UPDATE_CHAN_REQ */
WDI_ProcessGetBcnMissRateReq, /* WDI_GET_BCN_MISS_RATE_REQ */
+
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+ WDI_ProcessLLStatsSetReq, /* WDI_LL_STATS_SET_REQ */
+ WDI_ProcessLLStatsGetReq, /* WDI_LL_STATS_GET_REQ */
+ WDI_ProcessLLStatsClearReq, /* WDI_LL_STATS_CLEAR_REQ */
+#else
+ NULL,
+ NULL,
+ NULL,
+#endif
/*-------------------------------------------------------------------------
Indications
-------------------------------------------------------------------------*/
@@ -634,6 +644,16 @@
WDI_ProcessGetBcnMissRateRsp, /*WDI_GET_BCN_MISS_RATE_RSP*/
+
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+ WDI_ProcessLLStatsSetRsp, /* WDI_LL_STATS_SET_RSP */
+ WDI_ProcessLLStatsGetRsp, /* WDI_LL_STATS_GET_RSP */
+ WDI_ProcessLLStatsClearRsp, /* WDI_LL_STATS_CLEAR_RSP */
+#else
+ NULL,
+ NULL,
+ NULL,
+#endif
/*---------------------------------------------------------------------
Indications
---------------------------------------------------------------------*/
@@ -693,7 +713,12 @@
NULL,
#endif /* FEATURE_WLAN_CH_AVOID */
- WDI_printRegInfo /* WDI_PRINT_REG_INFO_IND */
+ WDI_printRegInfo, /* WDI_PRINT_REG_INFO_IND */
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+ WDI_ProcessLinkLayerStatsResultsInd, /* WDI_HAL_LL_STATS_RESULTS_IND */
+#else
+ NULL,
+#endif
};
@@ -1011,6 +1036,11 @@
CASE_RETURN_STRING(WDI_START_HT40_OBSS_SCAN_IND);
CASE_RETURN_STRING(WDI_STOP_HT40_OBSS_SCAN_IND);
CASE_RETURN_STRING(WDI_UPDATE_CHAN_REQ);
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+ CASE_RETURN_STRING( WDI_LL_STATS_SET_REQ);
+ CASE_RETURN_STRING( WDI_LL_STATS_GET_REQ);
+ CASE_RETURN_STRING( WDI_LL_STATS_CLEAR_REQ);
+#endif
default:
return "Unknown WDI MessageId";
}
@@ -1119,6 +1149,11 @@
#endif
CASE_RETURN_STRING( WDI_UPDATE_CHAN_RESP);
CASE_RETURN_STRING( WDI_GET_BCN_MISS_RATE_RSP );
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+ CASE_RETURN_STRING( WDI_LL_STATS_SET_RSP);
+ CASE_RETURN_STRING( WDI_LL_STATS_GET_RSP);
+ CASE_RETURN_STRING( WDI_LL_STATS_CLEAR_RSP);
+#endif
default:
return "Unknown WDI MessageId";
}
@@ -16996,6 +17031,100 @@
}/*WDI_ProcessAddTSpecRsp*/
+
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+
+WDI_Status
+WDI_ProcessLLStatsSetRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LLStatsSetRspCb wdiLLStatsSetRspCb;
+
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Enter ", __func__);
+ /*-------------------------------------------------------------------------
+ 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;
+ }
+
+ wdiLLStatsSetRspCb = (WDI_LLStatsSetRspCb)pWDICtx->pfncRspCB;
+
+ wdiLLStatsSetRspCb((void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+WDI_Status
+WDI_ProcessLLStatsGetRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LLStatsGetRspCb wdiLLStatsGetRspCb;
+
+ /*-------------------------------------------------------------------------
+ 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;
+ }
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Enter ", __func__);
+
+ wdiLLStatsGetRspCb = (WDI_LLStatsGetRspCb)pWDICtx->pfncRspCB;
+
+ wdiLLStatsGetRspCb((void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+
+WDI_Status
+WDI_ProcessLLStatsClearRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LLStatsClearRspCb wdiLLStatsClearRspCb;
+
+ /*-------------------------------------------------------------------------
+ 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;
+ }
+
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: CLEAR RESPONSE CALL BACK", __func__);
+ wdiLLStatsClearRspCb = (WDI_LLStatsClearRspCb)pWDICtx->pfncRspCB;
+
+ wdiLLStatsClearRspCb((void *) pEventData->pEventData, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}
+#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
+
/**
@brief Process Del TSpec Rsp function (called when a response
is being received over the bus from HAL)
@@ -23307,6 +23436,15 @@
return WLAN_HAL_CH_SWITCH_V1_REQ;
case WDI_GET_BCN_MISS_RATE_REQ:
return WLAN_HAL_GET_BCN_MISS_RATE_REQ;
+
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+ case WDI_LL_STATS_SET_REQ:
+ return WLAN_HAL_LL_SET_STATS_REQ;
+ case WDI_LL_STATS_GET_REQ:
+ return WLAN_HAL_LL_GET_STATS_REQ;
+ case WDI_LL_STATS_CLEAR_REQ:
+ return WLAN_HAL_LL_CLEAR_STATS_REQ;
+#endif
default:
return WLAN_HAL_MSG_MAX;
}
@@ -23574,6 +23712,16 @@
return WDI_PRINT_REG_INFO_IND;
case WLAN_HAL_GET_BCN_MISS_RATE_RSP:
return WDI_GET_BCN_MISS_RATE_RSP;
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+ case WLAN_HAL_LL_SET_STATS_RSP:
+ return WDI_LL_STATS_SET_RSP;
+ case WLAN_HAL_LL_GET_STATS_RSP:
+ return WDI_LL_STATS_GET_RSP;
+ case WLAN_HAL_LL_CLEAR_STATS_RSP:
+ return WDI_LL_STATS_CLEAR_RSP;
+ case WLAN_HAL_LL_NOTIFY_STATS:
+ return WDI_HAL_LL_STATS_RESULTS_IND;
+#endif
default:
return eDRIVER_TYPE_MAX;
}
@@ -29476,18 +29624,18 @@
return WDI_STATUS_E_FAILURE;
}
- /*extract response and send it to UMAC*/
+ /* extract response and send it to UMAC */
pHalSetBatchScanRsp = (tHalBatchScanSetRspParam *)pEventData->pEventData;
pSetBatchScanRsp->nScansToBatch = pHalSetBatchScanRsp->supportedMscan;
- /*Notify UMAC*/
+ /* Notify UMAC */
wdiSetBatchScanCb(pSetBatchScanRsp, pWDICtx->pRspCBUserData);
wpalMemoryFree(pSetBatchScanRsp);
return WDI_STATUS_SUCCESS;
-}/*WDI_ProcessSetBatchScanRsp*/
+}/* WDI_ProcessSetBatchScanRsp */
/**
@brief Process batch scan result indication from FW
@@ -29509,7 +29657,7 @@
WDI_LowLevelIndType wdiInd;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- /*sanity check*/
+ /* sanity check */
if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
( NULL == pEventData->pEventData))
{
@@ -29519,15 +29667,15 @@
return WDI_STATUS_E_FAILURE;
}
- /*extract response and send it to UMAC*/
+ /* extract response and send it to UMAC */
pBatchScanResultInd = (void *)pEventData->pEventData;
- /*Fill in the indication parameters*/
+ /* Fill in the indication parameters */
wdiInd.wdiIndicationType = WDI_BATCH_SCAN_RESULT_IND;
wdiInd.wdiIndicationData.pBatchScanResult = pBatchScanResultInd;
- /*Notify UMAC*/
+ /* Notify UMAC */
if (pWDICtx->wdiLowLevelIndCB)
{
pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
@@ -29543,6 +29691,65 @@
return WDI_STATUS_SUCCESS;
} /*End of WDI_ProcessBatchScanResultInd*/
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+/**
+ @brief Process Link Layer Statistics Result 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_ProcessLinkLayerStatsResultsInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ void *pLinkLayerStatsInd;
+ WDI_LowLevelIndType wdiInd;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: Event RESULTS Indication", __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;
+ }
+
+ /* extract response and send it to UMAC */
+ pLinkLayerStatsInd = (void *)pEventData->pEventData;
+
+ /* Fill in the indication parameters */
+ wdiInd.wdiIndicationType = WDI_LL_STATS_RESULTS_IND;
+
+ wdiInd.wdiIndicationData.pLinkLayerStatsResults = pLinkLayerStatsInd;
+
+ /* 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_ProcessLinkLayerStatsResultsInd */
+#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
+
/**
@brief WDI_ProcessSetBatchScanReq -
Set batch scan request to FW
@@ -30309,3 +30516,378 @@
return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
}
+#ifdef WLAN_FEATURE_LINK_LAYER_STATS
+
+/**
+ @brief WDI_LLStatsSetReq
+ This API is called to set link layer stats request in FW
+
+ @param pwdiLLStatsSetReqParams : pointer to set link layer request params
+ wdiLLStatsSetRspCb : set link layer stats resp callback
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_LLStatsSetReq(WDI_LLStatsSetReqType* pwdiLLStatsSetReqParams,
+ WDI_LLStatsSetRspCb wdiLLStatsSetRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ /*------------------------------------------------------------------------
+ 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_LL_STATS_SET_REQ;
+ wdiEventData.pEventData = pwdiLLStatsSetReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiLLStatsSetReqParams);
+ wdiEventData.pCBfnc = wdiLLStatsSetRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessLLStatsSetReq -
+ Set Link Layer Stats request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessLLStatsSetReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LLStatsSetReqType* pwdiLLStatsSetReqParams;
+ WDI_LLStatsSetRspCb wdiLLStatsSetCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tHalMacLlSetStatsReqParams halLLStatsSetParams;
+
+ 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;
+ }
+
+ pwdiLLStatsSetReqParams = (WDI_LLStatsSetReqType*)pEventData->pEventData;
+ wdiLLStatsSetCb = (WDI_LLStatsSetRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_LL_STATS_SET_REQ,
+ sizeof(tHalMacLlSetStatsReqParams),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(halLLStatsSetParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiLLStatsSetReqParams, wdiLLStatsSetCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+
+
+ halLLStatsSetParams.req_id = pwdiLLStatsSetReqParams->reqId;
+ halLLStatsSetParams.sta_id = pwdiLLStatsSetReqParams->staId;
+ halLLStatsSetParams.mpdu_size_threshold =
+ pwdiLLStatsSetReqParams->mpduSizeThreshold;
+ halLLStatsSetParams.aggressive_statistics_gathering =
+ pwdiLLStatsSetReqParams->aggressiveStatisticsGathering;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halLLStatsSetParams.req_id = %u",
+ halLLStatsSetParams.req_id);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halLLStatsSetParams.sta_id = %u",
+ halLLStatsSetParams.sta_id);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halLLStatsSetParams.mpdu_size_threshold = %u",
+ halLLStatsSetParams.mpdu_size_threshold);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halLLStatsSetParams.aggressive_statistics_gathering = %u",
+ halLLStatsSetParams.aggressive_statistics_gathering);
+
+ wpalMemoryCopy(pSendBuffer+usDataOffset,
+ &halLLStatsSetParams,
+ sizeof(halLLStatsSetParams));
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send Clear Link Layer Stats Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiLLStatsSetCb, pEventData->pUserData,
+ WDI_LL_STATS_SET_RSP);
+}
+
+/**
+ @brief WDI_LLStatsGetReq
+ This API is called to get link layer stats request in FW
+
+ @param pwdiLLStatsGetReqParams : pointer to set link layer request params
+ wdiLLStatsGetRspCb : get link layer stats resp callback
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_LLStatsGetReq(WDI_LLStatsGetReqType* pwdiLLStatsGetReqParams,
+ WDI_LLStatsGetRspCb wdiLLStatsGetRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_LL_STATS_GET_REQ;
+ wdiEventData.pEventData = pwdiLLStatsGetReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiLLStatsGetReqParams);
+ wdiEventData.pCBfnc = wdiLLStatsGetRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessLLStatsGetReq -
+ Get Link Layer Stats request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessLLStatsGetReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LLStatsGetReqType* pwdiLLStatsGetReqParams;
+ WDI_LLStatsGetRspCb wdiLLStatsGetCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tHalMacLlGetStatsReqParams halLLStatsGetParams;
+
+ 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;
+ }
+
+ pwdiLLStatsGetReqParams = (WDI_LLStatsGetReqType*)pEventData->pEventData;
+ wdiLLStatsGetCb = (WDI_LLStatsGetRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_LL_STATS_GET_REQ,
+ sizeof(tHalMacLlGetStatsReqParams),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(halLLStatsGetParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiLLStatsGetReqParams, wdiLLStatsGetCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ halLLStatsGetParams.req_id = pwdiLLStatsGetReqParams->reqId;
+ halLLStatsGetParams.sta_id = pwdiLLStatsGetReqParams->staId;
+ halLLStatsGetParams.param_id_mask = pwdiLLStatsGetReqParams->paramIdMask;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halLLStatsGetParams.req_id = %u",
+ halLLStatsGetParams.req_id);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halLLStatsGetParams.staId = %u",
+ halLLStatsGetParams.sta_id);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ " halLLStatsGetParams.Mask = %u",
+ halLLStatsGetParams.param_id_mask);
+
+ wpalMemoryCopy(pSendBuffer+usDataOffset,
+ &halLLStatsGetParams,
+ sizeof(halLLStatsGetParams));
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send Clear Link Layer Stats Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiLLStatsGetCb, pEventData->pUserData,
+ WDI_LL_STATS_GET_RSP);
+}
+
+/**
+ @brief WDI_LLStatsClearReq
+ This API is called to clear link layer stats request in FW
+
+ @param pwdiLLStatsClearReqParams : pointer to clear link layer request params
+ wdiLLStatsSetRspCb : clear link layer stats resp callback
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_LLStatsClearReq(WDI_LLStatsClearReqType* pwdiLLStatsClearReqParams,
+ WDI_LLStatsClearRspCb wdiLLStatsClearRspCb,
+ void* pUserData)
+{
+ WDI_EventInfoType wdiEventData;
+
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_LL_STATS_CLEAR_REQ;
+ wdiEventData.pEventData = pwdiLLStatsClearReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiLLStatsClearReqParams);
+ wdiEventData.pCBfnc = wdiLLStatsClearRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s:%d Enter", __func__, __LINE__);
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessLLStatsClearReq -
+ Clear Link Layer Stats request to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessLLStatsClearReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LLStatsClearReqType* pwdiLLStatsClearReqParams;
+ WDI_LLStatsClearRspCb wdiLLStatsClearCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tHalMacLlClearStatsReqParams halLLStatsClearParams;
+
+ 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;
+ }
+
+ pwdiLLStatsClearReqParams = (WDI_LLStatsClearReqType*)pEventData->pEventData;
+ wdiLLStatsClearCb = (WDI_LLStatsClearRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ ! TO DO : proper conversion into the HAL Message Request Format
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_LL_STATS_CLEAR_REQ,
+ sizeof(tHalMacLlClearStatsReqParams),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(halLLStatsClearParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p %p", __func__,
+ pEventData, pwdiLLStatsClearReqParams, wdiLLStatsClearCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ halLLStatsClearParams.req_id = pwdiLLStatsClearReqParams->reqId;
+ halLLStatsClearParams.sta_id = pwdiLLStatsClearReqParams->staId;
+ halLLStatsClearParams.stats_clear_req_mask =
+ pwdiLLStatsClearReqParams->statsClearReqMask;
+ halLLStatsClearParams.stop_req = pwdiLLStatsClearReqParams->stopReq;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s:HAL req_id = %d", __func__, halLLStatsClearParams.req_id);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: HAL sta_id = %d", __func__, halLLStatsClearParams.sta_id);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: HAL stats_clear_req_mask = 0x%X", __func__,
+ halLLStatsClearParams.stats_clear_req_mask);
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: HAL stop_req = %d", __func__, halLLStatsClearParams.stop_req);
+
+ wpalMemoryCopy(pSendBuffer+usDataOffset,
+ &halLLStatsClearParams,
+ sizeof(halLLStatsClearParams));
+
+ pWDICtx->pReqStatusUserData = pEventData->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send Clear Link Layer Stats Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiLLStatsClearCb, pEventData->pUserData,
+ WDI_LL_STATS_CLEAR_RSP);
+}
+#endif /* WLAN_FEATURE_LINK_LAYER_STATS */