blob: 81b95740bd00b99c734215bec869b9c95adfd6fd [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Abhishek Singhdfe0f742017-01-03 11:26:38 +05302 * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
Abhishek Singhe721fb42015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053093#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 5
94/* BTQM flush FW dump command */
95#define WDA_TX_FW_RECOVERY_THRESHOLD 3
Abhishek Singhe721fb42015-11-30 14:22:10 +053096
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define IS_WDI_STATUS_FAILURE(status) \
98 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define CONVERT_WDI2VOS_STATUS(x) \
100 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
101
102/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700103#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700105#define WDA_GET_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
107
108#define WDA_SET_BA_TXFLAG(a, b, c) \
109 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
110
111#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
112 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
114 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115/* timer related Macros */
116#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
117 tx_timer_create(a, b, c, d, e, f, g)
118#define WDA_START_TIMER(a) tx_timer_activate(a)
119#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
120#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700121#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700122
123#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
124 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700127#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700128#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800129#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700132
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700133#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700134#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
135 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800136 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700137
138#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
139#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800140#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530141#define WDA_BA_MAX_RETRY_THRESHOLD 10
142#define WDA_BA_RETRY_TIME 300000 /* Time is in msec, equal to 5 mins */
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800143
Jeff Johnson295189b2012-06-20 16:38:30 -0700144/* extern declarations */
145extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700146extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
147
Jeff Johnson295189b2012-06-20 16:38:30 -0700148/* forward declarations */
149void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
150 void *pBodyptr, tANI_U32 bodyVal) ;
151VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
152 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700153VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
154VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
155
156extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
157 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530158void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700159void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
160 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
161void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
162 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
163void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
164 void* pUserData ) ;
165static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
166static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530167bool WDA_AllowAddBA(tpAniSirGlobal pMAc, tANI_U8 staId, tANI_U8 tid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800169void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700171#ifdef WLAN_FEATURE_VOWIFI_11R
172VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
173#endif /* WLAN_FEATURE_VOWIFI_11R */
174
Jeff Johnson295189b2012-06-20 16:38:30 -0700175void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
176void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
177VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700178#ifdef FEATURE_WLAN_SCAN_PNO
179static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
180static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
181static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
182#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700183#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700184VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530185VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
186 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530188void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
189void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700190void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
191void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
192#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700193#ifdef WLAN_FEATURE_PACKET_FILTERING
194static VOS_STATUS WDA_Process8023MulticastListReq (
195 tWDA_CbContext *pWDA,
196 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
197 );
198static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
199 tWDA_CbContext *pWDA,
200 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
201 );
202static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
203 tWDA_CbContext *pWDA,
204 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
205 );
206static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
207 tWDA_CbContext *pWDA,
208 tSirRcvFltPktClearParam *pRcvFltPktClearParam
209 );
210#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700211VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
213 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
215 v_U8_t *pDefaultKeyId,
216 v_U8_t *pNumKeys,
217 WDI_KeysType *pWdiKeys );
218
219#ifdef WLAN_FEATURE_GTK_OFFLOAD
220static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
221static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
222#endif // WLAN_FEATURE_GTK_OFFLOAD
223
c_hpothu92367912014-05-01 15:18:17 +0530224v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
225 tSirBcnMissRateReq *pData);
226
Jeff Johnson295189b2012-06-20 16:38:30 -0700227VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
228 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700229#ifdef WLAN_FEATURE_11AC
230VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
231 tUpdateVHTOpMode *pData);
232#endif
Leo Chang9056f462013-08-01 19:21:11 -0700233
234#ifdef FEATURE_WLAN_LPHB
235VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
236 tSirLPHBReq *pData);
237#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530238
Abhishek Singh00b71972016-01-07 10:51:04 +0530239#ifdef WLAN_FEATURE_RMC
240void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
241 v_PVOID_t pData);
242#endif /* WLAN_FEATURE_RMC */
243
Dino Mycle41bdc942014-06-10 11:30:24 +0530244#ifdef WLAN_FEATURE_EXTSCAN
245VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
246 tSirEXTScanStartReqParams *wdaRequest);
247VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
248 tSirEXTScanStopReqParams *wdaRequest);
249VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
250 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
251VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
252 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
253VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
254 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
255VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
256 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530257VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
258 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
259VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
260 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530261VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
262 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530263#endif /* WLAN_FEATURE_EXTSCAN */
264
Sunil Duttbd736ed2014-05-26 21:19:41 +0530265#ifdef WLAN_FEATURE_LINK_LAYER_STATS
266VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
267 tSirLLStatsSetReq *wdaRequest);
268
269VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
270 tSirLLStatsGetReq *wdaRequest);
271
272VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
273 tSirLLStatsClearReq *wdaRequest);
274#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530275
276v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
277 tSirFWStatsGetReq *wdaRequest);
278
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530279VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
280 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530281VOS_STATUS
282WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
283 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530284
c_manjeecfd1efb2015-09-25 19:32:34 +0530285VOS_STATUS
286WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
287 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530288
Katya Nigamf0511f62015-05-05 16:40:57 +0530289VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
290VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530291VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530292
293VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
294 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530295
296VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
297 tOemDataReqNewConfig *pOemDataReqNewConfig);
298
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530299
300v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
301 tSirAntennaDiversitySelectionReq *pData);
302
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530303VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
304 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530305/*
306 * FUNCTION: WDA_ProcessNanRequest
307 * Process NAN request
308 */
309VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
310 tNanRequest *wdaRequest)
311{
312 WDI_Status status = WDI_STATUS_SUCCESS;
313 tWDA_ReqParams *pWdaParams;
314 WDI_NanRequestType *wdiRequest = NULL;
315 size_t wdiReqLength = sizeof(WDI_NanRequestType)
316 - sizeof(wdiRequest->request_data)
317 + wdaRequest->request_data_len;
318
319 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
320
321 if (NULL == wdiRequest)
322 {
323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
324 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
325 wdiReqLength);
326 vos_mem_free(wdaRequest);
327 return VOS_STATUS_E_NOMEM;
328 }
329
330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
331 "WDA: Process Nan Request length: %zu", wdiReqLength);
332
333 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
334 if (NULL == pWdaParams)
335 {
336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
337 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
338 VOS_ASSERT(0);
339 vos_mem_free(wdaRequest);
340 vos_mem_free(wdiRequest);
341 return VOS_STATUS_E_NOMEM;
342 }
343
344 wdiRequest->request_data_len = wdaRequest->request_data_len;
345
346 vos_mem_copy( wdiRequest->request_data,
347 wdaRequest->request_data,
348 wdaRequest->request_data_len);
349
350 vos_mem_free(wdaRequest);
351
352 pWdaParams->pWdaContext = pWDA;
353 pWdaParams->wdaMsgParam = NULL;
354 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
355
356 status = WDI_NanRequest(wdiRequest, pWdaParams);
357
358 if (IS_WDI_STATUS_FAILURE(status))
359 {
360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
361 "Failure to request. Free all the memory " );
362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
363 vos_mem_free(pWdaParams);
364 }
365
366 return CONVERT_WDI2VOS_STATUS(status) ;
367}
368
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530369/**
370 * wda_state_info_dump() - prints state information of wda layer
371 */
372static void wda_state_info_dump(void)
373{
374 v_CONTEXT_t vos_ctx_ptr = NULL;
375 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530376
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
378 "<------ %s " ,__func__);
379
380 /* Get the Global VOSS Context */
381 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
382
383 if (NULL != vos_ctx_ptr)
384 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
385 vos_ctx_ptr );
386 else {
387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
388 "%s: Invalid Global VOSS Context", __func__);
389 VOS_ASSERT(0);
390 return;
391 }
392
393 if (NULL != wda)
394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
395 "wdaState: %d linkState: %d", wda->wdaState,
396 wda->linkState);
397 else {
398 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
399 "%s: Invalid WDA Context", __func__);
400 VOS_ASSERT(0);
401 }
402}
403
404/**
405 * wda_register_debug_callback() - registration function for wda layer
406 * to print wda state information
407 */
408static void wda_register_debug_callback(void)
409{
410 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
411}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530412
Jeff Johnson295189b2012-06-20 16:38:30 -0700413/*
414 * FUNCTION: WDA_open
415 * Allocate the WDA context
416 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530417VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 tMacOpenParameters *pMacParams )
419{
420 tWDA_CbContext *wdaContext;
421 VOS_STATUS status;
422 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530424 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
426 if(!VOS_IS_STATUS_SUCCESS(status))
427 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
429 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 return VOS_STATUS_E_NOMEM;
431 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 /*__asm int 3;*/
433 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
434
435 /* Initialize data structures */
436 wdaContext->pVosContext = pVosContext;
437 wdaContext->wdaState = WDA_INIT_STATE;
438 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530439 vos_lock_init(&wdaContext->mgmt_pkt_lock);
440
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* Initialize WDA-WDI synchronization event */
442 status = vos_event_init(&wdaContext->wdaWdiEvent);
443 if(!VOS_IS_STATUS_SUCCESS(status))
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800446 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800447 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* Init Frame transfer event */
450 status = vos_event_init(&wdaContext->txFrameEvent);
451 if(!VOS_IS_STATUS_SUCCESS(status))
452 {
453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800454 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800455 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 status = vos_event_init(&wdaContext->suspendDataTxEvent);
458 if(!VOS_IS_STATUS_SUCCESS(status))
459 {
460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800461 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800462 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
465 if(!VOS_IS_STATUS_SUCCESS(status))
466 {
467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800468 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800469 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530473 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 &wdiDevCapability, pMacParams->driverType))
475 {
476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
477 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800478 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 }
480 else
481 {
482 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
483 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
484 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* update max STA in WDA used for BA */
486 wdaContext->wdaMaxSta = pMacParams->maxStation;
487 /* store the frameTransRequired flag in wdaContext, to send this to HAL
488 * in WDA_Start
489 */
490 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
491 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530492
493 wda_register_debug_callback();
494
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800496
497error:
498 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
499 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700500}
501
Jeff Johnson295189b2012-06-20 16:38:30 -0700502/*
503 * FUNCTION: WDA_preStart
504 * Trigger DAL-AL to start CFG download
505 */
506VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
507{
508 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
509 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700510 /*
511 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
512 */
513 wdaMsg.type = WNI_CFG_DNLD_REQ ;
514 wdaMsg.bodyptr = NULL;
515 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 /* post the message.. */
517 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
518 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
519 {
520 vosStatus = VOS_STATUS_E_BADMSG;
521 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 return( vosStatus );
523}
Jeff Johnson295189b2012-06-20 16:38:30 -0700524/*
525 * FUNCTION: WDA_wdiStartCallback
526 * Once WDI_Start is finished, WDI start callback will be called by WDI
527 * to indicate completion of WDI_Start.
528 */
529void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
530 void *pVosContext)
531{
532 tWDA_CbContext *wdaContext;
533 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 if (NULL == pVosContext)
535 {
536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700537 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 return;
539 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
541 if (NULL == wdaContext)
542 {
543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700544 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 return;
546 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
548 {
549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700550 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 }
552 else
553 {
554 wdaContext->wdaState = WDA_START_STATE;
555 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 /* extract and save version information from the Start Response */
557 wdaContext->wcnssWlanCompiledVersion.major =
558 wdiRspParams->wlanCompiledVersion.major;
559 wdaContext->wcnssWlanCompiledVersion.minor =
560 wdiRspParams->wlanCompiledVersion.minor;
561 wdaContext->wcnssWlanCompiledVersion.version =
562 wdiRspParams->wlanCompiledVersion.version;
563 wdaContext->wcnssWlanCompiledVersion.revision =
564 wdiRspParams->wlanCompiledVersion.revision;
565 wdaContext->wcnssWlanReportedVersion.major =
566 wdiRspParams->wlanReportedVersion.major;
567 wdaContext->wcnssWlanReportedVersion.minor =
568 wdiRspParams->wlanReportedVersion.minor;
569 wdaContext->wcnssWlanReportedVersion.version =
570 wdiRspParams->wlanReportedVersion.version;
571 wdaContext->wcnssWlanReportedVersion.revision =
572 wdiRspParams->wlanReportedVersion.revision;
573 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
574 wdiRspParams->wcnssSoftwareVersion,
575 sizeof(wdaContext->wcnssSoftwareVersionString));
576 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
577 wdiRspParams->wcnssHardwareVersion,
578 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 /* Notify WDA_start that WDI_Start has completed */
580 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700581 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700584 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 return;
587}
588
Jeff Johnson295189b2012-06-20 16:38:30 -0700589/*
590 * FUNCTION: WDA_start
591 * Prepare TLV configuration and call WDI_Start.
592 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700593VOS_STATUS WDA_start(v_PVOID_t pVosContext)
594{
595 tWDA_CbContext *wdaContext;
596 VOS_STATUS status;
597 WDI_Status wdiStatus;
598 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 if (NULL == pVosContext)
600 {
601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700602 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 return VOS_STATUS_E_FAILURE;
604 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
606 if (NULL == wdaContext)
607 {
608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700609 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 return VOS_STATUS_E_FAILURE;
611 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700612 /* Non-FTM mode, WDA status for START must be INIT
613 * FTM mode, WDA Status for START can be INIT or STOP */
614 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
615 (WDA_STOP_STATE != wdaContext->wdaState) )
616 {
617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
618 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700619 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 return VOS_STATUS_E_FAILURE;
621 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 /* initialize the wdiStartParam. Note that we can create this on
623 the stack since we won't exit until WDI_Start() completes or
624 times out */
625 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 /* prepare the config TLV for the WDI */
628 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
629 if ( !VOS_IS_STATUS_SUCCESS(status) )
630 {
631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700632 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 return VOS_STATUS_E_FAILURE;
634 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 /* note from here onwards if an error occurs we must
636 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
638 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
639 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* initialize the WDA-WDI synchronization event */
641 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 /* call WDI start */
643 wdiStatus = WDI_Start(&wdiStartParam,
644 (WDI_StartRspCb)WDA_wdiStartCallback,
645 (v_VOID_t *)pVosContext);
646 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
647 {
648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700649 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 vos_mem_free(wdiStartParam.pConfigBuffer);
651 return VOS_STATUS_E_FAILURE;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 /* wait for WDI start to invoke our callback */
654 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
655 WDA_WDI_START_TIMEOUT );
656 if ( !VOS_IS_STATUS_SUCCESS(status) )
657 {
658 if ( VOS_STATUS_E_TIMEOUT == status )
659 {
660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700661 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 }
663 else
664 {
665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
666 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700667 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 }
669 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530670 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* we no longer need the config TLV */
674 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 /* if we are not in the START state then WDI_Start() failed */
676 if (WDA_START_STATE != wdaContext->wdaState)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700679 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 return VOS_STATUS_E_FAILURE;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 /* FTM mode does not need to monitor BA activity */
683 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
684 {
685 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800686 if(VOS_STATUS_SUCCESS == status)
687 {
688 wdaContext->wdaTimersCreated = VOS_TRUE;
689 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530690 else
691 {
692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
693 FL("wda create timers failed"));
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 }
Leo Chang9d76f622013-08-23 16:34:52 -0700696 else
697 {
698 vos_event_init(&wdaContext->ftmStopDoneEvent);
699 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700700 return status;
701}
702
Jeff Johnson295189b2012-06-20 16:38:30 -0700703/*
704 * FUNCTION: WDA_prepareConfigTLV
705 * Function to prepare CFG for DAL(WDA)
706 */
707VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
708 WDI_StartReqParamsType *wdiStartParams )
709{
710 /* get pMac to acess CFG data base */
711 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
712 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
713 tHalCfg *tlvStruct = NULL ;
714 tANI_U8 *tlvStructStart = NULL ;
715 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
716 v_PVOID_t *configParam;
717 tANI_U32 configParamSize;
718 tANI_U32 *configDataValue;
719 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700720 tANI_U8 i;
721
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 if ((NULL == pMac)||(NULL == wdaContext))
723 {
724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700725 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700726 VOS_ASSERT(0);
727 return VOS_STATUS_E_FAILURE;
728 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
730 WNI_CFG_STA_ID_LEN +
731 WNI_CFG_EDCA_WME_ACBK_LEN +
732 WNI_CFG_EDCA_WME_ACBE_LEN +
733 WNI_CFG_EDCA_WME_ACVI_LEN +
734 WNI_CFG_EDCA_WME_ACVO_LEN +
735 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* malloc memory for all configs in one shot */
737 configParam = vos_mem_malloc(configParamSize);
738
739 if(NULL == configParam )
740 {
741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700742 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700743 VOS_ASSERT(0) ;
744 return VOS_STATUS_E_NOMEM;
745 }
746 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 tlvStruct = (tHalCfg *)configParam;
749 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 /* TODO: Remove Later */
751 /* QWLAN_HAL_CFG_STA_ID */
752 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
753 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
754 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
755 eSIR_SUCCESS)
756 {
757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
758 "Failed to get value for WNI_CFG_STA_ID");
759 goto handle_failure;
760 }
761 tlvStruct->length = strLength ;
762 /* calculate the pad bytes to have the CFG in aligned format */
763 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
764 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
766 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700767 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
768 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
769 tlvStruct->length = sizeof(tANI_U32);
770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
771 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
772 != eSIR_SUCCESS)
773 {
774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
775 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
776 goto handle_failure;
777 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
779 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700780 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
781 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
782 tlvStruct->length = sizeof(tANI_U32);
783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
784 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
785 eSIR_SUCCESS)
786 {
787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
788 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
789 goto handle_failure;
790 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700793 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
794 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
795 tlvStruct->length = sizeof(tANI_U32);
796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
797 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
798 != eSIR_SUCCESS)
799 {
800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
801 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
802 goto handle_failure;
803 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700804 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
805 + sizeof(tHalCfg) + tlvStruct->length)) ;
806
807 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
808 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
809 tlvStruct->length = sizeof(tANI_U32);
810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
811 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
812 configDataValue ) != eSIR_SUCCESS)
813 {
814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
815 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
816 goto handle_failure;
817 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
819 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700820 /* QWLAN_HAL_CFG_CAL_PERIOD */
821 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
822 tlvStruct->length = sizeof(tANI_U32);
823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
824 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
825 != eSIR_SUCCESS)
826 {
827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
828 "Failed to get value for WNI_CFG_CAL_PERIOD");
829 goto handle_failure;
830 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
832 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 /* QWLAN_HAL_CFG_CAL_CONTROL */
834 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
835 tlvStruct->length = sizeof(tANI_U32);
836 configDataValue = (tANI_U32 *)(tlvStruct + 1);
837 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
838 != eSIR_SUCCESS)
839 {
840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
841 "Failed to get value for WNI_CFG_CAL_CONTROL");
842 goto handle_failure;
843 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
845 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 /* QWLAN_HAL_CFG_PROXIMITY */
847 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
848 tlvStruct->length = sizeof(tANI_U32);
849 configDataValue = (tANI_U32 *)(tlvStruct + 1);
850 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
851 != eSIR_SUCCESS)
852 {
853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
854 "Failed to get value for WNI_CFG_PROXIMITY");
855 goto handle_failure;
856 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
858 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
860 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
864 != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
873 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
874 tlvStruct->length = sizeof(tANI_U32);
875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
876 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
877 eSIR_SUCCESS)
878 {
879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
880 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
881 goto handle_failure;
882 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
884 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700885 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
886 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
887 tlvStruct->length = sizeof(tANI_U32);
888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
889 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
890 configDataValue ) != eSIR_SUCCESS)
891 {
892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
893 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
894 goto handle_failure;
895 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
897 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700898 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
899 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
903 eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
912 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
916 eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700924 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
925 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
926 tlvStruct->length = sizeof(tANI_U32);
927 configDataValue = (tANI_U32 *)(tlvStruct + 1);
928 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
929 eSIR_SUCCESS)
930 {
931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
932 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
933 goto handle_failure;
934 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
936 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700937 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
938 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
939 tlvStruct->length = sizeof(tANI_U32);
940 configDataValue = (tANI_U32 *)(tlvStruct + 1);
941 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
942 configDataValue ) != eSIR_SUCCESS)
943 {
944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
945 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
946 goto handle_failure;
947 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
949 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700950 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
951 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
952 tlvStruct->length = sizeof(tANI_U32);
953 configDataValue = (tANI_U32 *)(tlvStruct + 1);
954 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
955 configDataValue ) != eSIR_SUCCESS)
956 {
957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
958 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
959 goto handle_failure;
960 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700961 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
962 + sizeof(tHalCfg) + tlvStruct->length));
963
964 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
965 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
966 tlvStruct->length = sizeof(tANI_U32);
967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
968 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
969 configDataValue ) != eSIR_SUCCESS)
970 {
971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
972 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
973 goto handle_failure;
974 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
976 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700977 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
978 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
979 tlvStruct->length = sizeof(tANI_U32);
980 configDataValue = (tANI_U32 *)(tlvStruct + 1);
981 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
982 configDataValue ) != eSIR_SUCCESS)
983 {
984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
985 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
986 goto handle_failure;
987 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700988 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
989 + sizeof(tHalCfg) + tlvStruct->length));
990
991 /* QWLAN_HAL_CFG_FIXED_RATE */
992 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
996 != eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_FIXED_RATE");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length));
1004
1005 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1006 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1007 tlvStruct->length = sizeof(tANI_U32);
1008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1009 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1010 != eSIR_SUCCESS)
1011 {
1012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1013 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1014 goto handle_failure;
1015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001016 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1017 + sizeof(tHalCfg) + tlvStruct->length));
1018
1019 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1020 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1021 tlvStruct->length = sizeof(tANI_U32);
1022 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1023 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1024 configDataValue ) != eSIR_SUCCESS)
1025 {
1026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1027 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1028 goto handle_failure;
1029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1031 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1033 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1034 tlvStruct->length = sizeof(tANI_U32);
1035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1036 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1037 configDataValue ) != eSIR_SUCCESS)
1038 {
1039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1040 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1041 goto handle_failure;
1042 }
1043 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1044 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1046 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1047 tlvStruct->length = sizeof(tANI_U32);
1048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1049 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1050 configDataValue ) != eSIR_SUCCESS)
1051 {
1052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1053 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1054 goto handle_failure;
1055 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1057 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1059 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1060 tlvStruct->length = sizeof(tANI_U32);
1061 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1062 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1063 configDataValue ) != eSIR_SUCCESS)
1064 {
1065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1066 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1067 goto handle_failure;
1068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1070 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1072 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1073 tlvStruct->length = sizeof(tANI_U32);
1074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1075 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1076 configDataValue ) != eSIR_SUCCESS)
1077 {
1078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1079 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1080 goto handle_failure;
1081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001082 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1083 + sizeof(tHalCfg) + tlvStruct->length);
1084
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1086 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1087 tlvStruct->length = sizeof(tANI_U32);
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1090 configDataValue ) != eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1094 goto handle_failure;
1095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1099 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1103 configDataValue ) != eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1112 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1116 eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1120 goto handle_failure;
1121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length);
1124
1125 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1126 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1127 tlvStruct->length = sizeof(tANI_U32);
1128 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1129 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1130 configDataValue ) != eSIR_SUCCESS)
1131 {
1132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1133 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1134 goto handle_failure;
1135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1137 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001138 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1139 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1140 tlvStruct->length = sizeof(tANI_U32);
1141 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1142 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1143 configDataValue ) != eSIR_SUCCESS)
1144 {
1145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1146 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1147 goto handle_failure;
1148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1150 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001151 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1152 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1153 tlvStruct->length = sizeof(tANI_U32);
1154 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1155 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1156 configDataValue ) != eSIR_SUCCESS)
1157 {
1158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1159 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1160 goto handle_failure;
1161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001162 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1163 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001164 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1165 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1166 tlvStruct->length = sizeof(tANI_U32);
1167 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1168 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1169 configDataValue ) != eSIR_SUCCESS)
1170 {
1171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1172 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1173 goto handle_failure;
1174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001175 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1176 + sizeof(tHalCfg) + tlvStruct->length);
1177
1178 /* QWLAN_HAL_CFG_STATS_PERIOD */
1179 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1180 tlvStruct->length = sizeof(tANI_U32);
1181 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1182 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1183 eSIR_SUCCESS)
1184 {
1185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1186 "Failed to get value for WNI_CFG_STATS_PERIOD");
1187 goto handle_failure;
1188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1190 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001191 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1192 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1193 tlvStruct->length = sizeof(tANI_U32);
1194 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1195 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1196 eSIR_SUCCESS)
1197 {
1198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1199 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1200 goto handle_failure;
1201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1203 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001204 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1205 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1206 tlvStruct->length = sizeof(tANI_U32);
1207 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1208 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1209 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1211 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001212 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1213 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1214 tlvStruct->length = sizeof(tANI_U32);
1215 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1216 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1217 != eSIR_SUCCESS)
1218 {
1219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1220 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1221 goto handle_failure;
1222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1224 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1226 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1227 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1228 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1229 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1230 &strLength) != eSIR_SUCCESS)
1231 {
1232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1233 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1234 goto handle_failure;
1235 }
1236 tlvStruct->length = strLength;
1237 /* calculate the pad bytes to have the CFG in aligned format */
1238 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1239 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1241 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1243 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1244 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1246 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1247 &strLength) != eSIR_SUCCESS)
1248 {
1249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1250 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1251 goto handle_failure;
1252 }
1253 tlvStruct->length = strLength;
1254 /* calculate the pad bytes to have the CFG in aligned format */
1255 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1256 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1260 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1261 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1264 &strLength) != eSIR_SUCCESS)
1265 {
1266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1267 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1268 goto handle_failure;
1269 }
1270 tlvStruct->length = strLength;
1271 /* calculate the pad bytes to have the CFG in aligned format */
1272 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1273 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1277 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1278 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1279 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1280 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1281 &strLength) != eSIR_SUCCESS)
1282 {
1283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1284 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1285 goto handle_failure;
1286 }
1287 tlvStruct->length = strLength;
1288 /* calculate the pad bytes to have the CFG in aligned format */
1289 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1290 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001293 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1294 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1298 != eSIR_SUCCESS)
1299 {
1300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1301 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1302 goto handle_failure;
1303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001306 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1307 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1311 != eSIR_SUCCESS)
1312 {
1313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1314 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1315 goto handle_failure;
1316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001319 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1320 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1321 tlvStruct->length = sizeof(tANI_U32);
1322 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1323 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1324 != eSIR_SUCCESS)
1325 {
1326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1327 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1328 goto handle_failure;
1329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001332 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1333 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1334 tlvStruct->length = sizeof(tANI_U32);
1335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1336 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1337 != eSIR_SUCCESS)
1338 {
1339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1340 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1341 goto handle_failure;
1342 }
1343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001345 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1346 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1347 tlvStruct->length = sizeof(tANI_U32);
1348 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1349 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1350 != eSIR_SUCCESS)
1351 {
1352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1353 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1354 goto handle_failure;
1355 }
1356 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1357 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001358 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1359 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1363 != eSIR_SUCCESS)
1364 {
1365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1366 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1367 goto handle_failure;
1368 }
1369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1370 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001371 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1372 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1373 tlvStruct->length = sizeof(tANI_U32);
1374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1375 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1376 != eSIR_SUCCESS)
1377 {
1378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1379 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1380 goto handle_failure;
1381 }
1382 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1383 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001384 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1385 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1386 tlvStruct->length = sizeof(tANI_U32);
1387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1388 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1389 != eSIR_SUCCESS)
1390 {
1391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1392 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1393 goto handle_failure;
1394 }
1395 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1396 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001397 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1398 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1399 tlvStruct->length = sizeof(tANI_U32);
1400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1401 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1402 != eSIR_SUCCESS)
1403 {
1404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1405 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1406 goto handle_failure;
1407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1409 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001410 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1411 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1412 tlvStruct->length = sizeof(tANI_U32);
1413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1414 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1415 != eSIR_SUCCESS)
1416 {
1417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1418 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1419 goto handle_failure;
1420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1422 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001423 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1424 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1425 tlvStruct->length = sizeof(tANI_U32);
1426 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1427 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1428 != eSIR_SUCCESS)
1429 {
1430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1431 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1432 goto handle_failure;
1433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001436 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1437 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1438 * into FW, so the parameters are added here.
1439 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001440 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1441 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1445 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1446 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001447 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1448 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1449 tlvStruct->length = sizeof(tANI_U32);
1450 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1451 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001454 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1455 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1456 tlvStruct->length = sizeof(tANI_U32);
1457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1458 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1459 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1460 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001461 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1462 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1463 tlvStruct->length = sizeof(tANI_U32);
1464 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1465 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1466 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1467 + sizeof(tHalCfg) + tlvStruct->length) ;
1468
1469 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1470 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1471 tlvStruct->length = sizeof(tANI_U32);
1472 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1473 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1474 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1475 + sizeof(tHalCfg) + tlvStruct->length) ;
1476
1477 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1478 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1479 tlvStruct->length = sizeof(tANI_U32);
1480 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1481 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1482 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1483 + sizeof(tHalCfg) + tlvStruct->length) ;
1484
1485 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1486 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1487 tlvStruct->length = sizeof(tANI_U32);
1488 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1489 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1490 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1491 + sizeof(tHalCfg) + tlvStruct->length) ;
1492
1493 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1494 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1495 tlvStruct->length = sizeof(tANI_U32);
1496 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1497 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1498 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1499 + sizeof(tHalCfg) + tlvStruct->length) ;
1500
1501 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1502 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1503 tlvStruct->length = sizeof(tANI_U32);
1504 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1505 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
1508
1509 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1510 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1514 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1515 + sizeof(tHalCfg) + tlvStruct->length) ;
1516
1517 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1518 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1519 tlvStruct->length = sizeof(tANI_U32);
1520 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1521 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1522 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1523 + sizeof(tHalCfg) + tlvStruct->length) ;
1524
1525 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1526 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1527 tlvStruct->length = sizeof(tANI_U32);
1528 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1529 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1530 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1531 + sizeof(tHalCfg) + tlvStruct->length) ;
1532
1533 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1534 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1535 tlvStruct->length = sizeof(tANI_U32);
1536 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1537 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1538 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1539 + sizeof(tHalCfg) + tlvStruct->length) ;
1540
1541 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1542 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1543 tlvStruct->length = sizeof(tANI_U32);
1544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1545 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1546 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1547 + sizeof(tHalCfg) + tlvStruct->length) ;
1548
1549 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1550 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1551 tlvStruct->length = sizeof(tANI_U32);
1552 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1553 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1554 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1555 + sizeof(tHalCfg) + tlvStruct->length) ;
1556
1557 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1558 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1559 tlvStruct->length = sizeof(tANI_U32);
1560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1561 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1562 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1563 + sizeof(tHalCfg) + tlvStruct->length) ;
1564
Wilson Tsaof8b37942013-09-06 10:49:00 -07001565 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1566 {
1567 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1568 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1569 tlvStruct->length = sizeof(tANI_U32);
1570 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1571 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1572 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1573 + sizeof(tHalCfg) + tlvStruct->length) ;
1574
1575 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1576 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1577 tlvStruct->length = sizeof(tANI_U32);
1578 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1579 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582
1583 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1584 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1585 tlvStruct->length = sizeof(tANI_U32);
1586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1587 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1588 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1589 + sizeof(tHalCfg) + tlvStruct->length) ;
1590
1591 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1592 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1593 tlvStruct->length = sizeof(tANI_U32);
1594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1595 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1596 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1597 + sizeof(tHalCfg) + tlvStruct->length) ;
1598 }
1599
1600 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1601 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1602 tlvStruct->length = sizeof(tANI_U32);
1603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1604 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1605 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1606 + sizeof(tHalCfg) + tlvStruct->length) ;
1607
1608 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1609 {
1610 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1611 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1615 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1616 + sizeof(tHalCfg) + tlvStruct->length) ;
1617 }
1618
1619 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1620 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1621 tlvStruct->length = sizeof(tANI_U32);
1622 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1623 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1624 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1625 + sizeof(tHalCfg) + tlvStruct->length) ;
1626
Jeff Johnson32d95a32012-09-10 13:15:23 -07001627 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1629 tlvStruct->length = sizeof(tANI_U32);
1630 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1631 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1632 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1633 wcnssCompiledApiVersion.minor,
1634 wcnssCompiledApiVersion.version,
1635 wcnssCompiledApiVersion.revision);
1636 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length) ;
1638
Jeff Johnsond13512a2012-07-17 11:42:19 -07001639 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1640 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1644 configDataValue ) != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1648 goto handle_failure;
1649 }
1650
1651 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length) ;
1653 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1654 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1658 configDataValue ) != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1662 goto handle_failure;
1663 }
1664
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
1668 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1669 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1673 != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1677 goto handle_failure;
1678 }
1679
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
1682
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001683 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1684 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1685 tlvStruct->length = sizeof(tANI_U32);
1686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1687 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1688 != eSIR_SUCCESS)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1691 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1692 goto handle_failure;
1693 }
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05301694
1695 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1696 + sizeof(tHalCfg) + tlvStruct->length);
1697
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001698#ifdef WLAN_SOFTAP_VSTA_FEATURE
1699 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1700 tlvStruct->length = sizeof(tANI_U32);
1701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1702 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1703 != eSIR_SUCCESS)
1704 {
1705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1706 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1707 goto handle_failure;
1708 }
1709
1710 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1711 + sizeof(tHalCfg) + tlvStruct->length) ;
1712#endif
1713
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001714 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1715 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1716 tlvStruct->length = sizeof(tANI_U32);
1717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1718
1719 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1720 != eSIR_SUCCESS)
1721 {
1722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1723 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1724 goto handle_failure;
1725 }
1726
1727 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1728 + sizeof(tHalCfg) + tlvStruct->length) ;
1729
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301730/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1731 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1732 tlvStruct->length = sizeof(tANI_U32);
1733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1734 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1735 configDataValue ) != eSIR_SUCCESS)
1736 {
1737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1738 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1739 goto handle_failure;
1740 }
1741
1742 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1743 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301744#ifdef FEATURE_WLAN_TDLS
1745 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1746 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1747 tlvStruct->length = sizeof(tANI_U32);
1748 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1749 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1750 configDataValue ) != eSIR_SUCCESS)
1751 {
1752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1753 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1754 goto handle_failure;
1755 }
1756 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1757 + sizeof(tHalCfg) + tlvStruct->length) ;
1758
1759 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1760 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1761 tlvStruct->length = sizeof(tANI_U32);
1762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1763 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1764 configDataValue ) != eSIR_SUCCESS)
1765 {
1766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1767 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1768 goto handle_failure;
1769 }
1770 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1771 + sizeof(tHalCfg) + tlvStruct->length) ;
1772 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1773 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1774 tlvStruct->length = sizeof(tANI_U32);
1775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1776 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1777 configDataValue ) != eSIR_SUCCESS)
1778 {
1779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1780 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1781 goto handle_failure;
1782 }
1783 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1784 + sizeof(tHalCfg) + tlvStruct->length) ;
1785 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1786 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1787 tlvStruct->length = sizeof(tANI_U32);
1788 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1789 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1790 configDataValue ) != eSIR_SUCCESS)
1791 {
1792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1793 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1794 goto handle_failure;
1795 }
1796 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1797 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301798 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1799 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1800 tlvStruct->length = sizeof(tANI_U32);
1801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1802 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1803 configDataValue ) != eSIR_SUCCESS)
1804 {
1805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1806 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1807 goto handle_failure;
1808 }
1809 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1810 + sizeof(tHalCfg) + tlvStruct->length) ;
1811
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301812#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301813
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001814 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1815 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1816 tlvStruct->length = sizeof(tANI_U32);
1817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1818 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1819 configDataValue ) != eSIR_SUCCESS)
1820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1823 goto handle_failure;
1824 }
1825
1826 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1827 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001828
1829 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1830 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1831 tlvStruct->length = sizeof(tANI_U32);
1832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1833 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1834 != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1838 goto handle_failure;
1839 }
1840 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length));
1842
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301843 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1844 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1848 configDataValue ) != eSIR_SUCCESS)
1849 {
1850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1851 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1852 goto handle_failure;
1853 }
1854
1855 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1856 + sizeof(tHalCfg) + tlvStruct->length) ;
1857
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301858 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1859 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1860 tlvStruct->length = sizeof(tANI_U32);
1861 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1862 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1863 configDataValue ) != eSIR_SUCCESS)
1864 {
1865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1866 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1867 goto handle_failure;
1868 }
1869 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1870 + sizeof(tHalCfg) + tlvStruct->length) ;
1871
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301872 /* QWLAN_HAL_CFG_ATH_DISABLE */
1873 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1874 tlvStruct->length = sizeof(tANI_U32);
1875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1876 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1877 configDataValue ) != eSIR_SUCCESS)
1878 {
1879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1880 "Failed to get value for WNI_CFG_ATH_DISABLE");
1881 goto handle_failure;
1882 }
1883 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1884 + sizeof(tHalCfg) + tlvStruct->length) ;
1885
c_hpothu6d7dc922013-12-02 12:36:41 +05301886 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1887 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1888 tlvStruct->length = sizeof(tANI_U32);
1889 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1890 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1891 configDataValue ) != eSIR_SUCCESS)
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1895 goto handle_failure;
1896 }
1897 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1898 + sizeof(tHalCfg) + tlvStruct->length) ;
1899
1900 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1901 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1902 tlvStruct->length = sizeof(tANI_U32);
1903 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1904 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1905 configDataValue ) != eSIR_SUCCESS)
1906 {
1907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1908 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1909 goto handle_failure;
1910 }
1911 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1912 + sizeof(tHalCfg) + tlvStruct->length) ;
1913
1914 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1915 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1916 tlvStruct->length = sizeof(tANI_U32);
1917 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1918 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1919 configDataValue ) != eSIR_SUCCESS)
1920 {
1921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1922 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1923 goto handle_failure;
1924 }
1925 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1926 + sizeof(tHalCfg) + tlvStruct->length) ;
1927
1928 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1929 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1930 tlvStruct->length = sizeof(tANI_U32);
1931 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1932 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1933 configDataValue ) != eSIR_SUCCESS)
1934 {
1935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1936 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1937 goto handle_failure;
1938 }
1939 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1940 + sizeof(tHalCfg) + tlvStruct->length) ;
1941
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301942 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1943 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1944 tlvStruct->length = sizeof(tANI_U32);
1945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1946 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1947 configDataValue ) != eSIR_SUCCESS)
1948 {
1949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1950 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1951 goto handle_failure;
1952 }
1953 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1954 + sizeof(tHalCfg) + tlvStruct->length) ;
1955
1956 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1957 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1958 tlvStruct->length = sizeof(tANI_U32);
1959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1960 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1961 configDataValue ) != eSIR_SUCCESS)
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1965 goto handle_failure;
1966 }
1967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1968 + sizeof(tHalCfg) + tlvStruct->length) ;
1969
1970 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1971 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1972 tlvStruct->length = sizeof(tANI_U32);
1973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1974 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1975 configDataValue ) != eSIR_SUCCESS)
1976 {
1977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1978 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1979 goto handle_failure;
1980 }
1981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1982 + sizeof(tHalCfg) + tlvStruct->length) ;
1983
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001984 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1985 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1986 tlvStruct->length = sizeof(tANI_U32);
1987 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1988 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1989 configDataValue ) != eSIR_SUCCESS)
1990 {
1991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1992 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1993 goto handle_failure;
1994 }
1995 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1996 + sizeof(tHalCfg) + tlvStruct->length) ;
1997
c_hpothu5bd1ae42014-03-07 20:28:22 +05301998 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1999 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
2000 tlvStruct->length = sizeof(tANI_U32);
2001 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2002
2003 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2004 configDataValue ) != eSIR_SUCCESS)
2005 {
2006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2007 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2008 goto handle_failure;
2009 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2011 + sizeof(tHalCfg) + tlvStruct->length) ;
2012
2013 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2014 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2015 tlvStruct->length = sizeof(tANI_U32);
2016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2017
2018 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2019 configDataValue ) != eSIR_SUCCESS)
2020 {
2021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2022 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2023 goto handle_failure;
2024 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302025 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2026 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302027
c_hpothu2d0f1c42014-04-01 18:38:51 +05302028 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2029 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2030 tlvStruct->length = sizeof(tANI_U32);
2031 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2032
2033 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2034 configDataValue ) != eSIR_SUCCESS)
2035 {
2036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2037 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2038 goto handle_failure;
2039 }
2040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2041 + sizeof(tHalCfg) + tlvStruct->length) ;
2042
2043 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2044 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2045 tlvStruct->length = sizeof(tANI_U32);
2046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2047
2048 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2049 configDataValue ) != eSIR_SUCCESS)
2050 {
2051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2052 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2053 goto handle_failure;
2054 }
2055 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2056 + sizeof(tHalCfg) + tlvStruct->length) ;
2057
2058 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2059 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2060 tlvStruct->length = sizeof(tANI_U32);
2061 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2062
2063 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2064 configDataValue ) != eSIR_SUCCESS)
2065 {
2066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2067 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2068 goto handle_failure;
2069 }
2070 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2071 + sizeof(tHalCfg) + tlvStruct->length) ;
2072
2073 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2074 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2075 tlvStruct->length = sizeof(tANI_U32);
2076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2077
2078 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2079 configDataValue ) != eSIR_SUCCESS)
2080 {
2081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2082 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2083 goto handle_failure;
2084 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302085 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2086 + sizeof(tHalCfg) + tlvStruct->length) ;
2087
Mihir Shetec34258c2014-07-30 17:50:27 +05302088 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2089 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2090 tlvStruct->length = sizeof(tANI_U32);
2091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2092
2093 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2094 configDataValue ) != eSIR_SUCCESS)
2095 {
2096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2097 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2098 goto handle_failure;
2099 }
2100 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2101 + sizeof(tHalCfg) + tlvStruct->length) ;
2102
2103 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2104 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2105 tlvStruct->length = sizeof(tANI_U32);
2106 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2107
2108 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2109 configDataValue ) != eSIR_SUCCESS)
2110 {
2111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2112 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2113 goto handle_failure;
2114 }
2115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2116 + sizeof(tHalCfg) + tlvStruct->length) ;
2117
2118 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2119 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2120 tlvStruct->length = sizeof(tANI_U32);
2121 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2122
2123 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2124 configDataValue ) != eSIR_SUCCESS)
2125 {
2126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2127 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2128 goto handle_failure;
2129 }
2130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2131 + sizeof(tHalCfg) + tlvStruct->length) ;
2132
2133 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2134 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2135 tlvStruct->length = sizeof(tANI_U32);
2136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2137
2138 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2139 configDataValue ) != eSIR_SUCCESS)
2140 {
2141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2142 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2143 goto handle_failure;
2144 }
2145 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2146 + sizeof(tHalCfg) + tlvStruct->length) ;
2147
2148 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2149 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2150 tlvStruct->length = sizeof(tANI_U32);
2151 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2152
2153 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2154 configDataValue ) != eSIR_SUCCESS)
2155 {
2156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2157 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2158 goto handle_failure;
2159 }
2160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2161 + sizeof(tHalCfg) + tlvStruct->length) ;
2162
2163 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2164 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2165 tlvStruct->length = sizeof(tANI_U32);
2166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2167
2168 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2169 configDataValue ) != eSIR_SUCCESS)
2170 {
2171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2172 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2173 goto handle_failure;
2174 }
2175 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2176 + sizeof(tHalCfg) + tlvStruct->length) ;
2177
2178 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2179 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2180 tlvStruct->length = sizeof(tANI_U32);
2181 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2182
2183 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2184 configDataValue ) != eSIR_SUCCESS)
2185 {
2186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2187 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2188 goto handle_failure;
2189 }
2190 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2191 + sizeof(tHalCfg) + tlvStruct->length) ;
2192
2193 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2194 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2195 tlvStruct->length = sizeof(tANI_U32);
2196 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2197
2198 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2199 configDataValue ) != eSIR_SUCCESS)
2200 {
2201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2202 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2203 goto handle_failure;
2204 }
2205 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2206 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302207
2208 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2209 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2210 tlvStruct->length = sizeof(tANI_U32);
2211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2212
2213 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2214 configDataValue ) != eSIR_SUCCESS)
2215 {
2216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2217 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2218 goto handle_failure;
2219 }
2220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2221 + sizeof(tHalCfg) + tlvStruct->length) ;
2222
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302223 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2224 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2225 tlvStruct->length = sizeof(tANI_U32);
2226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2227
2228 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2229 configDataValue ) != eSIR_SUCCESS)
2230 {
2231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2232 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2233 goto handle_failure;
2234 }
2235 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2236 + sizeof(tHalCfg) + tlvStruct->length) ;
2237
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302238 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2239 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2240 tlvStruct->length = sizeof(tANI_U32);
2241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2242
2243 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2244 configDataValue ) != eSIR_SUCCESS)
2245 {
2246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2247 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2248 goto handle_failure;
2249 }
2250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2251 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302252
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302253 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2254 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2255 tlvStruct->length = sizeof(tANI_U32);
2256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2257
2258 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2259 configDataValue ) != eSIR_SUCCESS)
2260 {
2261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2262 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2263 goto handle_failure;
2264 }
2265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2266 + sizeof(tHalCfg) + tlvStruct->length) ;
2267
Sachin Ahuja41b61902015-06-18 18:32:15 +05302268
2269 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2271 tlvStruct->length = sizeof(tANI_U32);
2272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2273
2274 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2275 configDataValue ) != eSIR_SUCCESS)
2276 {
2277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2278 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2279 goto handle_failure;
2280 }
2281 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2282 + sizeof(tHalCfg) + tlvStruct->length) ;
2283
2284 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2285 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2286 tlvStruct->length = sizeof(tANI_U32);
2287 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2288
2289 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2290 configDataValue ) != eSIR_SUCCESS)
2291 {
2292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2293 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2294 goto handle_failure;
2295 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2297 + sizeof(tHalCfg) + tlvStruct->length) ;
2298
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302299 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2300 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2301 tlvStruct->length = sizeof(tANI_U32);
2302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2303
2304 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2305 configDataValue ) != eSIR_SUCCESS)
2306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2308 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2309 goto handle_failure;
2310 }
2311 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2312 + sizeof(tHalCfg) + tlvStruct->length) ;
2313
2314 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2315 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2316 tlvStruct->length = sizeof(tANI_U32);
2317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2318
2319 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2320 configDataValue ) != eSIR_SUCCESS)
2321 {
2322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2323 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2324 goto handle_failure;
2325 }
2326 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2327 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302328
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302329 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2330 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2331 tlvStruct->length = sizeof(tANI_U32);
2332 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2333
2334 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2335 configDataValue ) != eSIR_SUCCESS)
2336 {
2337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2338 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2339 goto handle_failure;
2340 }
2341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2342 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302343 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2344 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2345 tlvStruct->length = sizeof(tANI_U32);
2346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2347 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2348 configDataValue ) != eSIR_SUCCESS)
2349 {
2350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2351 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2352 goto handle_failure;
2353 }
2354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2355 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302356
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302357 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2358 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2359 tlvStruct->length = sizeof(tANI_U32);
2360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2361
2362 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2363 configDataValue ) != eSIR_SUCCESS)
2364 {
2365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2366 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2367 goto handle_failure;
2368 }
2369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2370 + sizeof(tHalCfg) + tlvStruct->length) ;
2371
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302372 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2373 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2374 tlvStruct->length = sizeof(tANI_U32);
2375 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2376
2377 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2378 configDataValue ) != eSIR_SUCCESS)
2379 {
2380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2381 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2382 goto handle_failure;
2383 }
2384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2385 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302386
2387 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2388 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2389 tlvStruct->length = sizeof(tANI_U32);
2390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2391
2392 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2393 configDataValue ) != eSIR_SUCCESS)
2394 {
2395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2396 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2397 goto handle_failure;
2398 }
2399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2400 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302401 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2402 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2403 tlvStruct->length = sizeof(tANI_U32);
2404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2405
2406 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2407 configDataValue ) != eSIR_SUCCESS)
2408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2410 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2411 goto handle_failure;
2412 }
2413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2414 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302415
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302417
2418 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2419 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2420 tlvStruct->length = sizeof(tANI_U32);
2421 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2422
2423 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2424 configDataValue ) != eSIR_SUCCESS)
2425 {
2426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2427 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2428 goto handle_failure;
2429 }
2430 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2431 + sizeof(tHalCfg) + tlvStruct->length) ;
Anurag Chouhana9116af2016-11-23 00:03:08 +05302432
2433 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
2434 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
2435 tlvStruct->length = sizeof(tANI_U32);
2436 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2437 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
2438 != eSIR_SUCCESS)
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2441 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
2442 goto handle_failure;
2443 }
2444
2445 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2446 + sizeof(tHalCfg) + tlvStruct->length);
2447
2448 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
2449 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
2450 tlvStruct->length = sizeof(tANI_U32);
2451 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2452 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
2453 != eSIR_SUCCESS)
2454 {
2455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2456 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
2457 goto handle_failure;
2458 }
2459
2460 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2461 + sizeof(tHalCfg) + tlvStruct->length);
2462
Jeff Johnson295189b2012-06-20 16:38:30 -07002463#ifdef WLAN_DEBUG
2464 {
2465 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2467 "****** Dumping CFG TLV ***** ");
2468 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2469 {
2470 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2471 "%02x %02x %02x %02x %02x %02x %02x %02x",
2472 tlvStructStart[i],
2473 tlvStructStart[i+1],
2474 tlvStructStart[i+2],
2475 tlvStructStart[i+3],
2476 tlvStructStart[i+4],
2477 tlvStructStart[i+5],
2478 tlvStructStart[i+6],
2479 tlvStructStart[i+7]);
2480 }
2481 /* Dump the bytes in the last line*/
2482 for (; i < wdiStartParams->usConfigBufferLen; i++)
2483 {
2484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2485 "%02x ",tlvStructStart[i]);
2486 }
2487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2488 "**************************** ");
2489 }
2490#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492handle_failure:
2493 vos_mem_free(configParam);
2494 return VOS_STATUS_E_FAILURE;
2495}
Anurag Chouhan83026002016-12-13 22:46:21 +05302496
2497#ifdef DHCP_SERVER_OFFLOAD
2498/**
2499 * wda_dhcp_server_offload_rsp_callback() - response to the dhcp server offload
2500 * @wdi_rsp: pointer to the dhcp server offload response
2501 * @user_data: pointer to user data
2502 *
2503 * Return: None
2504 */
2505void wda_dhcp_server_offload_rsp_callback(wdi_dhcp_server_offload_rsp_param_t*
2506 wdi_rsp,
2507 void* user_data)
2508{
2509 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2510 sir_dhcp_srv_offload_info_t *dhcp_srv_offload_info;
2511 VOS_STATUS status;
2512
2513 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2514 "<------ %s " ,__func__);
2515
2516 if(NULL == wda_params)
2517 {
2518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2519 "%s: pWdaParams received NULL", __func__);
2520 VOS_ASSERT(0);
2521 return;
2522 }
2523
2524 if(NULL == wda_params->wdaMsgParam)
2525 {
2526 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2527 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2528 VOS_ASSERT(0);
2529 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2530 vos_mem_free(wda_params);
2531 return;
2532 }
2533
2534 dhcp_srv_offload_info = (sir_dhcp_srv_offload_info_t *)
2535 wda_params->wdaMsgParam;
2536
2537 if(dhcp_srv_offload_info->dhcp_offload_callback)
2538 {
2539 dhcp_srv_offload_info->dhcp_offload_callback(
2540 dhcp_srv_offload_info->dhcp_server_offload_cb_context,
2541 CONVERT_WDI2VOS_STATUS(wdi_rsp->status));
2542 }
2543 else
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2546 "%s: pFWLoggingInitParams callback is NULL", __func__);
2547 }
2548
2549 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2550 if (status)
2551 {
2552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2553 "%s: DHCP server offload failed with status=%d", __func__, status);
2554 VOS_ASSERT(0);
2555 }
2556
2557 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2558 vos_mem_free(wda_params->wdaMsgParam);
2559 vos_mem_free(wda_params);
2560 return;
2561}
2562#endif /* DHCP_SERVER_OFFLOAD */
2563
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302564#ifdef MDNS_OFFLOAD
2565/**
2566 * wda_mdns_enable_rsp_callback() - response to the mdns enable server offload
2567 * @wdi_rsp: pointer to the mdns enable offload response
2568 * @user_data: pointer to user data
2569 *
2570 * Return: None
2571 */
2572void wda_mdns_enable_rsp_callback(wdi_mdns_enable_offload_rsp_param_t*
2573 wdi_rsp,
2574 void* user_data)
2575{
2576 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2577 sir_mdns_offload_info_t *mdns_offload_info;
2578 VOS_STATUS status;
2579
2580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2581 "<------ %s " ,__func__);
2582
2583 if(NULL == wda_params)
2584 {
2585 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2586 "%s: pWdaParams received NULL", __func__);
2587 VOS_ASSERT(0);
2588 return ;
2589 }
2590
2591 if(NULL == wda_params->wdaMsgParam)
2592 {
2593 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2594 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2595 VOS_ASSERT(0);
2596 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2597 vos_mem_free(wda_params);
2598 return ;
2599 }
2600
2601 mdns_offload_info = (sir_mdns_offload_info_t *)
2602 wda_params->wdaMsgParam;
2603
2604 if(mdns_offload_info->mdns_enable_callback)
2605 {
2606 mdns_offload_info->mdns_enable_callback(mdns_offload_info->
2607 mdns_enable_cb_context,
2608 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2609 status));
2610 }
2611 else
2612 {
2613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2614 "%s: mdns_enable callback is NULL", __func__);
2615 }
2616
2617 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2618 if (status)
2619 {
2620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2621 "%s: MDNS offload failed with status=%d", __func__, status);
2622 VOS_ASSERT(0);
2623 }
2624
2625 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2626 vos_mem_free(wda_params->wdaMsgParam);
2627 vos_mem_free(wda_params);
2628
2629 return;
2630}
2631
2632/**
2633 * wda_mdns_fqdn_rsp_callback() - response to the mdns fqdn offload
2634 * @wdi_rsp: pointer to the mdns fqdn offload response
2635 * @user_data: pointer to user data
2636 *
2637 * Return: None
2638 */
2639void wda_mdns_fqdn_rsp_callback(wdi_mdns_set_fqdn_rsp_param_t*
2640 wdi_rsp,
2641 void* user_data)
2642{
2643 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2644 sir_mdns_fqdn_info_t *mdns_fqdn_info;
2645 VOS_STATUS status;
2646
2647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2648 "<------ %s " ,__func__);
2649
2650 if(NULL == wda_params)
2651 {
2652 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2653 "%s: pWdaParams received NULL", __func__);
2654 VOS_ASSERT(0);
2655 return ;
2656 }
2657
2658 if(NULL == wda_params->wdaMsgParam)
2659 {
2660 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2661 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2662 VOS_ASSERT(0);
2663 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2664 vos_mem_free(wda_params);
2665 return ;
2666 }
2667
2668 mdns_fqdn_info = (sir_mdns_fqdn_info_t *)
2669 wda_params->wdaMsgParam;
2670
2671 if(mdns_fqdn_info->mdns_fqdn_callback)
2672 {
2673 mdns_fqdn_info->mdns_fqdn_callback(mdns_fqdn_info->
2674 mdns_fqdn_cb_context,
2675 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2676 status));
2677 }
2678 else
2679 {
2680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2681 "%s: mdns_fqdn callback is NULL", __func__);
2682 }
2683
2684 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2685 if (status)
2686 {
2687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2688 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2689 VOS_ASSERT(0);
2690 }
2691
2692 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2693 vos_mem_free(wda_params->wdaMsgParam);
2694 vos_mem_free(wda_params);
2695
2696 return;
2697}
2698
2699/**
2700 * wda_mdns_resp_rsp_callback() - response to the mdns resp offload
2701 * @wdi_rsp: pointer to the mdns fqdn offload response
2702 * @user_data: pointer to user data
2703 *
2704 * Return: None
2705 */
2706void wda_mdns_resp_rsp_callback
2707(
2708 wdi_mdns_set_rsp_param_t*
2709 wdi_rsp,
2710 void* user_data)
2711{
2712 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2713 sir_mdns_resp_info_t *mdns_resp_info;
2714 VOS_STATUS status;
2715
2716 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2717 "<------ %s " ,__func__);
2718
2719 if(NULL == wda_params)
2720 {
2721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2722 "%s: pWdaParams received NULL", __func__);
2723 VOS_ASSERT(0);
2724 return ;
2725 }
2726
2727 if(NULL == wda_params->wdaMsgParam)
2728 {
2729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2730 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2731 VOS_ASSERT(0);
2732 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2733 vos_mem_free(wda_params);
2734 return ;
2735 }
2736
2737 mdns_resp_info = (sir_mdns_resp_info_t *)
2738 wda_params->wdaMsgParam;
2739
2740 if(mdns_resp_info->mdns_resp_callback)
2741 {
2742 mdns_resp_info->mdns_resp_callback(mdns_resp_info->
2743 mdns_resp_cb_context,
2744 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2745 status));
2746 }
2747 else
2748 {
2749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2750 "%s: mdns_fqdn callback is NULL", __func__);
2751 }
2752
2753 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2754 if (status)
2755 {
2756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2757 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2758 VOS_ASSERT(0);
2759 }
2760
2761 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2762 vos_mem_free(wda_params->wdaMsgParam);
2763 vos_mem_free(wda_params);
2764
2765 return;
2766}
2767
2768/**
2769 * wda_get_stats_rsp_callback() - response to the mdns stats offload
2770 * @wdi_rsp: pointer to the mdns fqdn offload response
2771 * @user_data: pointer to user data
2772 *
2773 * Return: None
2774 */
2775void wda_get_stats_rsp_callback
2776(
2777 wdi_mdns_stats_rsp_param_t*
2778 wdi_rsp,
2779 void* user_data)
2780{
2781 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2782 sir_get_mdns_stats_info_t *mdns_stats_info;
2783 VOS_STATUS status;
2784
2785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2786 "<------ %s " ,__func__);
2787
2788 if(NULL == wda_params)
2789 {
2790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2791 "%s: pWdaParams received NULL", __func__);
2792 VOS_ASSERT(0);
2793 return ;
2794 }
2795
2796 if(NULL == wda_params->wdaMsgParam)
2797 {
2798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2799 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2800 VOS_ASSERT(0);
2801 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2802 vos_mem_free(wda_params);
2803 return ;
2804 }
2805
2806 mdns_stats_info = (sir_get_mdns_stats_info_t *)
2807 wda_params->wdaMsgParam;
2808
2809 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2810 if (status)
2811 {
2812 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2813 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2814 VOS_ASSERT(0);
2815 }
2816
2817 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2818 vos_mem_free(wda_params->wdaMsgParam);
2819 vos_mem_free(wda_params);
2820
2821 return;
2822}
2823#endif /* MDNS_OFFLOAD */
2824
Jeff Johnson295189b2012-06-20 16:38:30 -07002825/*
2826 * FUNCTION: WDA_wdiCompleteCB
2827 * call the voss call back function
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302828 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002829void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002830{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2832 tWDA_CbContext *wdaContext;
2833
2834 if(NULL == pWdaParams)
2835 {
2836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002837 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002838 VOS_ASSERT(0) ;
2839 return ;
2840 }
2841
2842 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2843
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 if (NULL == wdaContext)
2845 {
2846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002847 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 return ;
2849 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002850
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002852 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002856 vos_mem_free(pWdaParams);
2857
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 if(WDI_STATUS_SUCCESS != status)
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2861 "WDI stop callback returned failure" );
2862 VOS_ASSERT(0) ;
2863 }
2864 else
2865 {
2866 wdaContext->wdaState = WDA_STOP_STATE;
2867 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002868
Leo Chang9d76f622013-08-23 16:34:52 -07002869 /* FTM Driver stop procedure should be synced.
2870 * Stop and Close will happen on same context */
2871 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2872 {
2873 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2874 {
2875 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2876 "%s: FTM Stop Event Set Fail", __func__);
2877 VOS_ASSERT(0);
2878 }
2879 }
2880
Jeff Johnson295189b2012-06-20 16:38:30 -07002881 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002882 vos_WDAComplete_cback(wdaContext->pVosContext);
2883
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 return ;
2885}
Jeff Johnson295189b2012-06-20 16:38:30 -07002886/*
2887 * FUNCTION: WDA_stop
2888 * call WDI_stop
2889 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002890VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2891{
2892 WDI_Status wdiStatus;
2893 VOS_STATUS status = VOS_STATUS_SUCCESS;
2894 WDI_StopReqParamsType *wdiStopReq;
2895 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002896 tWDA_ReqParams *pWdaParams ;
2897
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 if (NULL == pWDA)
2899 {
2900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002901 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 VOS_ASSERT(0);
2903 return VOS_STATUS_E_FAILURE;
2904 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002905 if (pWDA->wdiFailed == true)
2906 {
2907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002908 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002909 return VOS_STATUS_E_ALREADY;
2910 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002911
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 /* FTM mode stay START_STATE */
2913 if( (WDA_READY_STATE != pWDA->wdaState) &&
2914 (WDA_INIT_STATE != pWDA->wdaState) &&
2915 (WDA_START_STATE != pWDA->wdaState) )
2916 {
2917 VOS_ASSERT(0);
2918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 wdiStopReq = (WDI_StopReqParamsType *)
2920 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2921 if(NULL == wdiStopReq)
2922 {
2923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_ASSERT(0);
2926 return VOS_STATUS_E_NOMEM;
2927 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002928
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 wdiStopReq->wdiStopReason = reason;
2930 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302931
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2933 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 {
2935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 VOS_ASSERT(0);
2938 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002939 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002941
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002942 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2943 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 {
2945 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002946 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002948
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002949 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2950 pWdaParams->wdaMsgParam = NULL;
2951 pWdaParams->pWdaContext = pWDA;
2952
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 /* call WDI stop */
2954 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002955 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2956
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2960 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2962 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 status = VOS_STATUS_E_FAILURE;
2964 }
Leo Chang9d76f622013-08-23 16:34:52 -07002965
2966 /* FTM Driver stop procedure should be synced.
2967 * Stop and Close will happen on same context */
2968 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2969 {
2970 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2971 WDI_RESPONSE_TIMEOUT);
2972 if (status != VOS_STATUS_SUCCESS)
2973 {
2974 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2975 "%s: FTM Stop Timepoout", __func__);
2976 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002977 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302978 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 return status;
2981}
Jeff Johnson295189b2012-06-20 16:38:30 -07002982/*
2983 * FUNCTION: WDA_close
2984 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302985 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002986VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2987{
Jeff Johnson43971f52012-07-17 12:26:56 -07002988 VOS_STATUS status = VOS_STATUS_SUCCESS;
2989 WDI_Status wstatus;
2990 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 if (NULL == wdaContext)
2993 {
2994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002995 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 return VOS_STATUS_E_FAILURE;
2997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2999 (WDA_STOP_STATE != wdaContext->wdaState))
3000 {
3001 VOS_ASSERT(0);
3002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07003004 wstatus = WDI_Close();
3005 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 {
3007 status = VOS_STATUS_E_FAILURE;
3008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07003011 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
3012 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 {
3014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003015 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 status = VOS_STATUS_E_FAILURE;
3017 }
3018
Jeff Johnson43971f52012-07-17 12:26:56 -07003019 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003020 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 {
3022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003023 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 status = VOS_STATUS_E_FAILURE;
3025 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003026 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003027 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 {
3029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003030 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 status = VOS_STATUS_E_FAILURE;
3032 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003033 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07003034 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 {
3036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003037 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 status = VOS_STATUS_E_FAILURE;
3039 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303040
3041 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
3042
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07003044 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07003045 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3048 "error in WDA close " );
3049 status = VOS_STATUS_E_FAILURE;
3050 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303051
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 return status;
3053}
Jeff Johnson295189b2012-06-20 16:38:30 -07003054/*
3055 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
3056 * returns 1 if the compiled version is greater than or equal to the input version
3057 */
3058
3059uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3060{
3061 VOS_STATUS status = VOS_STATUS_SUCCESS;
3062 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3063 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
3066 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
3067 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
3068 (compiledVersion.revision >= revision)))
3069 return 1;
3070 else
3071 return 0;
3072}
Jeff Johnson295189b2012-06-20 16:38:30 -07003073/*
3074 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
3075 * returns 1 if the compiled version is greater than or equal to the input version
3076 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003077uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3078{
3079 VOS_STATUS status = VOS_STATUS_SUCCESS;
3080 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3081 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
3084 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
3085 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
3086 (reportedVersion.revision >= revision)))
3087 return 1;
3088 else
3089 return 0;
3090}
Jeff Johnson295189b2012-06-20 16:38:30 -07003091/*
3092 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
3093 * Returns the version of the WCNSS WLAN API with which the HOST
3094 * device driver was compiled
3095 */
3096VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
3097 tSirVersionType *pVersion)
3098{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303099 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 if ((NULL == pvosGCtx) || (NULL == pVersion))
3101 {
3102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003103 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 VOS_ASSERT(0);
3105 return VOS_STATUS_E_FAILURE;
3106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3108 if (NULL == pWDA )
3109 {
3110 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 VOS_ASSERT(0);
3113 return VOS_STATUS_E_FAILURE;
3114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 *pVersion = pWDA->wcnssWlanCompiledVersion;
3116 return VOS_STATUS_SUCCESS;
3117}
Jeff Johnson295189b2012-06-20 16:38:30 -07003118/*
3119 * FUNCTION: WDA_GetWcnssWlanReportedVersion
3120 * Returns the version of the WCNSS WLAN API with which the WCNSS
3121 * device driver was compiled
3122 */
3123VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
3124 tSirVersionType *pVersion)
3125{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303126 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 if ((NULL == pvosGCtx) || (NULL == pVersion))
3128 {
3129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003130 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 VOS_ASSERT(0);
3132 return VOS_STATUS_E_FAILURE;
3133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3135 if (NULL == pWDA )
3136 {
3137 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003138 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 VOS_ASSERT(0);
3140 return VOS_STATUS_E_FAILURE;
3141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 *pVersion = pWDA->wcnssWlanReportedVersion;
3143 return VOS_STATUS_SUCCESS;
3144}
Jeff Johnson295189b2012-06-20 16:38:30 -07003145/*
3146 * FUNCTION: WDA_GetWcnssSoftwareVersion
3147 * Returns the WCNSS Software version string
3148 */
3149VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
3150 tANI_U8 *pVersion,
3151 tANI_U32 versionBufferSize)
3152{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303153 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003155 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 if ((NULL == pvosGCtx) || (NULL == pVersion))
3157 {
3158 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 VOS_ASSERT(0);
3161 return VOS_STATUS_E_FAILURE;
3162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3164 if (NULL == pWDA )
3165 {
3166 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0);
3169 return VOS_STATUS_E_FAILURE;
3170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003171 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
3172 return VOS_STATUS_SUCCESS;
3173}
Jeff Johnson295189b2012-06-20 16:38:30 -07003174/*
3175 * FUNCTION: WDA_GetWcnssHardwareVersion
3176 * Returns the WCNSS Hardware version string
3177 */
3178VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
3179 tANI_U8 *pVersion,
3180 tANI_U32 versionBufferSize)
3181{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303182 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003184 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 if ((NULL == pvosGCtx) || (NULL == pVersion))
3186 {
3187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003188 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 VOS_ASSERT(0);
3190 return VOS_STATUS_E_FAILURE;
3191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3193 if (NULL == pWDA )
3194 {
3195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003196 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 VOS_ASSERT(0);
3198 return VOS_STATUS_E_FAILURE;
3199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
3201 return VOS_STATUS_SUCCESS;
3202}
Jeff Johnson295189b2012-06-20 16:38:30 -07003203/*
3204 * FUNCTION: WDA_WniCfgDnld
3205 * Trigger CFG Download
3206 */
3207VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
3208{
3209 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303210 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07003211
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 if (NULL == pMac )
3213 {
3214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003215 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 VOS_ASSERT(0);
3217 return VOS_STATUS_E_FAILURE;
3218 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303219 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 return vosStatus;
3221}
Jeff Johnson295189b2012-06-20 16:38:30 -07003222/* -----------------------------------------------------------------
3223 * WDI interface
3224 * -----------------------------------------------------------------
3225 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003226/*
3227 * FUNCTION: WDA_suspendDataTxCallback
3228 * call back function called from TL after suspend Transmission
3229 */
3230VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
3231 v_U8_t* ucSTAId,
3232 VOS_STATUS vosStatus)
3233{
3234 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003236 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 if (NULL == pWDA )
3238 {
3239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003240 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 VOS_ASSERT(0);
3242 return VOS_STATUS_E_FAILURE;
3243 }
3244 if(VOS_IS_STATUS_SUCCESS(vosStatus))
3245 {
3246 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
3247 }
3248 else
3249 {
3250 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
3251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003252 /* Trigger the event to bring the WDA TL suspend function to come
3253 * out of wait*/
3254 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
3255 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003258 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 /* If TL suspended had timedout before this callback was called, resume back
3261 * TL.*/
3262 if (pWDA->txSuspendTimedOut)
3263 {
3264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003265 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 WDA_ResumeDataTx(pWDA);
3267 pWDA->txSuspendTimedOut = FALSE;
3268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 return VOS_STATUS_SUCCESS;
3270}
Jeff Johnson295189b2012-06-20 16:38:30 -07003271/*
3272 * FUNCTION: WDA_suspendDataTx
3273 * Update TL to suspend the data Transmission
3274 */
3275VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
3276{
3277 VOS_STATUS status = VOS_STATUS_E_FAILURE;
3278 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003279
3280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003281 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 if (pWDA->txSuspendTimedOut)
3284 {
3285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003286 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 return status;
3288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 /* Reset the event to be not signalled */
3290 status = vos_event_reset(&pWDA->suspendDataTxEvent);
3291 if(!VOS_IS_STATUS_SUCCESS(status))
3292 {
3293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003294 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 return VOS_STATUS_E_FAILURE;
3296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07003298 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 WDA_SuspendDataTxCallback);
3300 if(status != VOS_STATUS_SUCCESS)
3301 {
3302 return status;
3303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 /* Wait for the event to be set by the TL, to get the response of
3305 * suspending the TX queues, this event should be set by the Callback
3306 * function called by TL*/
3307 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
3308 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
3309 if(!VOS_IS_STATUS_SUCCESS(status))
3310 {
3311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3312 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 /* Set this flag to true when TL suspend times out, so that when TL
3315 * suspend eventually happens and calls the callback, TL can be resumed
3316 * right away by looking at this flag when true.*/
3317 pWDA->txSuspendTimedOut = TRUE;
3318 }
3319 else
3320 {
3321 pWDA->txSuspendTimedOut = FALSE;
3322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
3324 {
3325 status = VOS_STATUS_SUCCESS;
3326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 return status;
3328}
Jeff Johnson295189b2012-06-20 16:38:30 -07003329/*
3330 * FUNCTION: WDA_resumeDataTx
3331 * Update TL to resume the data Transmission
3332 */
3333VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3334{
3335 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003336
3337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003339
3340 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 return status;
3342}
Jeff Johnson295189b2012-06-20 16:38:30 -07003343/*
3344 * FUNCTION: WDA_InitScanReqCallback
3345 * Trigger Init SCAN callback
3346 */
3347void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3348{
3349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3350 tWDA_CbContext *pWDA;
3351 tInitScanParams *pWDA_ScanParam ;
3352 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 if(NULL == pWdaParams)
3356 {
3357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 VOS_ASSERT(0) ;
3360 return ;
3361 }
3362 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3363 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 if(NULL == pWDA_ScanParam)
3365 {
3366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003367 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003368 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3370 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 return ;
3372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 if(WDI_STATUS_SUCCESS != wdiStatus)
3374 {
3375 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 if(VOS_STATUS_SUCCESS != status)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003379 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 }
3381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 /* free WDI command buffer */
3383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303385
3386
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003388 /* without converting the Status to Failure or Success Just
3389 pass the same status to lim */
3390 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 /* send SCAN RSP message back to PE */
3392 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 return ;
3394}
3395
3396/*
3397 * FUNCTION: WDA_ProcessInitScanReq
3398 * Trigger Init SCAN in DAL
3399 */
3400VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3401 tInitScanParams *initScanParams)
3402{
3403 WDI_Status status = WDI_STATUS_SUCCESS ;
3404 WDI_InitScanReqParamsType *wdiInitScanParam =
3405 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3406 sizeof(WDI_InitScanReqParamsType)) ;
3407 tWDA_ReqParams *pWdaParams;
3408 tANI_U8 i = 0;
3409
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 if(NULL == wdiInitScanParam)
3413 {
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 VOS_ASSERT(0);
3417 return VOS_STATUS_E_NOMEM;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3420 if(NULL == pWdaParams)
3421 {
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 VOS_ASSERT(0);
3425 vos_mem_free(wdiInitScanParam);
3426 return VOS_STATUS_E_NOMEM;
3427 }
3428
3429 /* Copy init Scan params to WDI structure */
3430 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3431 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3432 sizeof(tSirMacAddr)) ;
3433 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3434 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3435 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3437 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3439 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3441 {
3442 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3443 initScanParams->scanEntry.bssIdx[i] ;
3444 }
3445
3446 /* if Frame length, copy macMgmtHdr or WDI structure */
3447 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3448 {
3449 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3450 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3451 }
3452 wdiInitScanParam->wdiReqStatusCB = NULL ;
3453
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 /* Store Init Req pointer, as this will be used for response */
3455 pWdaParams->pWdaContext = pWDA;
3456 pWdaParams->wdaMsgParam = initScanParams;
3457 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 /* first try to suspend TX */
3459 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 if(WDI_STATUS_SUCCESS != status)
3461 {
3462 goto handleWdiFailure;
3463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 /* call DAL API to pass init scan request to DAL */
3465 status = WDI_InitScanReq(wdiInitScanParam,
3466 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 if(IS_WDI_STATUS_FAILURE(status))
3468 {
3469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3470 "error in WDA Init Scan, Resume Tx " );
3471 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_ASSERT(0) ;
3473
3474 goto handleWdiFailure;
3475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477handleWdiFailure:
3478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3479 "Failure in WDI Api, free all the memory " );
3480 /* free WDI command buffer */
3481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3482 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 /* send Failure to PE */
3484 initScanParams->status = eSIR_FAILURE ;
3485 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 return CONVERT_WDI2VOS_STATUS(status) ;
3487}
3488
Jeff Johnson295189b2012-06-20 16:38:30 -07003489/*
3490 * FUNCTION: WDA_StartScanReqCallback
3491 * send Start SCAN RSP back to PE
3492 */
3493void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3494 void* pUserData)
3495{
3496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3497 tWDA_CbContext *pWDA;
3498 tStartScanParams *pWDA_ScanParam;
3499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003500 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if(NULL == pWdaParams)
3502 {
3503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003504 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 VOS_ASSERT(0) ;
3506 return ;
3507 }
3508 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3509 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 if(NULL == pWDA_ScanParam)
3511 {
3512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003513 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003515 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 return ;
3517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3519 {
3520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003521 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003523 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 return ;
3525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3527 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003528
Jeff Johnson295189b2012-06-20 16:38:30 -07003529
3530 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003531 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 /* send SCAN RSP message back to PE */
3533 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 return ;
3535}
3536
Jeff Johnson295189b2012-06-20 16:38:30 -07003537/*
3538 * FUNCTION: WDA_ProcessStartScanReq
3539 * Trigger start SCAN in WDI
3540 */
3541VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3542 tStartScanParams *startScanParams)
3543{
3544 WDI_Status status = WDI_STATUS_SUCCESS;
3545 WDI_StartScanReqParamsType *wdiStartScanParams =
3546 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3547 sizeof(WDI_StartScanReqParamsType)) ;
3548 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 if(NULL == wdiStartScanParams)
3552 {
3553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 VOS_ASSERT(0);
3556 return VOS_STATUS_E_NOMEM;
3557 }
3558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3559 if(NULL == pWdaParams)
3560 {
3561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 VOS_ASSERT(0);
3564 vos_mem_free(wdiStartScanParams);
3565 return VOS_STATUS_E_NOMEM;
3566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 /* Copy init Scan params to WDI structure */
3568 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3569 wdiStartScanParams->wdiReqStatusCB = NULL ;
3570
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 /* Store Init Req pointer, as this will be used for response */
3572 /* store Params pass it to WDI */
3573 pWdaParams->pWdaContext = pWDA;
3574 pWdaParams->wdaMsgParam = startScanParams;
3575 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 /* call DAL API to pass init scan request to DAL */
3577 status = WDI_StartScanReq(wdiStartScanParams,
3578 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 /* failure returned by WDI API */
3580 if(IS_WDI_STATUS_FAILURE(status))
3581 {
3582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3583 "Failure in Start Scan WDI API, free all the memory "
3584 "It should be due to previous abort scan." );
3585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3586 vos_mem_free(pWdaParams) ;
3587 startScanParams->status = eSIR_FAILURE ;
3588 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 return CONVERT_WDI2VOS_STATUS(status) ;
3591}
Jeff Johnson295189b2012-06-20 16:38:30 -07003592/*
3593 * FUNCTION: WDA_EndScanReqCallback
3594 * END SCAN callback
3595 */
3596void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3597{
3598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3599 tWDA_CbContext *pWDA;
3600 tEndScanParams *endScanParam;
3601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003602 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 if(NULL == pWdaParams)
3604 {
3605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003606 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 VOS_ASSERT(0) ;
3608 return ;
3609 }
3610 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3611 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 if(NULL == endScanParam)
3613 {
3614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003615 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3618 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 return ;
3620 }
3621
3622 /* Free WDI command buffer */
3623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3624 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003626 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 /* send response back to PE */
3628 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3629 return ;
3630}
3631
Jeff Johnson295189b2012-06-20 16:38:30 -07003632/*
3633 * FUNCTION: WDA_ProcessEndScanReq
3634 * Trigger END SCAN in WDI
3635 */
3636VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3637 tEndScanParams *endScanParams)
3638{
3639 WDI_Status status = WDI_STATUS_SUCCESS;
3640 WDI_EndScanReqParamsType *wdiEndScanParams =
3641 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3642 sizeof(WDI_EndScanReqParamsType)) ;
3643 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 if(NULL == wdiEndScanParams)
3647 {
3648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 VOS_ASSERT(0);
3651 return VOS_STATUS_E_NOMEM;
3652 }
3653 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3654 if(NULL == pWdaParams)
3655 {
3656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 VOS_ASSERT(0);
3659 vos_mem_free(wdiEndScanParams);
3660 return VOS_STATUS_E_NOMEM;
3661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 /* Copy init Scan params to WDI structure */
3663 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3664 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 /* Store Init Req pointer, as this will be used for response */
3666 /* store Params pass it to WDI */
3667 pWdaParams->pWdaContext = pWDA;
3668 pWdaParams->wdaMsgParam = endScanParams;
3669 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 /* call DAL API to pass init scan request to DAL */
3671 status = WDI_EndScanReq(wdiEndScanParams,
3672 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 if(IS_WDI_STATUS_FAILURE(status))
3674 {
3675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3676 "Failure in End Scan WDI API, free all the memory "
3677 "It should be due to previous abort scan." );
3678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3679 vos_mem_free(pWdaParams) ;
3680 endScanParams->status = eSIR_FAILURE ;
3681 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 return CONVERT_WDI2VOS_STATUS(status) ;
3684}
Jeff Johnson295189b2012-06-20 16:38:30 -07003685/*
3686 * FUNCTION: WDA_FinishScanReqCallback
3687 * Trigger Finish SCAN callback
3688 */
3689void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3690{
3691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3692 tWDA_CbContext *pWDA;
3693 tFinishScanParams *finishScanParam;
3694 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003696 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(NULL == pWdaParams)
3698 {
3699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003700 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 VOS_ASSERT(0) ;
3702 return ;
3703 }
3704
3705 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3706 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 if(NULL == finishScanParam)
3708 {
3709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003710 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3713 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 return ;
3715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3717 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 /*
3719 * Now Resume TX, if we reached here means, TX is already suspended, we
3720 * have to resume it unconditionaly
3721 */
3722 status = WDA_ResumeDataTx(pWDA) ;
3723
3724 if(VOS_STATUS_SUCCESS != status)
3725 {
3726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003727 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003729 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003730 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3731 return ;
3732}
Jeff Johnson295189b2012-06-20 16:38:30 -07003733/*
3734 * FUNCTION: WDA_ProcessFinshScanReq
3735 * Trigger Finish SCAN in WDI
3736 */
3737VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3738 tFinishScanParams *finishScanParams)
3739{
3740 WDI_Status status = WDI_STATUS_SUCCESS;
3741 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3742 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3743 sizeof(WDI_FinishScanReqParamsType)) ;
3744 tWDA_ReqParams *pWdaParams ;
3745 tANI_U8 i = 0;
3746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003747 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 if(NULL == wdiFinishScanParams)
3749 {
3750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003751 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 VOS_ASSERT(0);
3753 return VOS_STATUS_E_NOMEM;
3754 }
3755 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3756 if(NULL == pWdaParams)
3757 {
3758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003759 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 VOS_ASSERT(0);
3761 vos_mem_free(wdiFinishScanParams);
3762 return VOS_STATUS_E_NOMEM;
3763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 /* Copy init Scan params to WDI structure */
3765 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3766 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3767 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3769 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3770 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3771 finishScanParams->frameLength ;
3772 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3773 finishScanParams->currentOperChannel ;
3774 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3775 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3776 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3778 {
3779 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3780 finishScanParams->scanEntry.bssIdx[i] ;
3781 }
3782
3783
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 /* if Frame length, copy macMgmtHdr ro WDI structure */
3785 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3786 {
3787 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3788 &finishScanParams->macMgmtHdr,
3789 sizeof(WDI_MacMgmtHdr)) ;
3790 }
3791 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 /* Store Init Req pointer, as this will be used for response */
3793 /* store Params pass it to WDI */
3794 pWdaParams->pWdaContext = pWDA;
3795 pWdaParams->wdaMsgParam = finishScanParams;
3796 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 /* call DAL API to pass init scan request to DAL */
3798 status = WDI_FinishScanReq(wdiFinishScanParams,
3799 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003800
Jeff Johnson295189b2012-06-20 16:38:30 -07003801
3802 /*
3803 * WDI API returns failure..
3804 */
3805 if(IS_WDI_STATUS_FAILURE( status))
3806 {
3807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3808 "Failure in Finish Scan WDI API, free all the memory " );
3809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3810 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 finishScanParams->status = eSIR_FAILURE ;
3812 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 return CONVERT_WDI2VOS_STATUS(status) ;
3815}
Jeff Johnson295189b2012-06-20 16:38:30 -07003816/*---------------------------------------------------------------------
3817 * ASSOC API's
3818 *---------------------------------------------------------------------
3819 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003820/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303821 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 * Trigger Init SCAN callback
3823 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303824void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003825{
3826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3827 tWDA_CbContext *pWDA;
3828 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003830 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 if(NULL == pWdaParams)
3832 {
3833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 VOS_ASSERT(0) ;
3836 return ;
3837 }
3838 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3839 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3841 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 /* reset macBSSID */
3843 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 /* reset macSTASelf */
3845 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003846 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003847 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 return ;
3849}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303850
3851/*
3852 * FUNCTION: WDA_JoinReqCallback
3853 * Free memory and send SWITCH CHANNEL RSP back to PE.
3854 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3855 */
3856void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3857{
3858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3859 tWDA_CbContext *pWDA;
3860 tSwitchChannelParams *joinReqParam;
3861
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3863 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3864
3865 if(NULL == pWdaParams)
3866 {
3867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3868 "%s: pWdaParams received NULL", __func__);
3869 VOS_ASSERT(0);
3870 return;
3871 }
3872
3873 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3874 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3875 joinReqParam->status = wdiStatus;
3876
3877 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3878 {
3879 /* reset macBSSID */
3880 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3881 /* reset macSTASelf */
3882 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3883
3884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3885 vos_mem_free(pWdaParams);
3886 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3887 }
3888
3889 return;
3890}
3891
Jeff Johnson295189b2012-06-20 16:38:30 -07003892/*
3893 * FUNCTION: WDA_ProcessJoinReq
3894 * Trigger Join REQ in WDI
3895 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003896VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3897 tSwitchChannelParams* joinReqParam)
3898{
3899 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 WDI_JoinReqParamsType *wdiJoinReqParam =
3901 (WDI_JoinReqParamsType *)vos_mem_malloc(
3902 sizeof(WDI_JoinReqParamsType)) ;
3903 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 if(NULL == wdiJoinReqParam)
3907 {
3908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003911 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 return VOS_STATUS_E_NOMEM;
3913 }
3914 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3915 if(NULL == pWdaParams)
3916 {
3917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 VOS_ASSERT(0);
3920 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003921 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 return VOS_STATUS_E_NOMEM;
3923 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003924
3925 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3926 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3927 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3928 {
3929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3930 "%s: received join request when BSSID or self-STA is NULL "
3931 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003932 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003933 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3934 VOS_ASSERT(0);
3935 vos_mem_free(wdiJoinReqParam);
3936 vos_mem_free(pWdaParams);
3937 joinReqParam->status = eSIR_FAILURE ;
3938 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3939 return VOS_STATUS_E_INVAL;
3940 }
3941
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 /* copy the BSSID for pWDA */
3943 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3944 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3946 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3948 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003949#ifdef WLAN_FEATURE_VOWIFI
3950 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3951 joinReqParam->maxTxPower ;
3952#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3954 joinReqParam->localPowerConstraint ;
3955#endif
3956 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3957 joinReqParam->secondaryChannelOffset ;
3958 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3959
Sachin Ahuja935eda782014-07-30 14:57:41 +05303960 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3961 wdiJoinReqParam->pUserData = pWdaParams;
3962
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 /* Store Init Req pointer, as this will be used for response */
3964 /* store Params pass it to WDI */
3965 pWdaParams->pWdaContext = pWDA;
3966 pWdaParams->wdaMsgParam = joinReqParam;
3967 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303969 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 if(IS_WDI_STATUS_FAILURE(status))
3971 {
3972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3973 "Failure in Join WDI API, free all the memory " );
3974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3975 vos_mem_free(pWdaParams) ;
3976 joinReqParam->status = eSIR_FAILURE ;
3977 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 return CONVERT_WDI2VOS_STATUS(status) ;
3980}
Jeff Johnson295189b2012-06-20 16:38:30 -07003981/*
3982 * FUNCTION: WDA_SwitchChannelReqCallback
3983 * send Switch channel RSP back to PE
3984 */
3985void WDA_SwitchChannelReqCallback(
3986 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3987{
3988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3989 tWDA_CbContext *pWDA;
3990 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003992 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 if(NULL == pWdaParams)
3994 {
3995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003996 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_ASSERT(0) ;
3998 return ;
3999 }
4000 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4001 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4002
4003#ifdef WLAN_FEATURE_VOWIFI
4004 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
4005#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4007 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004009 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 return ;
4012}
Jeff Johnson295189b2012-06-20 16:38:30 -07004013/*
4014 * FUNCTION: WDA_ProcessChannelSwitchReq
4015 * Request to WDI to switch channel REQ params.
4016 */
4017VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
4018 tSwitchChannelParams *pSwitchChanParams)
4019{
4020 WDI_Status status = WDI_STATUS_SUCCESS ;
4021 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
4022 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
4023 sizeof(WDI_SwitchChReqParamsType)) ;
4024 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004026 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 if(NULL == wdiSwitchChanParam)
4028 {
4029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 VOS_ASSERT(0);
4032 return VOS_STATUS_E_NOMEM;
4033 }
4034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4035 if(NULL == pWdaParams)
4036 {
4037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 VOS_ASSERT(0);
4040 vos_mem_free(wdiSwitchChanParam);
4041 return VOS_STATUS_E_NOMEM;
4042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
4044#ifndef WLAN_FEATURE_VOWIFI
4045 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4046 pSwitchChanParams->localPowerConstraint;
4047#endif
4048 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4049 pSwitchChanParams->secondaryChannelOffset;
4050 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 /* Store req pointer, as this will be used for response */
4052 /* store Params pass it to WDI */
4053 pWdaParams->pWdaContext = pWDA;
4054 pWdaParams->wdaMsgParam = pSwitchChanParams;
4055 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056#ifdef WLAN_FEATURE_VOWIFI
4057 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
4058 = pSwitchChanParams->maxTxPower;
4059 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4060 pSwitchChanParams ->selfStaMacAddr,
4061 sizeof(tSirMacAddr));
4062#endif
4063 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4064 pSwitchChanParams->bssId,
4065 sizeof(tSirMacAddr));
4066
4067 status = WDI_SwitchChReq(wdiSwitchChanParam,
4068 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 if(IS_WDI_STATUS_FAILURE(status))
4070 {
4071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4072 "Failure in process channel switch Req WDI API, free all the memory " );
4073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4074 vos_mem_free(pWdaParams) ;
4075 pSwitchChanParams->status = eSIR_FAILURE ;
4076 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
4077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 return CONVERT_WDI2VOS_STATUS(status) ;
4079}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08004080
4081/*
4082 * FUNCTION: WDA_SwitchChannelReqCallback_V1
4083 * send Switch channel RSP back to PE
4084 */
4085void WDA_SwitchChannelReqCallback_V1(
4086 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
4087 void* pUserData)
4088{
4089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
4090 tWDA_CbContext *pWDA;
4091 tSwitchChannelParams *pSwitchChanParams;
4092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4093 "<------ %s " ,__func__);
4094
4095 if (NULL == pWdaParams)
4096 {
4097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4098 "%s: pWdaParams received NULL", __func__);
4099 VOS_ASSERT(0);
4100 return ;
4101 }
4102 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4103 pSwitchChanParams =
4104 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4105 pSwitchChanParams->channelSwitchSrc =
4106 wdiSwitchChanRsp->channelSwitchSrc;
4107#ifdef WLAN_FEATURE_VOWIFI
4108 pSwitchChanParams->txMgmtPower =
4109 wdiSwitchChanRsp->ucTxMgmtPower;
4110#endif
4111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4112 vos_mem_free(pWdaParams);
4113 pSwitchChanParams->status =
4114 wdiSwitchChanRsp->wdiStatus ;
4115 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4116 (void *)pSwitchChanParams , 0);
4117 return;
4118}
4119
4120/*
4121 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
4122 * Request to WDI to switch channel REQ params.
4123 */
4124VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
4125 tSwitchChannelParams *pSwitchChanParams)
4126{
4127 WDI_Status status = WDI_STATUS_SUCCESS ;
4128 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
4129 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
4130 sizeof(WDI_SwitchChReqParamsType_V1)) ;
4131 tWDA_ReqParams *pWdaParams ;
4132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4133 "------> %s " ,__func__);
4134 if (NULL == wdiSwitchChanParam)
4135 {
4136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4137 "%s: VOS MEM Alloc Failure", __func__);
4138 VOS_ASSERT(0);
4139 return VOS_STATUS_E_NOMEM;
4140 }
4141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4142 if (NULL == pWdaParams)
4143 {
4144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4145 "%s: VOS MEM Alloc Failure", __func__);
4146 VOS_ASSERT(0);
4147 vos_mem_free(wdiSwitchChanParam);
4148 return VOS_STATUS_E_NOMEM;
4149 }
4150 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
4151 pSwitchChanParams->channelSwitchSrc;
4152
4153 wdiSwitchChanParam->wdiChInfo.ucChannel =
4154 pSwitchChanParams->channelNumber;
4155#ifndef WLAN_FEATURE_VOWIFI
4156 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4157 pSwitchChanParams->localPowerConstraint;
4158#endif
4159 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4160 pSwitchChanParams->secondaryChannelOffset;
4161 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
4162 /* Store req pointer, as this will be used for response */
4163 /* store Params pass it to WDI */
4164 pWdaParams->pWdaContext = pWDA;
4165 pWdaParams->wdaMsgParam = pSwitchChanParams;
4166 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
4167#ifdef WLAN_FEATURE_VOWIFI
4168 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
4169 pSwitchChanParams->maxTxPower;
4170 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4171 pSwitchChanParams ->selfStaMacAddr,
4172 sizeof(tSirMacAddr));
4173#endif
4174 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4175 pSwitchChanParams->bssId,
4176 sizeof(tSirMacAddr));
4177
4178 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
4179 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
4180 pWdaParams);
4181 if (IS_WDI_STATUS_FAILURE(status))
4182 {
4183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4184 "Failure in process channel switch Req WDI "
4185 "API, free all the memory " );
4186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4187 vos_mem_free(pWdaParams) ;
4188 pSwitchChanParams->status = eSIR_FAILURE ;
4189 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4190 (void *)pSwitchChanParams, 0) ;
4191 }
4192 return CONVERT_WDI2VOS_STATUS(status) ;
4193}
4194
Jeff Johnson295189b2012-06-20 16:38:30 -07004195/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304196 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 * config BSS Req Callback, called by WDI
4198 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304199void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 ,void* pUserData)
4201{
4202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4203 tWDA_CbContext *pWDA;
4204 tAddBssParams *configBssReqParam;
4205 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004207 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 if(NULL == pWdaParams)
4209 {
4210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004211 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 VOS_ASSERT(0) ;
4213 return ;
4214 }
4215 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4216 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
4217 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004219 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
4221 {
4222 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
4223 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
4225 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
4226 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
4227
4228 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
4229 {
4230 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
4231 {
4232 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
4233 staConfigBssParam->staType = STA_ENTRY_BSSID;
4234 }
4235 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
4236 (staConfigBssParam->staType == STA_ENTRY_SELF))
4237 {
4238 /* This is the 1st add BSS Req for the BTAMP STA */
4239 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4240 staConfigBssParam->staType = STA_ENTRY_BSSID;
4241 }
4242 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4243 (staConfigBssParam->staType == STA_ENTRY_PEER))
4244 {
4245 /* This is the 2nd ADD BSS Request that is sent
4246 * on the BTAMP STA side. The Sta type is
4247 * set to STA_ENTRY_PEER here.*/
4248 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4249 }
4250 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4251 (staConfigBssParam->staType == STA_ENTRY_SELF))
4252 {
4253 /* statype is already set by PE.
4254 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
4255 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
4256 staConfigBssParam->staType = STA_ENTRY_BSSID;
4257 }
4258 else
4259 {
4260 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
4261 staConfigBssParam->staType = STA_ENTRY_PEER;
4262 }
4263 }
4264 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
4265 {
4266 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
4267 staConfigBssParam->staType = STA_ENTRY_SELF;
4268 }
4269 else
4270 {
4271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4272 "Invalid operation mode specified");
4273 VOS_ASSERT(0);
4274 }
4275
4276 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004279 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
4281 sizeof(tSirMacAddr));
4282 staConfigBssParam->txChannelWidthSet =
4283 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
4285 staConfigBssParam->htCapable)
4286 {
4287 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
4288 wdiConfigBssRsp->ucBSSIdx;
4289 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
4290 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05304291 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
4292 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
4295 wdiConfigBssRsp->ucBSSIdx,
4296 wdiConfigBssRsp->ucSTAIdx))
4297 {
4298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004299 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 VOS_ASSERT(0) ;
4301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
4303 {
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 VOS_ASSERT(0) ;
4307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004308#ifdef WLAN_FEATURE_VOWIFI
4309 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
4310#endif
4311 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304312 else
4313 {
4314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4315 "%s: Failure with status %d", __func__,
4316 wdiConfigBssRsp->wdiStatus);
4317 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4318 WLAN_LOG_INDICATOR_HOST_DRIVER,
4319 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4320 FALSE, TRUE);
4321 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304322 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4323 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4325 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 return ;
4328}
Jeff Johnson295189b2012-06-20 16:38:30 -07004329/*
4330 * FUNCTION: WDA_UpdateEdcaParamsForAC
4331 * Update WDI EDCA params with PE edca params
4332 */
4333void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4334 WDI_EdcaParamRecord *wdiEdcaParam,
4335 tSirMacEdcaParamRecord *macEdcaParam)
4336{
4337 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4338 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4339 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4340 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4341 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4342 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4343}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304344void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4345 void* pUserData)
4346{
4347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4348 tWDA_CbContext *pWDA;
4349 tAddBssParams *addBssParams;
4350
4351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4352 "<------ %s, wdiStatus: %d",
4353 __func__, wdiStatus);
4354
4355 if (NULL == pWdaParams)
4356 {
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4358 "%s: Invalid pWdaParams pointer", __func__);
4359 VOS_ASSERT(0);
4360 return;
4361 }
4362
4363 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4364 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4365
4366 addBssParams->status = wdiStatus;
4367
4368 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4369 {
4370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4371 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304372 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4373 WLAN_LOG_INDICATOR_HOST_DRIVER,
4374 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4375 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304376 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4377 }
4378
4379 return ;
4380}
4381
Jeff Johnson295189b2012-06-20 16:38:30 -07004382/*
4383 * FUNCTION: WDA_ProcessConfigBssReq
4384 * Configure BSS before starting Assoc with AP
4385 */
4386VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4387 tAddBssParams* configBssReqParam)
4388{
4389 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304390 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004393 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304394 if (NULL == configBssReqParam)
4395 {
4396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4397 "%s: configBssReqParam is NULL", __func__);
4398 return VOS_STATUS_E_INVAL;
4399 }
4400
4401 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4402 sizeof(WDI_ConfigBSSReqParamsType)) ;
4403
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 if(NULL == wdiConfigBssReqParam)
4405 {
4406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 VOS_ASSERT(0);
4409 return VOS_STATUS_E_NOMEM;
4410 }
4411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4412 if(NULL == pWdaParams)
4413 {
4414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 VOS_ASSERT(0);
4417 vos_mem_free(wdiConfigBssReqParam);
4418 return VOS_STATUS_E_NOMEM;
4419 }
Kiran4a17ebe2013-01-31 10:43:43 -08004420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4421 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4424 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304425 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4426 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 /* Store Init Req pointer, as this will be used for response */
4428 /* store Params pass it to WDI */
4429 pWdaParams->pWdaContext = pWDA;
4430 pWdaParams->wdaMsgParam = configBssReqParam;
4431 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304433 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 if(IS_WDI_STATUS_FAILURE(status))
4435 {
4436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4437 "Failure in Config BSS WDI API, free all the memory " );
4438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4439 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 return CONVERT_WDI2VOS_STATUS(status) ;
4444}
Jeff Johnson295189b2012-06-20 16:38:30 -07004445#ifdef ENABLE_HAL_COMBINED_MESSAGES
4446/*
4447 * FUNCTION: WDA_PostAssocReqCallback
4448 * Post ASSOC req callback, send RSP back to PE
4449 */
4450void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4451 void* pUserData)
4452{
4453 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4454 tPostAssocParams *postAssocReqParam =
4455 (tPostAssocParams *)pWDA->wdaMsgParam ;
4456 /*STA context within the BSS Params*/
4457 tAddStaParams *staPostAssocParam =
4458 &postAssocReqParam->addBssParams.staContext ;
4459 /*STA Params for self STA*/
4460 tAddStaParams *selfStaPostAssocParam =
4461 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004463 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004465 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4467 {
4468 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4469 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4470 sizeof(tSirMacAddr)) ;
4471 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4472 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4473 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4475 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304476 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4478 pWDA->wdaWdiApiMsgParam = NULL;
4479 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 return ;
4482}
Jeff Johnson295189b2012-06-20 16:38:30 -07004483/*
4484 * FUNCTION: WDA_ProcessPostAssocReq
4485 * Trigger POST ASSOC processing in WDI
4486 */
4487VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4488 tPostAssocParams *postAssocReqParam)
4489{
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 WDI_Status status = WDI_STATUS_SUCCESS ;
4491
4492 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4493 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4494 sizeof(WDI_PostAssocReqParamsType)) ;
4495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004497
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 if(NULL == wdiPostAssocReqParam)
4499 {
4500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 VOS_ASSERT(0);
4503 return VOS_STATUS_E_NOMEM;
4504 }
4505
4506 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4507 {
4508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004509 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 VOS_ASSERT(0);
4511 return VOS_STATUS_E_FAILURE;
4512 }
4513
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 /* update BSS params into WDI structure */
4515 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4516 &postAssocReqParam->addBssParams) ;
4517 /* update STA params into WDI structure */
4518 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4519 &postAssocReqParam->addStaParams) ;
4520
4521 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4522 postAssocReqParam->addBssParams.highPerformance;
4523 WDA_UpdateEdcaParamsForAC(pWDA,
4524 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4525 &postAssocReqParam->addBssParams.acbe);
4526 WDA_UpdateEdcaParamsForAC(pWDA,
4527 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4528 &postAssocReqParam->addBssParams.acbk);
4529 WDA_UpdateEdcaParamsForAC(pWDA,
4530 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4531 &postAssocReqParam->addBssParams.acvi);
4532 WDA_UpdateEdcaParamsForAC(pWDA,
4533 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4534 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 /* Store Init Req pointer, as this will be used for response */
4536 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 /* store Params pass it to WDI */
4538 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4540 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 if(IS_WDI_STATUS_FAILURE(status))
4542 {
4543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4544 "Failure in Post Assoc WDI API, free all the memory " );
4545 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4546 pWDA->wdaWdiApiMsgParam = NULL;
4547 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004551 return CONVERT_WDI2VOS_STATUS(status) ;
4552}
4553#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004554/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304555 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 * ADD STA req callback, send RSP back to PE
4557 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304558void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 void* pUserData)
4560{
4561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4562 tWDA_CbContext *pWDA;
4563 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004565 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 if(NULL == pWdaParams)
4567 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 VOS_ASSERT(0) ;
4570 return ;
4571 }
4572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4573 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004575 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4577 {
4578 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4579 /*TODO: UMAC structure doesn't have these fields*/
4580 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4581 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4582 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4583 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4584 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4585 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004586#ifdef FEATURE_WLAN_TDLS
4587 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4588 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4589#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004591#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 {
4593 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4594 wdiConfigStaRsp->ucBssIdx;
4595 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4596 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304597 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4598 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 }
4600 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4601 {
4602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004603 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 VOS_ASSERT(0) ;
4605 return ;
4606 }
4607 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304608 else
4609 {
4610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4611 "%s: Failure with status %d", __func__,
4612 wdiConfigStaRsp->wdiStatus);
4613 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4614 WLAN_LOG_INDICATOR_HOST_DRIVER,
4615 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4616 FALSE, TRUE);
4617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4619 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 return ;
4622}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304623void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4624 void* pUserData)
4625{
4626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4627 tWDA_CbContext *pWDA;
4628 tAddStaParams *addStaParams;
4629
4630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4631 "<------ %s, wdiStatus: %d",
4632 __func__, wdiStatus);
4633
4634 if (NULL == pWdaParams)
4635 {
4636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4637 "%s: Invalid pWdaParams pointer", __func__);
4638 VOS_ASSERT(0);
4639 return;
4640 }
4641
4642 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4643 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4644
4645 addStaParams->status = wdiStatus;
4646
4647 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4648 {
4649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4650 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304651 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4652 WLAN_LOG_INDICATOR_HOST_DRIVER,
4653 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4654 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304655 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4656 }
4657
4658 return ;
4659}
4660
Jeff Johnson295189b2012-06-20 16:38:30 -07004661/*
4662 * FUNCTION: WDA_ConfigStaReq
4663 * Trigger Config STA processing in WDI
4664 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304665VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 tAddStaParams *addStaReqParam)
4667{
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4670 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4671 sizeof(WDI_ConfigSTAReqParamsType)) ;
4672 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004674 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 if(NULL == wdiConfigStaReqParam)
4676 {
4677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 VOS_ASSERT(0);
4680 return VOS_STATUS_E_NOMEM;
4681 }
4682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4683 if(NULL == pWdaParams)
4684 {
4685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 VOS_ASSERT(0);
4688 vos_mem_free(wdiConfigStaReqParam);
4689 return VOS_STATUS_E_NOMEM;
4690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 /* update STA params into WDI structure */
4693 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4694 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304695 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4696 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 /* Store Init Req pointer, as this will be used for response */
4698 /* store Params pass it to WDI */
4699 pWdaParams->pWdaContext = pWDA;
4700 pWdaParams->wdaMsgParam = addStaReqParam;
4701 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304702
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304704 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 if(IS_WDI_STATUS_FAILURE(status))
4706 {
4707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4708 "Failure in Config STA WDI API, free all the memory " );
4709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4710 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004712 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 return CONVERT_WDI2VOS_STATUS(status) ;
4715}
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304716#ifdef SAP_AUTH_OFFLOAD
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304717
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304718/**
4719 * WDA_ProcessSapAuthOffloadAddStaReq(): process add sta command.
4720 *
4721 * @pWDA: WDA Call back context
4722 * @addStaReqParam: Add sta request params
4723 *
4724 * This function process sta params and store them to WDA layer.
4725 * It will register station entry to mempool as well.
4726 * As station is already in associated state in firmware this
4727 * function doesnt send any request to firmware and wait for response,
4728 * instead of that this function will send response from here.
4729 *
4730 * Return: Return VOS_STATUS
4731 */
4732VOS_STATUS WDA_ProcessSapAuthOffloadAddStaReq(tWDA_CbContext *pWDA,
4733 tAddStaParams *addStaReqParam)
4734{
4735 WDI_Status status = WDI_STATUS_SUCCESS ;
4736 WDI_AddStaParams wdiAddSTAParam = {0};
4737 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4738 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4739 sizeof(WDI_ConfigSTAReqParamsType)) ;
4740
4741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4742 "------> %s " ,__func__);
4743
4744 if (NULL == wdiConfigStaReqParam)
4745 {
4746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4747 "%s: VOS MEM Alloc Failure", __func__);
4748 VOS_ASSERT(0);
4749 return VOS_STATUS_E_NOMEM;
4750 }
4751
4752 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
4753 /* update STA params into WDI structure */
4754 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4755 addStaReqParam);
4756 wdiAddSTAParam.ucSTAIdx = wdiConfigStaReqParam->wdiReqInfo.staIdx;
4757 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_PEER;
4758 /* MAC Address of STA */
4759 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
4760 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4761 WDI_MAC_ADDR_LEN);
4762
4763 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
4764 wdiConfigStaReqParam->wdiReqInfo.macBSSID,
4765 WDI_MAC_ADDR_LEN);
4766
4767 wdiAddSTAParam.dpuIndex = addStaReqParam->dpuIndex;
4768 wdiAddSTAParam.dpuSig = addStaReqParam->ucUcastSig;
4769 wdiAddSTAParam.bcastDpuIndex = addStaReqParam->bcastDpuIndex;
4770 wdiAddSTAParam.bcastDpuSignature = addStaReqParam->ucBcastSig;
4771 wdiAddSTAParam.bcastMgmtDpuIndex = addStaReqParam->bcastMgmtDpuIdx;
4772 wdiAddSTAParam.bcastMgmtDpuSignature = addStaReqParam->ucMgmtSig;
Agrawal Ashishedd0f622016-12-19 20:27:02 +05304773 wdiAddSTAParam.ucWmmEnabled = addStaReqParam->wmmEnabled;
4774 wdiAddSTAParam.ucRmfEnabled = addStaReqParam->rmfEnabled;
4775 wdiAddSTAParam.ucBSSIdx = addStaReqParam->bssIdx;
4776 wdiAddSTAParam.ucHTCapable = addStaReqParam->htCapable;
4777
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304778
4779 WDI_STATableAddSta(pWDA->pWdiContext, &wdiAddSTAParam);
4780 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].ucValidStaIndex =
4781 WDA_VALID_STA_INDEX;
4782 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].currentOperChan =
4783 addStaReqParam->currentOperChan;
4784
4785 if (WDI_STATUS_SUCCESS !=
4786 WDI_STATableFindStaidByAddr(pWDA->pWdiContext,
4787 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4788 (wpt_uint8 *)&wdiConfigStaReqParam->wdiReqInfo.staIdx))
4789 {
4790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4791 "%s: Failed to get selfStaIdx!", __func__);
4792 }
4793 if (WDI_DS_AddSTAMemPool(pWDA->pWdiContext,
4794 wdiConfigStaReqParam->wdiReqInfo.staIdx))
4795 {
4796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4797 "%s: add STA into mempool fail", __func__);
4798 VOS_ASSERT(0) ;
4799 }
4800 vos_mem_free(wdiConfigStaReqParam);
4801 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4802 return status;
4803}
4804#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004805/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304806 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304808 */
4809void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 void* pUserData)
4811{
4812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4813 tWDA_CbContext *pWDA;
4814 tDeleteBssParams *delBssReqParam;
4815 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004817 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004818 if(NULL == pWdaParams)
4819 {
4820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004821 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 VOS_ASSERT(0) ;
4823 return ;
4824 }
4825 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4826 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004827 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4829 {
4830 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4831 sizeof(tSirMacAddr)) ;
4832 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304833 else
4834 {
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4836 "%s: Failure with status %d", __func__,
4837 wdiDelBssRsp->wdiStatus);
4838 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4839 WLAN_LOG_INDICATOR_HOST_DRIVER,
4840 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4841 FALSE, TRUE);
4842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4844 {
4845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004846 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 VOS_ASSERT(0) ;
4848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4850 {
4851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004852 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 VOS_ASSERT(0) ;
4854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4856 {
4857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004858 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 VOS_ASSERT(0) ;
4860 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304861
4862 WLANTL_StartForwarding(staIdx,0,0);
4863
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4865 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 /* reset the the system role*/
4867 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4868
4869 /* Reset the BA related information */
4870 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4871 {
4872 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4873 {
4874 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4875 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304876 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 /* Reset framesTxed counters here */
4878 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4879 {
4880 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4881 }
4882 }
4883 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304884
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 return ;
4887}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304888void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4889 void* pUserData)
4890{
4891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4892 tWDA_CbContext *pWDA;
4893 tDeleteBssParams *delbssParams;
4894
4895 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4896 "<------ %s, wdiStatus: %d",
4897 __func__, wdiStatus);
4898
4899 if (NULL == pWdaParams)
4900 {
4901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4902 "%s: Invalid pWdaParams pointer", __func__);
4903 VOS_ASSERT(0);
4904 return;
4905 }
4906
4907 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4908 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4909
4910 delbssParams->status = wdiStatus ;
4911
4912 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4913 {
4914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4915 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304916 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4917 WLAN_LOG_INDICATOR_HOST_DRIVER,
4918 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4919 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304920 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4921 }
4922
4923 return ;
4924}
Jeff Johnson295189b2012-06-20 16:38:30 -07004925
Jeff Johnson295189b2012-06-20 16:38:30 -07004926/*
4927 * FUNCTION: WDA_ProcessDelBssReq
4928 * Init DEL BSS req with WDI
4929 */
4930VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4931 tDeleteBssParams *delBssParam)
4932{
4933 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4935 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4936 sizeof(WDI_DelBSSReqParamsType)) ;
4937 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 if(NULL == wdiDelBssReqParam)
4941 {
4942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 VOS_ASSERT(0);
4945 return VOS_STATUS_E_NOMEM;
4946 }
4947 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4948 if(NULL == pWdaParams)
4949 {
4950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 VOS_ASSERT(0);
4953 vos_mem_free(wdiDelBssReqParam);
4954 return VOS_STATUS_E_NOMEM;
4955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304957 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4958 wdiDelBssReqParam->pUserData = pWdaParams;
4959
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 /* Store Init Req pointer, as this will be used for response */
4961 /* store Params pass it to WDI */
4962 pWdaParams->pWdaContext = pWDA;
4963 pWdaParams->wdaMsgParam = delBssParam;
4964 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304965
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304967 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 if(IS_WDI_STATUS_FAILURE(status))
4969 {
4970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4971 "Failure in Del BSS WDI API, free all the memory " );
4972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4973 vos_mem_free(pWdaParams) ;
4974 delBssParam->status = eSIR_FAILURE ;
4975 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 return CONVERT_WDI2VOS_STATUS(status) ;
4978}
Jeff Johnson295189b2012-06-20 16:38:30 -07004979/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304980 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304982 */
4983void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 void* pUserData)
4985{
4986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4987 tWDA_CbContext *pWDA;
4988 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004990 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 if(NULL == pWdaParams)
4992 {
4993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004994 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304995 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 return ;
4997 }
4998 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4999 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005000 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
5002 {
5003 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
5004 {
5005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005006 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_ASSERT(0) ;
5008 }
5009 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05305010 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 }
Abhishek Singh837adf22015-10-01 17:37:37 +05305012 else
5013 {
5014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5015 "%s: Failure with status %d", __func__,
5016 wdiDelStaRsp->wdiStatus);
5017 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5018 WLAN_LOG_INDICATOR_HOST_DRIVER,
5019 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5020 FALSE, TRUE);
5021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5023 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005024 /*Reset the BA information corresponding to this STAIdx */
5025 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
5026 WDA_INVALID_STA_INDEX;
5027 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05305028 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 return ;
5031}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305032void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
5033 void* pUserData)
5034{
5035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5036 tWDA_CbContext *pWDA;
5037 tDeleteStaParams *delStaParams;
5038
5039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5040 "<------ %s, wdiStatus: %d",
5041 __func__, wdiStatus);
5042
5043 if (NULL == pWdaParams)
5044 {
5045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5046 "%s: Invalid pWdaParams pointer", __func__);
5047 VOS_ASSERT(0);
5048 return;
5049 }
5050
5051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5052 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
5053
5054 delStaParams->status = wdiStatus ;
5055
5056 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5057 {
5058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5059 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305060 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5061 WLAN_LOG_INDICATOR_HOST_DRIVER,
5062 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5063 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305064 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
5065 }
5066
5067 return ;
5068}
5069
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305070#ifdef SAP_AUTH_OFFLOAD
5071/**
5072 * WDA_ProcessSapAuthOffloadDelStaReq(): process del sta command.
5073 *
5074 * @pWDA: WDA Call back context
5075 * @delStaParam: Del sta request params
5076 *
5077 * This function process sta params and remove entry from WDA layer.
5078 * It will unregister station entry from mempool as well.
5079 * As station is already in disassociated state in firmware this
5080 * function doesn't send any request to firmware and wait for response,
5081 * instead of that this function will send response from here.
5082 *
5083 * Return: Return VOS_STATUS
5084 */
5085void WDA_ProcessSapAuthOffloadDelStaReq(tWDA_CbContext *pWDA,
5086 tDeleteStaParams *delStaParam)
5087
5088{
5089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5090 "------> %s " ,__func__);
5091
5092 if (WDI_DS_DelSTAMemPool(pWDA->pWdiContext, delStaParam->staIdx))
5093 {
5094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5095 "%s: DEL STA from MemPool Fail", __func__);
5096 // VOS_ASSERT(0) ;
5097 }
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305098 WLANTL_StartForwarding(delStaParam->staIdx, 0, 0);
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305099 WDI_STATableDelSta(pWDA->pWdiContext, delStaParam->staIdx);
5100 pWDA->wdaStaInfo[delStaParam->staIdx].ucValidStaIndex =
5101 WDA_INVALID_STA_INDEX;
5102 pWDA->wdaStaInfo[delStaParam->staIdx].currentOperChan = 0;
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305103 pWDA->wdaStaInfo[delStaParam->staIdx].ucUseBaBitmap = 0;
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305104 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0);
5105 return ;
5106}
5107#endif
5108
Jeff Johnson295189b2012-06-20 16:38:30 -07005109/*
5110 * FUNCTION: WDA_ProcessDelStaReq
5111 * Init DEL STA req with WDI
5112 */
5113VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
5114 tDeleteStaParams *delStaParam)
5115{
5116 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
5118 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
5119 sizeof(WDI_DelSTAReqParamsType)) ;
5120 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005122 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 if(NULL == wdiDelStaReqParam)
5124 {
5125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 VOS_ASSERT(0);
5128 return VOS_STATUS_E_NOMEM;
5129 }
5130 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5131 if(NULL == pWdaParams)
5132 {
5133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 VOS_ASSERT(0);
5136 vos_mem_free(wdiDelStaReqParam);
5137 return VOS_STATUS_E_NOMEM;
5138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305140 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
5141 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 /* Store Init Req pointer, as this will be used for response */
5143 /* store Params pass it to WDI */
5144 pWdaParams->pWdaContext = pWDA;
5145 pWdaParams->wdaMsgParam = delStaParam;
5146 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305147
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305149 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 if(IS_WDI_STATUS_FAILURE(status))
5151 {
5152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5153 "Failure in Del STA WDI API, free all the memory status = %d",
5154 status );
5155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5156 vos_mem_free(pWdaParams) ;
5157 delStaParam->status = eSIR_FAILURE ;
5158 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
5159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 return CONVERT_WDI2VOS_STATUS(status) ;
5161}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305162void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07005163{
5164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5165 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305166 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005168 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 if(NULL == pWdaParams)
5170 {
5171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005172 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 VOS_ASSERT(0) ;
5174 return ;
5175 }
5176 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5177 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5179 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
5181 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
5182 pwdiAddSTASelfRsp->macSelfSta,
5183 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305184 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
5185 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
5186 if (pAddStaSelfRsp->status == eSIR_FAILURE)
5187 {
5188 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
5189 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5191 "%s: Failure with status %d failcnter %d", __func__,
5192 pwdiAddSTASelfRsp->wdiStatus,
5193 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5194 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5195 WLAN_LOG_INDICATOR_HOST_DRIVER,
5196 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5197 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 return ;
5201}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305202void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
5203 void* pUserData)
5204{
5205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5206 tWDA_CbContext *pWDA;
5207 tAddStaSelfParams *addStaSelfParams;
5208
5209 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5210 "<------ %s, wdiStatus: %d",
5211 __func__, wdiStatus);
5212
5213 if (NULL == pWdaParams)
5214 {
5215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5216 "%s: Invalid pWdaParams pointer", __func__);
5217 VOS_ASSERT(0);
5218 return;
5219 }
5220
5221 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5222 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
5223
5224 addStaSelfParams->status = wdiStatus ;
5225
5226 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5227 {
5228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5229 vos_mem_free(pWdaParams) ;
5230 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
5231 = WDA_ADDSTA_REQ_WDI_FAIL;
5232 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5234 "%s: Failure with status %d failcnter %d", __func__,
5235 wdiStatus,
5236 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5237 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5238 WLAN_LOG_INDICATOR_HOST_DRIVER,
5239 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5240 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305241 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
5242 }
5243
5244 return ;
5245}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305246
Jeff Johnson295189b2012-06-20 16:38:30 -07005247/*
5248 * FUNCTION: WDA_ProcessAddStaSelfReq
5249 *
5250 */
5251VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
5252{
5253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005254 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
5256 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
5257 sizeof(WDI_AddSTASelfReqParamsType)) ;
5258 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005260 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305261 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 if( NULL == wdiAddStaSelfReq )
5263 {
5264 VOS_ASSERT( 0 );
5265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005266 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305267 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5268 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005269 return( VOS_STATUS_E_NOMEM );
5270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 if( NULL == pWdaParams )
5273 {
5274 VOS_ASSERT( 0 );
5275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005276 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305277 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5278 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 vos_mem_free(wdiAddStaSelfReq) ;
5280 return( VOS_STATUS_E_NOMEM );
5281 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305282 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
5283 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07005285 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 /* Store Init Req pointer, as this will be used for response */
5287 /* store Params pass it to WDI */
5288 pWdaParams->pWdaContext = pWDA;
5289 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305290 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
5291
5292 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
5293 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005294
Jeff Johnson43971f52012-07-17 12:26:56 -07005295 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 {
5297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5298 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07005299 wstatus );
5300 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5302 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305303 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
5304 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 pAddStaSelfReq->status = eSIR_FAILURE ;
5306 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
5307 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005308 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309}
Jeff Johnson295189b2012-06-20 16:38:30 -07005310/*
5311 * FUNCTION: WDA_DelSTASelfRespCallback
5312 *
5313 */
5314void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
5315 wdiDelStaSelfRspParams , void* pUserData)
5316{
5317 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5318 tWDA_CbContext *pWDA;
5319 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 if (NULL == pWdaParams)
5323 {
5324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005325 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 VOS_ASSERT(0);
5327 return;
5328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5330 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005332 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333
5334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5335 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305336 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305337 {
Abhishek Singh837adf22015-10-01 17:37:37 +05305338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5339 "%s: Failure with status %d", __func__,
5340 wdiDelStaSelfRspParams->wdiStatus);
5341 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5342 WLAN_LOG_INDICATOR_HOST_DRIVER,
5343 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5344 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 return ;
5348}
Jeff Johnson295189b2012-06-20 16:38:30 -07005349/*
5350 * FUNCTION: WDA_DelSTASelfReqCallback
5351 *
5352 */
5353void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
5354 void* pUserData)
5355{
5356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5357 tWDA_CbContext *pWDA;
5358 tDelStaSelfParams *delStaSelfParams;
5359
5360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05305361 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005362 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363
5364 if (NULL == pWdaParams)
5365 {
5366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005367 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 VOS_ASSERT(0);
5369 return;
5370 }
5371
5372 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5373 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
5374
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005375 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005376
5377 if(IS_WDI_STATUS_FAILURE(wdiStatus))
5378 {
5379 VOS_ASSERT(0);
5380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5381 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305382 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5383 WLAN_LOG_INDICATOR_HOST_DRIVER,
5384 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5385 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
5387 }
5388
5389 return ;
5390}
5391
5392/*
5393 * FUNCTION: WDA_DelSTASelfReq
5394 * Trigger Config STA processing in WDI
5395 */
5396VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
5397 tDelStaSelfParams* pDelStaSelfReqParam)
5398{
5399 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005400 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 tWDA_ReqParams *pWdaParams = NULL;
5402 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
5403 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
5404 sizeof(WDI_DelSTASelfReqParamsType)) ;
5405
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005407 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 if( NULL == wdiDelStaSelfReq )
5409 {
5410 VOS_ASSERT( 0 );
5411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005412 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 return( VOS_STATUS_E_NOMEM );
5414 }
5415
5416 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5417 if( NULL == pWdaParams )
5418 {
5419 VOS_ASSERT( 0 );
5420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005421 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 vos_mem_free(wdiDelStaSelfReq) ;
5423 return( VOS_STATUS_E_NOMEM );
5424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 pWdaParams->pWdaContext = pWDA;
5426 /* Store param pointer as passed in by caller */
5427 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
5428 /* store Params pass it to WDI */
5429 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
5431 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
5432
5433 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
5434 wdiDelStaSelfReq->pUserData = pWdaParams;
5435
Jeff Johnson43971f52012-07-17 12:26:56 -07005436 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
5438
Jeff Johnson43971f52012-07-17 12:26:56 -07005439 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 {
5441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
5442 "Failure in Del Sta Self REQ WDI API, free all the memory " );
5443 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07005444 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5446 vos_mem_free(pWdaParams) ;
5447 pDelStaSelfReqParam->status = eSIR_FAILURE ;
5448 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
5449 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005450 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005451}
5452
Jeff Johnson295189b2012-06-20 16:38:30 -07005453/*
5454 * FUNCTION: WDA_SendMsg
5455 * Send Message back to PE
5456 */
5457void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
5458 void *pBodyptr, tANI_U32 bodyVal)
5459{
5460 tSirMsgQ msg = {0} ;
5461 tANI_U32 status = VOS_STATUS_SUCCESS ;
5462 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 msg.type = msgType;
5464 msg.bodyval = bodyVal;
5465 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005467 if (VOS_STATUS_SUCCESS != status)
5468 {
5469 if(NULL != pBodyptr)
5470 {
5471 vos_mem_free(pBodyptr);
5472 }
5473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005474 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 VOS_ASSERT(0) ;
5476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 return ;
5478}
Jeff Johnson295189b2012-06-20 16:38:30 -07005479/*
5480 * FUNCTION: WDA_UpdateBSSParams
5481 * Translated WDA/PE BSS info into WDI BSS info..
5482 */
5483void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5484 WDI_ConfigBSSReqInfoType *wdiBssParams,
5485 tAddBssParams *wdaBssParams)
5486{
5487 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305488 v_U8_t i = 0;
5489
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 /* copy bssReq Params to WDI structure */
5491 vos_mem_copy(wdiBssParams->macBSSID,
5492 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5493 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5494 sizeof(tSirMacAddr)) ;
5495 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5496 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5497 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 wdiBssParams->ucShortSlotTimeSupported =
5499 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5501 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5502 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5503 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5504 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5505
5506 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5507 wdiBssParams->ucTXOPProtectionFullSupport =
5508 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5510 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5513 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5514 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5515 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5516
Chet Lanctot186b5732013-03-18 10:26:30 -07005517 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5518
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 /* copy SSID into WDI structure */
5520 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5521 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5522 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5524 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526#ifdef WLAN_FEATURE_VOWIFI
5527 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5528#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005531#ifdef WLAN_FEATURE_VOWIFI_11R
5532 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 if(wdiBssParams->bExtSetStaKeyParamValid)
5534 {
5535 /* copy set STA key params to WDI structure */
5536 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5537 wdaBssParams->extSetStaKeyParam.staIdx;
5538 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5539 wdaBssParams->extSetStaKeyParam.encType;
5540 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5541 wdaBssParams->extSetStaKeyParam.wepType;
5542 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5543 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5545 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005546 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5548 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5549 {
5550 WDA_GetWepKeysFromCfg( pWDA,
5551 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5552 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5553 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5554 }
5555 else
5556 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5558 keyIndex++)
5559 {
5560 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5561 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5562 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5563 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5564 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5565 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305566
5567 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5568 {
5569 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5570 {
5571 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5572 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5573 }
5574
5575 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5576 {
5577 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5578 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5579 }
5580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5581 FL("%s: Negated Keys"), __func__);
5582 }
5583 else
5584 {
5585 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5586 FL("%s: No change in Keys "), __func__);
5587 vos_mem_copy(
5588 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5589 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5590 WLAN_MAX_KEY_RSC_LEN);
5591 vos_mem_copy(
5592 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5593 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5594 SIR_MAC_MAX_KEY_LENGTH);
5595 }
5596
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5598 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5599 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5600 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305602 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005604 }
5605 }
5606 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5607 }
5608 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5609 {
5610 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5611 sizeof(wdaBssParams->extSetStaKeyParam) );
5612 }
5613#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005614#ifdef WLAN_FEATURE_11AC
5615 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5616 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5617#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005618
5619 return ;
5620}
Jeff Johnson295189b2012-06-20 16:38:30 -07005621/*
5622 * FUNCTION: WDA_UpdateSTAParams
5623 * Translated WDA/PE BSS info into WDI BSS info..
5624 */
5625void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5626 WDI_ConfigStaReqInfoType *wdiStaParams,
5627 tAddStaParams *wdaStaParams)
5628{
5629 tANI_U8 i = 0;
5630 /* Update STA params */
5631 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5632 sizeof(tSirMacAddr)) ;
5633 wdiStaParams->usAssocId = wdaStaParams->assocId;
5634 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005635 wdiStaParams->staIdx = wdaStaParams->staIdx;
5636
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 wdiStaParams->ucShortPreambleSupported =
5638 wdaStaParams->shortPreambleSupported;
5639 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5640 sizeof(tSirMacAddr)) ;
5641 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5642
5643 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5644
5645 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5646 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5647 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5648 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5649 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5650 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5651 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5652
5653 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5654 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 wdiStaParams->wdiSupportedRates.opRateMode =
5656 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5658 {
5659 wdiStaParams->wdiSupportedRates.llbRates[i] =
5660 wdaStaParams->supportedRates.llbRates[i];
5661 }
5662 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5663 {
5664 wdiStaParams->wdiSupportedRates.llaRates[i] =
5665 wdaStaParams->supportedRates.llaRates[i];
5666 }
5667 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5668 {
5669 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5670 wdaStaParams->supportedRates.aniLegacyRates[i];
5671 }
5672 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5673 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005674#ifdef WLAN_FEATURE_11AC
5675 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5676 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5677 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5678 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5679#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5681 {
5682 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5683 wdaStaParams->supportedRates.supportedMCSSet[i];
5684 }
5685 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5686 wdaStaParams->supportedRates.rxHighestDataRate;
5687
5688 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5689
5690 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5691
5692 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5693 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5694 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5695
5696 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5697 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5698 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5699 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005701#ifdef WLAN_FEATURE_11AC
5702 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5703 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005704 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305705 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5706 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5707 * must be set by default */
5708 if ( wdiStaParams->vhtTxMUBformeeCapable )
5709 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005710#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005711 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5712 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 return ;
5714}
Jeff Johnson295189b2012-06-20 16:38:30 -07005715/*
5716 * -------------------------------------------------------------------------
5717 * CFG update to WDI
5718 * -------------------------------------------------------------------------
5719 */
5720
5721 /*
5722 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5723 * Convert the WNI CFG ID to HAL CFG ID
5724 */
mukul sharma6b53e202016-11-23 19:29:18 +05305725static inline tANI_U16 WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005726{
5727 switch(wniCfgId)
5728 {
5729 case WNI_CFG_STA_ID:
5730 return QWLAN_HAL_CFG_STA_ID;
5731 case WNI_CFG_CURRENT_TX_ANTENNA:
5732 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5733 case WNI_CFG_CURRENT_RX_ANTENNA:
5734 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5735 case WNI_CFG_LOW_GAIN_OVERRIDE:
5736 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5737 case WNI_CFG_POWER_STATE_PER_CHAIN:
5738 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5739 case WNI_CFG_CAL_PERIOD:
5740 return QWLAN_HAL_CFG_CAL_PERIOD;
5741 case WNI_CFG_CAL_CONTROL:
5742 return QWLAN_HAL_CFG_CAL_CONTROL;
5743 case WNI_CFG_PROXIMITY:
5744 return QWLAN_HAL_CFG_PROXIMITY;
5745 case WNI_CFG_NETWORK_DENSITY:
5746 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5747 case WNI_CFG_MAX_MEDIUM_TIME:
5748 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5749 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5750 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5751 case WNI_CFG_RTS_THRESHOLD:
5752 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5753 case WNI_CFG_SHORT_RETRY_LIMIT:
5754 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5755 case WNI_CFG_LONG_RETRY_LIMIT:
5756 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5757 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5758 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5759 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5760 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5761 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5762 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5763 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5764 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5765 case WNI_CFG_FIXED_RATE:
5766 return QWLAN_HAL_CFG_FIXED_RATE;
5767 case WNI_CFG_RETRYRATE_POLICY:
5768 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5769 case WNI_CFG_RETRYRATE_SECONDARY:
5770 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5771 case WNI_CFG_RETRYRATE_TERTIARY:
5772 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5773 case WNI_CFG_FORCE_POLICY_PROTECTION:
5774 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5775 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5776 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5777 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5778 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5779 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5780 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5781 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5782 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5783 case WNI_CFG_MAX_BA_SESSIONS:
5784 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5785 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5786 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5787 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5788 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5789 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5790 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5791 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5792 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5793 case WNI_CFG_STATS_PERIOD:
5794 return QWLAN_HAL_CFG_STATS_PERIOD;
5795 case WNI_CFG_CFP_MAX_DURATION:
5796 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5797#if 0 /*This is not part of CFG*/
5798 case WNI_CFG_FRAME_TRANS_ENABLED:
5799 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5800#endif
5801 case WNI_CFG_DTIM_PERIOD:
5802 return QWLAN_HAL_CFG_DTIM_PERIOD;
5803 case WNI_CFG_EDCA_WME_ACBK:
5804 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5805 case WNI_CFG_EDCA_WME_ACBE:
5806 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5807 case WNI_CFG_EDCA_WME_ACVI:
5808 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5809 case WNI_CFG_EDCA_WME_ACVO:
5810 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5811#if 0
5812 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5813 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5814 case WNI_CFG_TELE_BCN_TRANS_LI:
5815 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5816 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5817 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5818 case WNI_CFG_TELE_BCN_MAX_LI:
5819 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5820 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5821 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5822#endif
5823 case WNI_CFG_ENABLE_CLOSE_LOOP:
5824 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005825 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5826 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305827 case WNI_CFG_ENABLE_CONC_BMISS:
5828 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5829 case WNI_CFG_ENABLE_UNITS_BWAIT:
5830 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305831 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5832 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
mukul sharma6b53e202016-11-23 19:29:18 +05305833 case WNI_CFG_ENABLE_MC_ADDR_LIST:
5834 return QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
Ravi Kumar bokka7d032762016-12-12 23:33:01 +05305835 case WNI_CFG_HEART_BEAT_THRESHOLD:
5836 return QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
5837
Jeff Johnson295189b2012-06-20 16:38:30 -07005838 default:
5839 {
5840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005841 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 wniCfgId);
mukul sharma6b53e202016-11-23 19:29:18 +05305843 return QWLAN_HAL_CFG_MAX_PARAMS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 }
5845 }
5846}
Jeff Johnson295189b2012-06-20 16:38:30 -07005847/*
5848 * FUNCTION: WDA_UpdateCfgCallback
5849 *
5850 */
5851void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5852{
5853 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5854 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5855 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005857 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 /*
5859 * currently there is no response message is expected between PE and
5860 * WDA, Failure return from WDI is a ASSERT condition
5861 */
5862 if(WDI_STATUS_SUCCESS != wdiStatus)
5863 {
5864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005865 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5867 }
5868
5869 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5870 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5871 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 return ;
5873}
Jeff Johnson295189b2012-06-20 16:38:30 -07005874/*
5875 * FUNCTION: WDA_UpdateCfg
5876 *
5877 */
5878VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5879{
5880
5881 WDI_Status status = WDI_STATUS_SUCCESS ;
5882 tANI_U32 val =0;
5883 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5884 tHalCfg *configData;
5885 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5886 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 if (NULL == pMac )
5890 {
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005892 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 return VOS_STATUS_E_FAILURE;
5894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 if(WDA_START_STATE != pWDA->wdaState)
5896 {
5897 return VOS_STATUS_E_FAILURE;
5898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5900 {
5901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005902 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 VOS_ASSERT(0);
5904 return VOS_STATUS_E_FAILURE;
5905 }
mukul sharma6b53e202016-11-23 19:29:18 +05305906
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5908 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 if(NULL == wdiCfgReqParam)
5910 {
5911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 VOS_ASSERT(0);
5914 return VOS_STATUS_E_NOMEM;
5915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5917 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 if(NULL == wdiCfgReqParam->pConfigBuffer)
5919 {
5920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 vos_mem_free(wdiCfgReqParam);
5923 VOS_ASSERT(0);
5924 return VOS_STATUS_E_NOMEM;
5925 }
mukul sharma6b53e202016-11-23 19:29:18 +05305926
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 /*convert the WNI CFG Id to HAL CFG Id*/
5928 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5929 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5930
5931 /*TODO: revisit this for handling string parameters */
5932 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5933 &val) != eSIR_SUCCESS)
5934 {
5935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005936 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5938 vos_mem_free(wdiCfgReqParam);
5939 return eSIR_FAILURE;
5940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5942 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5943 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5944 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5945 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5946
5947 /* store Params pass it to WDI */
5948 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005949#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5950 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5951 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 if(IS_WDI_STATUS_FAILURE(status))
5953 {
5954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5955 "Failure in Update CFG WDI API, free all the memory " );
5956 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5957 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5958 pWDA->wdaWdiCfgApiMsgParam = NULL;
5959 /* Failure is not expected */
5960 VOS_ASSERT(0) ;
5961 }
5962#else
5963 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5964 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5965 pWDA->wdaWdiCfgApiMsgParam = NULL;
5966#endif
5967 return CONVERT_WDI2VOS_STATUS(status) ;
5968}
5969
mukul sharma6b53e202016-11-23 19:29:18 +05305970/*
5971 * FUNCTION: WDA_UpdateCfgIntParamCb
5972 *
5973 */
5974void WDA_UpdateCfgIntParamCb(WDI_Status wdiStatus, void* pUserData)
5975{
5976 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5977 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5978 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgUpdateIntMsg ;
5979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5980 "<------ %s " ,__func__);
5981 /*
5982 * currently there is no response message is expected between PE and
5983 * WDA, Failure return from WDI is a ASSERT condition
5984 */
5985 if (WDI_STATUS_SUCCESS != wdiStatus)
5986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5987 "%s: CFG (%d) config failure", __func__,
5988 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5989
5990 if (wdiCfgParam && wdiCfgParam->pConfigBuffer)
5991 {
5992 vos_mem_free(wdiCfgParam->pConfigBuffer);
5993 wdiCfgParam->pConfigBuffer = NULL;
5994 }
5995
5996 if (pWDA->wdaWdiCfgUpdateIntMsg)
5997 {
5998 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
5999 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6000 }
6001
6002 return ;
6003}
6004
6005/*
6006 * FUNCTION: WDA_UpdateCfgIntParam
6007 *
6008 */
6009VOS_STATUS WDA_UpdateCfgIntParam(tWDA_CbContext *pWDA,
6010 tSirUpdateCfgIntParam *cfgParam)
6011{
6012
6013 WDI_Status status = WDI_STATUS_SUCCESS ;
6014 tANI_U32 val =0;
6015 tpAniSirGlobal pMac;
6016 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
6017 tHalCfg *tlvStruct = NULL ;
6018 tANI_U8 *tlvStructStart = NULL ;
6019 v_PVOID_t *configParam;
6020 tANI_U32 configParamSize;
6021 tANI_U32 *configDataValue;
6022 tANI_U32 cfgId;
6023 tANI_U32 tlv_type = QWLAN_HAL_CFG_MAX_PARAMS;
6024
6025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6026 " ------> %s " ,__func__);
6027
6028 if (cfgParam)
6029 {
6030 cfgId = cfgParam->cfgId;
6031 }
6032 else
6033 {
6034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6035 FL("Invoked with NULL cfgParam"));
6036 return VOS_STATUS_E_FAILURE;
6037 }
6038
6039 if (!pWDA)
6040 {
6041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6042 FL("Invoked with invalid WDA context"));
6043 return VOS_STATUS_E_FAILURE;
6044 }
6045
6046 if (NULL != pWDA->wdaWdiCfgUpdateIntMsg)
6047 {
6048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6049 FL("wdaWdiCfgApiMsgParam is not NULL"));
6050
6051 return VOS_STATUS_E_FAILURE;
6052 }
6053
6054 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
6055 if (NULL == pMac)
6056 {
6057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6058 FL("Invoked with invalid MAC context "));
6059 return VOS_STATUS_E_FAILURE;
6060 }
6061
6062 if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId , &val) != eSIR_SUCCESS)
6063 {
6064 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6065 FL("Fail to cfg get id %d"), cfgId);
6066 return VOS_STATUS_E_FAILURE;
6067 }
6068
6069 /* Get TLV type */
6070 tlv_type = WDA_ConvertWniCfgIdToHALCfgId(cfgId);
6071 if (tlv_type == QWLAN_HAL_CFG_MAX_PARAMS)
6072 {
6073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6074 "Failed to Convert cfg to hal id %d", cfgId);
6075 return VOS_STATUS_E_FAILURE;
6076 }
6077
6078 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
6079 sizeof(WDI_UpdateCfgReqParamsType)) ;
6080 if (NULL == wdiCfgReqParam)
6081 {
6082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6083 "%s: VOS MEM Alloc Failure", __func__);
6084 return VOS_STATUS_E_NOMEM;
6085 }
6086
6087 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * 1;
6088 configParam = vos_mem_malloc(configParamSize);
6089 if (NULL == configParam)
6090 {
6091 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6092 "%s: VOS MEM Alloc Failure", __func__);
6093 vos_mem_free(wdiCfgReqParam);
6094 return VOS_STATUS_E_NOMEM;
6095 }
6096
6097 vos_mem_set(configParam, configParamSize, 0);
6098 wdiCfgReqParam->pConfigBuffer = configParam;
6099 tlvStruct = (tHalCfg *)configParam;
6100 tlvStructStart = (tANI_U8 *)configParam;
6101 /* Set TLV type */
6102 tlvStruct->type = tlv_type;
6103 tlvStruct->length = sizeof(tANI_U32);
6104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6105 *configDataValue = (tANI_U32)val;
6106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6107 "cfg_id %d tlv_type %d tlv_value %d \n",
6108 cfgId, tlvStruct->type, val);
6109 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6110 + sizeof(tHalCfg) + tlvStruct->length)) ;
6111 wdiCfgReqParam->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
6112 wdiCfgReqParam->wdiReqStatusCB = NULL;
6113 /* store Params pass it to WDI */
6114 pWDA->wdaWdiCfgUpdateIntMsg = (void *)wdiCfgReqParam ;
6115 status = WDI_UpdateCfgReq(wdiCfgReqParam,
6116 (WDI_UpdateCfgRspCb )WDA_UpdateCfgIntParamCb, pWDA) ;
6117 if (IS_WDI_STATUS_FAILURE(status))
6118 {
6119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6120 "Failure in WDA_UpdateCfgIntParam WDI API, free memory ");
6121 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
6122 wdiCfgReqParam->pConfigBuffer = NULL;
6123 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
6124 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6125 }
6126
6127 return CONVERT_WDI2VOS_STATUS(status);
6128}
6129
Jeff Johnson295189b2012-06-20 16:38:30 -07006130VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
6131 v_U8_t *pDefaultKeyId,
6132 v_U8_t *pNumKeys,
6133 WDI_KeysType *pWdiKeys )
6134{
6135 v_U32_t i, j, defKeyId = 0;
6136 v_U32_t val = SIR_MAC_KEY_LENGTH;
6137 VOS_STATUS status = WDI_STATUS_SUCCESS;
6138 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 if (NULL == pMac )
6140 {
6141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006142 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 return VOS_STATUS_E_FAILURE;
6144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
6146 &defKeyId ))
6147 {
6148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6149 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
6150 }
6151
6152 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 /* Need to extract ALL of the configured WEP Keys */
6154 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
6155 {
6156 val = SIR_MAC_KEY_LENGTH;
6157 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
6158 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
6159 pWdiKeys[j].key,
6160 &val ))
6161 {
6162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006163 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 }
6165 else
6166 {
6167 pWdiKeys[j].keyId = (tANI_U8) i;
6168 /*
6169 * Actually, a DC (Don't Care) because
6170 * this is determined (and set) by PE/MLME
6171 */
6172 pWdiKeys[j].unicast = 0;
6173 /*
6174 * Another DC (Don't Care)
6175 */
6176 pWdiKeys[j].keyDirection = eSIR_TX_RX;
6177 /* Another DC (Don't Care). Unused for WEP */
6178 pWdiKeys[j].paeRole = 0;
6179 /* Determined from wlan_cfgGetStr() above.*/
6180 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 j++;
6182 *pNumKeys = (tANI_U8) j;
6183 }
6184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 return status;
6186}
Jeff Johnson295189b2012-06-20 16:38:30 -07006187/*
6188 * FUNCTION: WDA_SetBssKeyReqCallback
6189 * send SET BSS key RSP back to PE
6190 */
6191void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
6192{
6193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6194 tWDA_CbContext *pWDA;
6195 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006197 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 if(NULL == pWdaParams)
6199 {
6200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006201 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 VOS_ASSERT(0) ;
6203 return ;
6204 }
6205 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6206 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306207 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6208 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6210 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006211 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 return ;
6214}
Jeff Johnson295189b2012-06-20 16:38:30 -07006215/*
6216 * FUNCTION: WDA_ProcessSetBssKeyReq
6217 * Request to WDI for programming the BSS key( key for
6218 * broadcast/multicast frames Encryption)
6219 */
6220VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
6221 tSetBssKeyParams *setBssKeyParams )
6222{
6223 WDI_Status status = WDI_STATUS_SUCCESS ;
6224 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
6225 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
6226 sizeof(WDI_SetBSSKeyReqParamsType)) ;
6227 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006230 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 if(NULL == wdiSetBssKeyParam)
6232 {
6233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 VOS_ASSERT(0);
6236 return VOS_STATUS_E_NOMEM;
6237 }
6238 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6239 if(NULL == pWdaParams)
6240 {
6241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 VOS_ASSERT(0);
6244 vos_mem_free(wdiSetBssKeyParam);
6245 return VOS_STATUS_E_NOMEM;
6246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 /* copy set BSS params to WDI structure */
6249 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
6250 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
6251 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 if(setBssKeyParams->encType != eSIR_ED_NONE)
6253 {
6254 if( setBssKeyParams->numKeys == 0 &&
6255 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
6256 setBssKeyParams->encType == eSIR_ED_WEP104))
6257 {
6258 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
6260 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
6261 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
6262 }
6263 else
6264 {
6265 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
6266 {
6267 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
6268 setBssKeyParams->key[keyIndex].keyId;
6269 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
6270 setBssKeyParams->key[keyIndex].unicast;
6271 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
6272 setBssKeyParams->key[keyIndex].keyDirection;
6273 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
6274 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6275 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
6276 setBssKeyParams->key[keyIndex].paeRole;
6277 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
6278 setBssKeyParams->key[keyIndex].keyLength;
6279 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
6280 setBssKeyParams->key[keyIndex].key,
6281 SIR_MAC_MAX_KEY_LENGTH);
6282 }
6283 }
6284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
6286 setBssKeyParams->singleTidRc;
6287 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 /* Store set key pointer, as this will be used for response */
6289 /* store Params pass it to WDI */
6290 pWdaParams->pWdaContext = pWDA;
6291 pWdaParams->wdaMsgParam = setBssKeyParams;
6292 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
6294 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
6295
6296 if(IS_WDI_STATUS_FAILURE(status))
6297 {
6298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6299 "Failure in Set BSS Key Req WDI API, free all the memory " );
6300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6301 vos_mem_free(pWdaParams) ;
6302 setBssKeyParams->status = eSIR_FAILURE ;
6303 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
6304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006305 return CONVERT_WDI2VOS_STATUS(status) ;
6306}
Jeff Johnson295189b2012-06-20 16:38:30 -07006307/*
6308 * FUNCTION: WDA_RemoveBssKeyReqCallback
6309 * send SET BSS key RSP back to PE
6310 */
6311void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
6312{
6313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6314 tWDA_CbContext *pWDA;
6315 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006317 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 if(NULL == pWdaParams)
6319 {
6320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006321 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 VOS_ASSERT(0) ;
6323 return ;
6324 }
6325 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6326 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6328 vos_mem_free(pWdaParams) ;
6329
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006330 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 return ;
6333}
Siddharth Bhal171788a2014-09-29 21:02:40 +05306334
6335/*
Siddharth Bhal64246172015-02-27 01:04:37 +05306336 * FUNCTION: WDA_GetFrameLogRspCallback
6337 * recieves get frame log response from FW
6338 */
6339void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
6340 void* pUserData)
6341{
6342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6343 tWDA_CbContext *pWDA = NULL;
6344 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
6345
6346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6347 "<------ Entering: %s " ,__func__);
6348 if(NULL == pWdaParams)
6349 {
6350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6351 "%s: pWdaParams received NULL", __func__);
6352 VOS_ASSERT(0) ;
6353 return ;
6354 }
6355
6356 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6357 if (NULL == pWDA)
6358 {
6359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6360 "%s:pWDA is NULL", __func__);
6361 VOS_ASSERT(0);
6362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6363 vos_mem_free(pWdaParams);
6364 return ;
6365 }
6366
6367 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
6368 if(NULL == pGetFrameLogReqParams)
6369 {
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6371 "%s: pGetFrameLogReqParams received NULL", __func__);
6372 VOS_ASSERT(0);
6373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6374 vos_mem_free(pWdaParams);
6375 return;
6376 }
6377
Siddharth Bhal64246172015-02-27 01:04:37 +05306378 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05306380 "%s:GetFrameLog with rsp status %d flag %d", __func__,
6381 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05306382 }
6383
6384 /* free WDI command buffer only */
6385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6386 vos_mem_free(pWdaParams->wdaMsgParam);
6387 vos_mem_free(pWdaParams);
6388
6389 return ;
6390
6391}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05306392
6393/*
6394 * FUNCTION: WDA_RssiMonitorStopRspCallback
6395 * recieves Rssi Monitor stop response from FW
6396 */
6397void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
6398 void* pUserData)
6399{
6400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6401 tSirRssiMonitorReq *pRssiMonitorReqParams;
6402
6403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6404 "<------ %s " ,__func__);
6405
6406 if(NULL == pWdaParams)
6407 {
6408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6409 "%s: pWdaParams received NULL", __func__);
6410 VOS_ASSERT(0);
6411 return ;
6412 }
6413
6414 if(NULL == pWdaParams->wdaMsgParam)
6415 {
6416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6417 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6418 VOS_ASSERT(0);
6419 vos_mem_free(pWdaParams);
6420 return ;
6421 }
6422
6423 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6424
6425 if(pRssiMonitorReqParams->rssiMonitorCallback)
6426 {
6427 pRssiMonitorReqParams->rssiMonitorCallback(
6428 pRssiMonitorReqParams->rssiMonitorCbContext,
6429 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6430 }
6431 else
6432 {
6433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6434 "%s: pFWLoggingInitParams callback is NULL", __func__);
6435 }
6436
6437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6438 vos_mem_free(pWdaParams->wdaMsgParam);
6439 vos_mem_free(pWdaParams);
6440
6441 return;
6442}
6443
6444/*
6445 * FUNCTION: WDA_RssiMonitorStartRspCallback
6446 * recieves Rssi Monitor start response from FW
6447 */
6448void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
6449 void* pUserData)
6450{
6451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6452 tSirRssiMonitorReq *pRssiMonitorReqParams;
6453
6454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6455 "<------ %s " ,__func__);
6456
6457 if(NULL == pWdaParams)
6458 {
6459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6460 "%s: pWdaParams received NULL", __func__);
6461 VOS_ASSERT(0);
6462 return ;
6463 }
6464
6465 if(NULL == pWdaParams->wdaMsgParam)
6466 {
6467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6468 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6469 VOS_ASSERT(0);
6470 vos_mem_free(pWdaParams);
6471 return ;
6472 }
6473
6474 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6475
6476 if(pRssiMonitorReqParams->rssiMonitorCallback)
6477 {
6478 pRssiMonitorReqParams->rssiMonitorCallback(
6479 pRssiMonitorReqParams->rssiMonitorCbContext,
6480 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6481 }
6482 else
6483 {
6484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6485 "%s: pFWLoggingInitParams callback is NULL", __func__);
6486 }
6487
6488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6489 vos_mem_free(pWdaParams->wdaMsgParam);
6490 vos_mem_free(pWdaParams);
6491
6492 return;
6493}
6494
Siddharth Bhal64246172015-02-27 01:04:37 +05306495/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306496 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306497 * recieves Mgmt Logging init response from FW
6498 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306499void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306500 void* pUserData)
6501{
6502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306503 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05306504 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306505
6506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6507 "<------ %s " ,__func__);
6508
6509 if(NULL == pWdaParams)
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "%s: pWdaParams received NULL", __func__);
6513 VOS_ASSERT(0);
6514 return ;
6515 }
6516
6517 if(NULL == pWdaParams->wdaMsgParam)
6518 {
6519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6520 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6521 VOS_ASSERT(0);
6522 vos_mem_free(pWdaParams);
6523 return ;
6524 }
6525
c_manjeecfd1efb2015-09-25 19:32:34 +05306526 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
6527 if(NULL == pWdaParams)
6528 {
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6530 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
6531 VOS_ASSERT(0);
6532 vos_mem_free(pWdaParams);
6533 return;
6534 }
6535
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306536 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05306537 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306538
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306539 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306540 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306541 pFWLoggingInitParams->fwlogInitCallback(
6542 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05306543 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306544 }
6545 else
6546 {
6547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306548 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306549 }
6550
c_manjeecfd1efb2015-09-25 19:32:34 +05306551 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6553 vos_mem_free(pWdaParams->wdaMsgParam);
6554 vos_mem_free(pWdaParams);
6555
6556 return;
6557}
6558
6559/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05306560 * FUNCTION: WDA_SpoofMacAddrRspCallback
6561 * recieves spoof mac addr response from FW
6562 */
6563void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
6564{
6565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6566 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05306567
Siddharth Bhal171788a2014-09-29 21:02:40 +05306568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6569 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306570
Siddharth Bhal171788a2014-09-29 21:02:40 +05306571 if(NULL == pWdaParams)
6572 {
6573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6574 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306575 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306576 return ;
6577 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05306578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306579
Siddharth Bhal029d6732014-10-09 21:31:23 +05306580 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05306581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05306582 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306583 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05306584 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
6585 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05306586
Siddharth Bhal171788a2014-09-29 21:02:40 +05306587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306588 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306589 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306590
6591 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306592}
6593
Jeff Johnson295189b2012-06-20 16:38:30 -07006594/*
6595 * FUNCTION: WDA_ProcessRemoveBssKeyReq
6596 * Request to WDI to remove the BSS key( key for broadcast/multicast
6597 * frames Encryption)
6598 */
6599VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
6600 tRemoveBssKeyParams *removeBssKeyParams )
6601{
6602 WDI_Status status = WDI_STATUS_SUCCESS ;
6603 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
6604 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
6605 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
6606 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 if(NULL == wdiRemoveBssKeyParam)
6610 {
6611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 VOS_ASSERT(0);
6614 return VOS_STATUS_E_NOMEM;
6615 }
6616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6617 if(NULL == pWdaParams)
6618 {
6619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 VOS_ASSERT(0);
6622 vos_mem_free(wdiRemoveBssKeyParam);
6623 return VOS_STATUS_E_NOMEM;
6624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 /* copy Remove BSS key params to WDI structure*/
6626 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6627 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6628 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6629 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6630 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 /* Store remove key pointer, as this will be used for response */
6632 /* store Params pass it to WDI */
6633 pWdaParams->pWdaContext = pWDA;
6634 pWdaParams->wdaMsgParam = removeBssKeyParams;
6635 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6637 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 if(IS_WDI_STATUS_FAILURE(status))
6639 {
6640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6641 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6643 vos_mem_free(pWdaParams) ;
6644 removeBssKeyParams->status = eSIR_FAILURE ;
6645 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006647 return CONVERT_WDI2VOS_STATUS(status) ;
6648}
Jeff Johnson295189b2012-06-20 16:38:30 -07006649/*
6650 * FUNCTION: WDA_SetBssKeyReqCallback
6651 * send SET BSS key RSP back to PE
6652 */
6653void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6654{
6655 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6656 tWDA_CbContext *pWDA;
6657 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006659 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 if(NULL == pWdaParams)
6661 {
6662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006663 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006664 VOS_ASSERT(0) ;
6665 return ;
6666 }
6667 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6668 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306669 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6670 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6672 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006673 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006674 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006675 return ;
6676}
Jeff Johnson295189b2012-06-20 16:38:30 -07006677/*
6678 * FUNCTION: WDA_ProcessSetStaKeyReq
6679 * Request to WDI for programming the STA key( key for Unicast frames
6680 * Encryption)
6681 */
6682VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6683 tSetStaKeyParams *setStaKeyParams )
6684{
6685 WDI_Status status = WDI_STATUS_SUCCESS ;
6686 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6687 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6688 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6689 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 if(NULL == wdiSetStaKeyParam)
6694 {
6695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 VOS_ASSERT(0);
6698 return VOS_STATUS_E_NOMEM;
6699 }
6700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6701 if(NULL == pWdaParams)
6702 {
6703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 VOS_ASSERT(0);
6706 vos_mem_free(wdiSetStaKeyParam);
6707 return VOS_STATUS_E_NOMEM;
6708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 /* copy set STA key params to WDI structure */
6712 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6713 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6714 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6715 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 if(setStaKeyParams->encType != eSIR_ED_NONE)
6717 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006718 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6720 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6721 {
6722 WDA_GetWepKeysFromCfg( pWDA,
6723 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6724 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6725 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6726 }
6727 else
6728 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6730 keyIndex++)
6731 {
6732 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6733 setStaKeyParams->key[keyIndex].keyId;
6734 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6735 setStaKeyParams->key[keyIndex].unicast;
6736 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6737 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6739 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6740 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6741 setStaKeyParams->key[keyIndex].paeRole;
6742 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6743 setStaKeyParams->key[keyIndex].keyLength;
6744 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6745 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6746 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6747 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6748 {
6749 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6750 }
6751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6753 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 }
6755 }
6756 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6757 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 /* Store set key pointer, as this will be used for response */
6759 /* store Params pass it to WDI */
6760 pWdaParams->pWdaContext = pWDA;
6761 pWdaParams->wdaMsgParam = setStaKeyParams;
6762 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6764 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 if(IS_WDI_STATUS_FAILURE(status))
6766 {
6767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6768 "Failure in set STA Key Req WDI API, free all the memory " );
6769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6770 vos_mem_free(pWdaParams) ;
6771 setStaKeyParams->status = eSIR_FAILURE ;
6772 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 return CONVERT_WDI2VOS_STATUS(status) ;
6775}
Jeff Johnson295189b2012-06-20 16:38:30 -07006776/*
6777 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6778 * send SET Bcast STA key RSP back to PE
6779 */
6780void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6781{
6782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6783 tWDA_CbContext *pWDA;
6784 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006786 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 if(NULL == pWdaParams)
6788 {
6789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006790 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 VOS_ASSERT(0) ;
6792 return ;
6793 }
6794 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6795 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6797 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006798 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 return ;
6801}
6802
Jeff Johnson295189b2012-06-20 16:38:30 -07006803/*
6804 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6805 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6806 * Encryption)
6807 */
6808VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6809 tSetStaKeyParams *setStaKeyParams )
6810{
6811 WDI_Status status = WDI_STATUS_SUCCESS ;
6812 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6813 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6814 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6815 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006818 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 if(NULL == wdiSetStaKeyParam)
6820 {
6821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 VOS_ASSERT(0);
6824 return VOS_STATUS_E_NOMEM;
6825 }
6826 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6827 if(NULL == pWdaParams)
6828 {
6829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 VOS_ASSERT(0);
6832 vos_mem_free(wdiSetStaKeyParam);
6833 return VOS_STATUS_E_NOMEM;
6834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 /* copy set STA key params to WDI structure */
6838 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6839 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6840 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6841 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 if(setStaKeyParams->encType != eSIR_ED_NONE)
6843 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6845 keyIndex++)
6846 {
6847 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6848 setStaKeyParams->key[keyIndex].keyId;
6849 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6850 setStaKeyParams->key[keyIndex].unicast;
6851 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6852 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6854 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6855 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6856 setStaKeyParams->key[keyIndex].paeRole;
6857 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6858 setStaKeyParams->key[keyIndex].keyLength;
6859 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6860 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6863 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 }
6865 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 /* Store set key pointer, as this will be used for response */
6867 /* store Params pass it to WDI */
6868 pWdaParams->pWdaContext = pWDA;
6869 pWdaParams->wdaMsgParam = setStaKeyParams;
6870 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6872 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 if(IS_WDI_STATUS_FAILURE(status))
6874 {
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6876 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6878 vos_mem_free(pWdaParams) ;
6879 setStaKeyParams->status = eSIR_FAILURE ;
6880 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 return CONVERT_WDI2VOS_STATUS(status) ;
6883}
Jeff Johnson295189b2012-06-20 16:38:30 -07006884/*
6885 * FUNCTION: WDA_RemoveStaKeyReqCallback
6886 * send SET BSS key RSP back to PE
6887 */
6888void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6889{
6890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6891 tWDA_CbContext *pWDA;
6892 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006894 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 if(NULL == pWdaParams)
6896 {
6897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006898 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 VOS_ASSERT(0) ;
6900 return ;
6901 }
6902 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6903 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6905 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006906 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 return ;
6909}
6910
Jeff Johnson295189b2012-06-20 16:38:30 -07006911/*
6912 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6913 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6914 */
6915VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6916 tRemoveStaKeyParams *removeStaKeyParams )
6917{
6918 WDI_Status status = WDI_STATUS_SUCCESS ;
6919 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6920 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6921 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6922 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006924 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 if(NULL == wdiRemoveStaKeyParam)
6926 {
6927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 VOS_ASSERT(0);
6930 return VOS_STATUS_E_NOMEM;
6931 }
6932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6933 if(NULL == pWdaParams)
6934 {
6935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 VOS_ASSERT(0);
6938 vos_mem_free(wdiRemoveStaKeyParam);
6939 return VOS_STATUS_E_NOMEM;
6940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 /* copy remove STA key params to WDI structure*/
6942 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6943 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6944 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6945 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6946 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 /* Store remove key pointer, as this will be used for response */
6948 /* store Params pass it to WDI */
6949 pWdaParams->pWdaContext = pWDA;
6950 pWdaParams->wdaMsgParam = removeStaKeyParams;
6951 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6953 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 if(IS_WDI_STATUS_FAILURE(status))
6955 {
6956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6957 "Failure in remove STA Key Req WDI API, free all the memory " );
6958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6959 vos_mem_free(pWdaParams) ;
6960 removeStaKeyParams->status = eSIR_FAILURE ;
6961 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 return CONVERT_WDI2VOS_STATUS(status) ;
6964}
Jeff Johnson295189b2012-06-20 16:38:30 -07006965/*
6966 * FUNCTION: WDA_IsHandleSetLinkStateReq
6967 * Update the WDA state and return the status to handle this message or not
6968 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006969WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6970 tWDA_CbContext *pWDA,
6971 tLinkStateParams *linkStateParams)
6972{
6973 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 switch(linkStateParams->state)
6975 {
6976 case eSIR_LINK_PREASSOC_STATE:
6977 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6978 /*
6979 * set the WDA state to PRE ASSOC
6980 * copy the BSSID into pWDA to use it in join request and return,
6981 * No need to handle these messages.
6982 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006983 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6984 {
6985 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006987 }
6988 else
6989 {
6990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006991 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006992 VOS_ASSERT(0);
6993 }
6994
6995 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6996 {
6997 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006999 }
7000 else
7001 {
7002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007003 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007004 VOS_ASSERT(0);
7005 }
7006
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 /* UMAC is issuing the setlink state with PREASSOC twice (before set
7008 *channel and after ) so reset the WDA state to ready when the second
7009 * time UMAC issue the link state with PREASSOC
7010 */
7011 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
7012 {
7013 /* RESET WDA state back to WDA_READY_STATE */
7014 pWDA->wdaState = WDA_READY_STATE;
7015 }
7016 else
7017 {
7018 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
7019 }
7020 //populate linkState info in WDACbCtxt
7021 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 default:
7024 if(pWDA->wdaState != WDA_READY_STATE)
7025 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007026 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
7027 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
7028 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
7029 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
7030 *the ASSERT in WDA_Stop during module unload.*/
7031 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
7032 {
7033 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007034 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007035 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007036 else
7037 {
7038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007039 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007040 status = WDA_IGNORE_SET_LINK_STATE;
7041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 }
7043 break;
7044 }
7045
7046 return status;
7047}
Jeff Johnson295189b2012-06-20 16:38:30 -07007048/*
7049 * FUNCTION: WDA_SetLinkStateCallback
7050 * call back function for set link state from WDI
7051 */
7052void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
7053{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307054 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 tLinkStateParams *linkStateParams;
7056 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007058 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307059 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 {
7061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007062 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 VOS_ASSERT(0) ;
7064 return ;
7065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307067 if (NULL == pWDA)
7068 {
7069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7070 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7072 vos_mem_free(pWdaParams->wdaMsgParam);
7073 vos_mem_free(pWdaParams);
7074
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307075 VOS_ASSERT(0);
7076 return ;
7077 }
7078
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 /*
7081 * In STA mode start the BA activity check timer after association
7082 * and in AP mode start BA activity check timer after BSS start */
7083 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
7084 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07007085 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
7086 ((status == WDI_STATUS_SUCCESS) &&
7087 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 {
7089 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 /*
7093 * No respone required for WDA_SET_LINK_STATE so free the request
7094 * param here
7095 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7097 vos_mem_free(pWdaParams);
7098
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 return ;
7100}
Jeff Johnson295189b2012-06-20 16:38:30 -07007101/*
7102 * FUNCTION: WDA_ProcessSetLinkState
7103 * Request to WDI to set the link status.
7104 */
7105VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
7106 tLinkStateParams *linkStateParams)
7107{
7108 WDI_Status status = WDI_STATUS_SUCCESS ;
7109 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
7110 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
7111 sizeof(WDI_SetLinkReqParamsType)) ;
7112 tWDA_ReqParams *pWdaParams ;
7113 tpAniSirGlobal pMac;
7114 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
7115
7116 if(NULL == pMac)
7117 {
7118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007119 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007121 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 return VOS_STATUS_E_FAILURE;
7123 }
7124
7125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007126 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 if(NULL == wdiSetLinkStateParam)
7128 {
7129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007130 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 VOS_ASSERT(0);
7132 return VOS_STATUS_E_NOMEM;
7133 }
7134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7135 if(NULL == pWdaParams)
7136 {
7137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 VOS_ASSERT(0);
7140 vos_mem_free(wdiSetLinkStateParam);
7141 return VOS_STATUS_E_NOMEM;
7142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 if(WDA_IGNORE_SET_LINK_STATE ==
7144 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
7145 {
7146 status = WDI_STATUS_E_FAILURE;
7147 }
7148 else
7149 {
7150 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
7151 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
7153 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
7155 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 pWdaParams->pWdaContext = pWDA;
7157 /* Store remove key pointer, as this will be used for response */
7158 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 /* store Params pass it to WDI */
7160 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
7161 /* Stop Timer only other than GO role and concurrent session */
7162 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07007163 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
7165 {
7166 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
7169 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 if(IS_WDI_STATUS_FAILURE(status))
7171 {
7172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7173 "Failure in set link state Req WDI API, free all the memory " );
7174 }
7175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 if(IS_WDI_STATUS_FAILURE(status))
7177 {
7178 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07007179 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 vos_mem_free(pWdaParams);
7181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 return CONVERT_WDI2VOS_STATUS(status) ;
7183}
Jeff Johnson295189b2012-06-20 16:38:30 -07007184/*
7185 * FUNCTION: WDA_GetStatsReqParamsCallback
7186 * send the response to PE with Stats received from WDI
7187 */
7188void WDA_GetStatsReqParamsCallback(
7189 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
7190 void* pUserData)
7191{
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307193 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007194
7195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 pGetPEStatsRspParams =
7198 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
7199 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
7200
7201 if(NULL == pGetPEStatsRspParams)
7202 {
7203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 VOS_ASSERT(0);
7206 return;
7207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307209 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
7211 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007212
7213 //Fill the Session Id Properly in PE
7214 pGetPEStatsRspParams->sessionId = 0;
7215 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007216 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
7218 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 vos_mem_copy( pGetPEStatsRspParams + 1,
7220 wdiGetStatsRsp + 1,
7221 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307222
7223 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7224 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7225 vosMsg.bodyval = 0;
7226 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7227 (vos_msg_t*)&vosMsg))
7228 {
7229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7230 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7231 vos_mem_free(pGetPEStatsRspParams);
7232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007233
7234 return;
7235}
7236
Jeff Johnson295189b2012-06-20 16:38:30 -07007237/*
7238 * FUNCTION: WDA_ProcessGetStatsReq
7239 * Request to WDI to get the statistics
7240 */
7241VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
7242 tAniGetPEStatsReq *pGetStatsParams)
7243{
7244 WDI_Status status = WDI_STATUS_SUCCESS ;
7245 WDI_GetStatsReqParamsType wdiGetStatsParam;
7246 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307247 vos_msg_t vosMsg;
7248
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007250 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
7252 pGetStatsParams->staId;
7253 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
7254 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 status = WDI_GetStatsReq(&wdiGetStatsParam,
7257 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 if(IS_WDI_STATUS_FAILURE(status))
7259 {
7260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7261 "Failure in Get Stats Req WDI API, free all the memory " );
7262 pGetPEStatsRspParams =
7263 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
7264 if(NULL == pGetPEStatsRspParams)
7265 {
7266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007269 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 return VOS_STATUS_E_NOMEM;
7271 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307272 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
7274 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
7275 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307276
7277 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7278 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7279 vosMsg.bodyval = 0;
7280 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7281 (vos_msg_t*)&vosMsg))
7282 {
7283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7284 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7285 vos_mem_free(pGetPEStatsRspParams);
7286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 /* Free the request message */
7289 vos_mem_free(pGetStatsParams);
7290 return CONVERT_WDI2VOS_STATUS(status);
7291}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007292
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007293#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007294/*
7295 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
7296 * send the response to PE with roam Rssi received from WDI
7297 */
7298void WDA_GetRoamRssiReqParamsCallback(
7299 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
7300 void* pUserData)
7301{
7302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7303 tWDA_CbContext *pWDA = NULL;
7304 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7305 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
7306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7307 "<------ %s " ,__func__);
7308 if(NULL == pWdaParams)
7309 {
7310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7311 "%s: pWdaParams received NULL", __func__);
7312 VOS_ASSERT(0) ;
7313 return ;
7314 }
7315 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7316 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
7317
7318 if(NULL == pGetRoamRssiReqParams)
7319 {
7320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7321 "%s: pGetRoamRssiReqParams received NULL", __func__);
7322 VOS_ASSERT(0);
7323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7324 vos_mem_free(pWdaParams);
7325 return ;
7326 }
7327 pGetRoamRssiRspParams =
7328 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7329
7330 if(NULL == pGetRoamRssiRspParams)
7331 {
7332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7333 "%s: VOS MEM Alloc Failure", __func__);
7334 VOS_ASSERT(0);
7335 return;
7336 }
7337 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
7338 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007339 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007340 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
7341 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
7342
7343 /* Assign get roam rssi req (backup) in to the response */
7344 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
7345
7346 /* free WDI command buffer */
7347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7348 vos_mem_free(pWdaParams) ;
7349
7350 /* send response to UMAC*/
7351 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
7352
7353 return;
7354}
7355
7356
7357
7358/*
7359 * FUNCTION: WDA_ProcessGetRoamRssiReq
7360 * Request to WDI to get the statistics
7361 */
7362VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
7363 tAniGetRssiReq *pGetRoamRssiParams)
7364{
7365 WDI_Status status = WDI_STATUS_SUCCESS ;
7366 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
7367 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7368 tWDA_ReqParams *pWdaParams = NULL;
7369
7370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7371 "------> %s " ,__func__);
7372 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
7373 pGetRoamRssiParams->staId;
7374 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
7375
7376 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7377 if(NULL == pWdaParams)
7378 {
7379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7380 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307381 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007382 VOS_ASSERT(0);
7383 return VOS_STATUS_E_NOMEM;
7384 }
7385
7386 /* Store Init Req pointer, as this will be used for response */
7387 pWdaParams->pWdaContext = pWDA;
7388
7389 /* Take Get roam Rssi req backup as it stores the callback to be called after
7390 receiving the response */
7391 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
7392 pWdaParams->wdaWdiApiMsgParam = NULL;
7393
7394 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
7395 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
7396 if(IS_WDI_STATUS_FAILURE(status))
7397 {
7398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7399 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
7400 pGetRoamRssiRspParams =
7401 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7402 if(NULL == pGetRoamRssiRspParams)
7403 {
7404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7405 "%s: VOS MEM Alloc Failure", __func__);
7406 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05307407 vos_mem_free(pGetRoamRssiParams);
7408 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007409 return VOS_STATUS_E_NOMEM;
7410 }
7411 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
7412 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
7413 pGetRoamRssiRspParams->rssi = 0;
7414 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
7415 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
7416 (void *)pGetRoamRssiRspParams, 0) ;
7417 }
7418 return CONVERT_WDI2VOS_STATUS(status);
7419}
7420#endif
7421
7422
Jeff Johnson295189b2012-06-20 16:38:30 -07007423/*
7424 * FUNCTION: WDA_UpdateEDCAParamCallback
7425 * call back function for Update EDCA params from WDI
7426 */
7427void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
7428{
7429 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7430 tEdcaParams *pEdcaParams;
7431
7432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007433 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007434 if(NULL == pWdaParams)
7435 {
7436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007437 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 VOS_ASSERT(0) ;
7439 return ;
7440 }
7441 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7443 vos_mem_free(pWdaParams);
7444 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 return ;
7446}
Jeff Johnson295189b2012-06-20 16:38:30 -07007447/*
7448 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
7449 * Request to WDI to Update the EDCA params.
7450 */
7451VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
7452 tEdcaParams *pEdcaParams)
7453{
7454 WDI_Status status = WDI_STATUS_SUCCESS ;
7455 WDI_UpdateEDCAParamsType *wdiEdcaParam =
7456 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
7457 sizeof(WDI_UpdateEDCAParamsType)) ;
7458 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(NULL == wdiEdcaParam)
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007466 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 return VOS_STATUS_E_NOMEM;
7468 }
7469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7470 if(NULL == pWdaParams)
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 VOS_ASSERT(0);
7475 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007476 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 return VOS_STATUS_E_NOMEM;
7478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07007480 /*
7481 Since firmware is not using highperformance flag, we have removed
7482 this flag from wdiEDCAInfo structure to match sizeof the structure
7483 between host and firmware.In future if we are planning to use
7484 highperformance flag then Please define this flag in wdiEDCAInfo
7485 structure, update it here and send it to firmware. i.e.
7486 Following is the original line which we removed as part of the fix
7487 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
7488 pEdcaParams->highPerformance;
7489 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
7491 &pEdcaParams->acbe);
7492 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
7493 &pEdcaParams->acbk);
7494 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
7495 &pEdcaParams->acvi);
7496 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
7497 &pEdcaParams->acvo);
7498 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 pWdaParams->pWdaContext = pWDA;
7500 /* Store remove key pointer, as this will be used for response */
7501 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 /* store Params pass it to WDI */
7503 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 status = WDI_UpdateEDCAParams(wdiEdcaParam,
7505 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 if(IS_WDI_STATUS_FAILURE(status))
7507 {
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7509 "Failure in Update EDCA Params WDI API, free all the memory " );
7510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7511 vos_mem_free(pWdaParams);
7512 vos_mem_free(pEdcaParams);
7513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 return CONVERT_WDI2VOS_STATUS(status) ;
7515}
Jeff Johnson295189b2012-06-20 16:38:30 -07007516/*
7517 * FUNCTION: WDA_AddBAReqCallback
7518 * send ADD BA RSP back to PE
7519 */
7520void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
7521 void* pUserData)
7522{
7523 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7524 tWDA_CbContext *pWDA;
7525 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007527 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307528 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 {
7530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007531 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 VOS_ASSERT(0) ;
7533 return ;
7534 }
7535 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307536 if (NULL == pWDA)
7537 {
7538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7539 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7541 vos_mem_free(pWdaParams->wdaMsgParam);
7542 vos_mem_free(pWdaParams);
7543
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307544 VOS_ASSERT(0);
7545 return ;
7546 }
7547
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7550 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007551 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 return ;
7554}
7555
Jeff Johnson295189b2012-06-20 16:38:30 -07007556/*
7557 * FUNCTION: WDA_ProcessAddBAReq
7558 * Request to WDI to Update the ADDBA REQ params.
7559 */
7560VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307561 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007562{
Jeff Johnson43971f52012-07-17 12:26:56 -07007563 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 WDI_AddBAReqParamsType *wdiAddBAReqParam =
7565 (WDI_AddBAReqParamsType *)vos_mem_malloc(
7566 sizeof(WDI_AddBAReqParamsType)) ;
7567 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007569 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 if(NULL == wdiAddBAReqParam)
7571 {
7572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007573 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 VOS_ASSERT(0);
7575 return VOS_STATUS_E_NOMEM;
7576 }
7577 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7578 if(NULL == pWdaParams)
7579 {
7580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 VOS_ASSERT(0);
7583 vos_mem_free(wdiAddBAReqParam);
7584 return VOS_STATUS_E_NOMEM;
7585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 do
7587 {
7588 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 wdiAddBaInfo->ucSTAIdx = staIdx ;
7590 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05307591 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 } while(0) ;
7593 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 pWdaParams->pWdaContext = pWDA;
7595 /* store Params pass it to WDI */
7596 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
7597 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007598 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
7599 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007600
Jeff Johnson43971f52012-07-17 12:26:56 -07007601 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007602 {
7603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07007604 "Failure in ADD BA REQ Params WDI API, free all the memory" );
7605 status = CONVERT_WDI2VOS_STATUS(wstatus);
7606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 vos_mem_free(pWdaParams);
7608 pAddBAReqParams->status = eSIR_FAILURE;
7609 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7610 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007611 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007612}
Jeff Johnson295189b2012-06-20 16:38:30 -07007613/*
7614 * FUNCTION: WDA_AddBASessionReqCallback
7615 * send ADD BA SESSION RSP back to PE/(or TL)
7616 */
7617void WDA_AddBASessionReqCallback(
7618 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
7619{
7620 VOS_STATUS status = VOS_STATUS_SUCCESS ;
7621 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307622 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007623 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007625 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 if(NULL == pWdaParams)
7627 {
7628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007629 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 VOS_ASSERT(0) ;
7631 return ;
7632 }
7633 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307634 if (NULL == pWDA)
7635 {
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7637 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7639 vos_mem_free(pWdaParams->wdaMsgParam);
7640 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307641 VOS_ASSERT(0);
7642 return ;
7643 }
7644
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 if( NULL == pAddBAReqParams )
7647 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007649 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007650 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7652 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 return ;
7654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7656 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307658 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 * another request to HAL(/WDI) (ADD_BA_REQ)
7660 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 if((VOS_STATUS_SUCCESS ==
7662 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307663 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007664 {
7665 /* Update TL with BA info received from HAL/WDI */
7666 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7667 wdiAddBaSession->usBaSessionID,
7668 wdiAddBaSession->ucSTAIdx,
7669 wdiAddBaSession->ucBaTID,
7670 wdiAddBaSession->ucBaBufferSize,
7671 wdiAddBaSession->ucWinSize,
7672 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307674 wdiAddBaSession->ucSTAIdx,
7675 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007676 }
7677 else
7678 {
7679 pAddBAReqParams->status =
7680 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7681
7682 /* Setting Flag to indicate that Set BA is success */
7683 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7684 {
7685 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7686 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7687 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 /*Reset the WDA state to READY */
7692 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 return ;
7694}
7695
Jeff Johnson295189b2012-06-20 16:38:30 -07007696/*
7697 * FUNCTION: WDA_ProcessAddBASessionReq
7698 * Request to WDI to Update the ADDBA REQ params.
7699 */
7700VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7701 tAddBAParams *pAddBAReqParams)
7702{
7703 WDI_Status status = WDI_STATUS_SUCCESS ;
7704 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7705 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7706 sizeof(WDI_AddBASessionReqParamsType)) ;
7707 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007708 WLANTL_STAStateType tlSTAState = 0;
7709
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007711 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 if(NULL == wdiAddBASessionReqParam)
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 VOS_ASSERT(0);
7717 return VOS_STATUS_E_NOMEM;
7718 }
7719 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7720 if(NULL == pWdaParams)
7721 {
7722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 VOS_ASSERT(0);
7725 vos_mem_free(wdiAddBASessionReqParam);
7726 return VOS_STATUS_E_NOMEM;
7727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 /*
7729 * Populate ADD BA parameters and pass these paarmeters to WDI.
7730 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7731 * the state to track if these is BA recipient case or BA initiator
7732 * case.
7733 */
7734 do
7735 {
7736 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7737 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7738 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7739 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7740 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7741 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7742 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7745 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7746 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7747 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7748 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307749
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 }while(0) ;
7751 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 pWdaParams->pWdaContext = pWDA;
7753 /* Store ADD BA pointer, as this will be used for response */
7754 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7755 /* store Params pass it to WDI */
7756 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007757
7758 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7759 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7760 */
7761 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7762 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7763 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007765 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007766 status = WDI_STATUS_E_NOT_ALLOWED;
7767 pAddBAReqParams->status =
7768 CONVERT_WDI2SIR_STATUS(status) ;
7769 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7770 /*Reset the WDA state to READY */
7771 pWDA->wdaState = WDA_READY_STATE;
7772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7773 vos_mem_free(pWdaParams);
7774
7775 return CONVERT_WDI2VOS_STATUS(status) ;
7776 }
7777
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7779 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 if(IS_WDI_STATUS_FAILURE(status))
7781 {
7782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007783 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007785 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007786 pAddBAReqParams->status =
7787 CONVERT_WDI2SIR_STATUS(status) ;
7788 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007789 /*Reset the WDA state to READY */
7790 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 vos_mem_free(pWdaParams);
7793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007795}
Jeff Johnson295189b2012-06-20 16:38:30 -07007796/*
7797 * FUNCTION: WDA_DelBANotifyTL
7798 * send DEL BA IND to TL
7799 */
7800void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7801 tDelBAParams *pDelBAReqParams)
7802{
7803 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7804 //tSirMsgQ msg;
7805 vos_msg_t vosMsg;
7806 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 if(NULL == pDelBAInd)
7808 {
7809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 VOS_ASSERT(0) ;
7812 return;
7813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7815 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7816 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7817 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007818
Jeff Johnson295189b2012-06-20 16:38:30 -07007819
7820 vosMsg.type = WDA_DELETEBA_IND;
7821 vosMsg.bodyptr = pDelBAInd;
7822 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7823 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7824 {
7825 vosStatus = VOS_STATUS_E_BADMSG;
7826 }
7827}
Jeff Johnson295189b2012-06-20 16:38:30 -07007828/*
7829 * FUNCTION: WDA_DelBAReqCallback
7830 * send DEL BA RSP back to PE
7831 */
7832void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7833{
7834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7835 tWDA_CbContext *pWDA;
7836 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007838 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 if(NULL == pWdaParams)
7840 {
7841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007842 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 VOS_ASSERT(0) ;
7844 return ;
7845 }
7846 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307847
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 /* Notify TL about DEL BA in case of recipinet */
7850 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7851 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7852 {
7853 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 /*
7856 * No respone required for WDA_DELBA_IND so just free the request
7857 * param here
7858 */
7859 vos_mem_free(pDelBAReqParams);
7860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7861 vos_mem_free(pWdaParams);
7862 return ;
7863}
7864
Jeff Johnson295189b2012-06-20 16:38:30 -07007865/*
7866 * FUNCTION: WDA_ProcessDelBAReq
7867 * Request to WDI to Update the DELBA REQ params.
7868 */
7869VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7870 tDelBAParams *pDelBAReqParams)
7871{
7872 WDI_Status status = WDI_STATUS_SUCCESS ;
7873 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7874 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7875 sizeof(WDI_DelBAReqParamsType)) ;
7876 tWDA_ReqParams *pWdaParams ;
7877 tANI_U16 staIdx = 0;
7878 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 if(NULL == wdiDelBAReqParam)
7882 {
7883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 VOS_ASSERT(0);
7886 return VOS_STATUS_E_NOMEM;
7887 }
7888 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7889 if(NULL == pWdaParams)
7890 {
7891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 VOS_ASSERT(0);
7894 vos_mem_free(wdiDelBAReqParam);
7895 return VOS_STATUS_E_NOMEM;
7896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7898 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7899 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7900 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 pWdaParams->pWdaContext = pWDA;
7902 /* Store DEL BA pointer, as this will be used for response */
7903 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 /* store Params pass it to WDI */
7905 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7907 * maintained in WDA, so that WDA can retry for another BA session
7908 */
7909 staIdx = pDelBAReqParams->staIdx;
7910 tid = pDelBAReqParams->baTID;
7911 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 status = WDI_DelBAReq(wdiDelBAReqParam,
7913 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007914 if(IS_WDI_STATUS_FAILURE(status))
7915 {
7916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7917 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7919 vos_mem_free(pWdaParams->wdaMsgParam);
7920 vos_mem_free(pWdaParams);
7921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007923}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007924
7925/*
7926 * FUNCTION: WDA_UpdateChReqCallback
7927 *
7928 */
7929void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7930{
Siddharth Bhala006c122014-05-03 12:13:27 +05307931 tWDA_ReqParams *pWdaParams;
7932 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7933 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7934 WDI_UpdateChannelReqinfoType *pChanInfoType;
7935 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007936
7937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7938 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307939 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007940 {
7941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307942 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007943 VOS_ASSERT(0);
7944 return;
7945 }
7946
Siddharth Bhala006c122014-05-03 12:13:27 +05307947 pWdaParams = (tWDA_ReqParams *)pUserData;
7948 pwdiUpdateChReqParam =
7949 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7950 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7951 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7952 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007953 /*
7954 * currently there is no response message is expected between PE and
7955 * WDA, Failure return from WDI is a ASSERT condition
7956 */
7957 vos_mem_free(pChanInfoType);
7958 vos_mem_free(pChanList);
7959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7960 vos_mem_free(pWdaParams);
7961
7962 return;
7963}
7964
7965/*
7966 * FUNCTION: WDA_ProcessUpdateChannelList
7967 * Request to WDI to Update the ChannelList params.
7968 */
7969VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7970 tSirUpdateChanList *pChanList)
7971{
7972 WDI_Status status = WDI_STATUS_SUCCESS;
7973 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7974 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7975 WDI_UpdateChannelReqinfoType *pChanInfoType;
7976 tWDA_ReqParams *pWdaParams;
7977 wpt_uint8 i;
7978
7979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7980 "------> %s " ,__func__);
7981 if(NULL == pChanList)
7982 {
7983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7984 "%s: NULL pChanList", __func__);
7985 VOS_ASSERT(0);
7986 return VOS_STATUS_E_INVAL;
7987 }
7988
7989 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7990 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007992 "Update channel list capability Not Supported");
7993 vos_mem_free(pChanList);
7994 return VOS_STATUS_E_INVAL;
7995 }
7996
7997 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7998 sizeof(WDI_UpdateChReqParamsType));
7999 if(NULL == pwdiUpdateChReqParam)
8000 {
8001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8002 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
8003 __func__);
8004 VOS_ASSERT(0);
8005 vos_mem_free(pChanList);
8006 return VOS_STATUS_E_NOMEM;
8007 }
8008 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
8009 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
8010 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
8011 pChanList->numChan);
8012 if(NULL == pChanInfoType)
8013 {
8014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8015 "%s: VOS MEM Alloc Failure", __func__);
8016 VOS_ASSERT(0);
8017 vos_mem_free(pChanList);
8018 vos_mem_free(pwdiUpdateChReqParam);
8019 return VOS_STATUS_E_NOMEM;
8020 }
8021 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
8022 * pChanList->numChan);
8023 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
8024
8025 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8026 if(NULL == pWdaParams)
8027 {
8028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8029 "%s: VOS MEM Alloc Failure", __func__);
8030 VOS_ASSERT(0);
8031 vos_mem_free(pChanList);
8032 vos_mem_free(pChanInfoType);
8033 vos_mem_free(pwdiUpdateChReqParam);
8034 return VOS_STATUS_E_NOMEM;
8035 }
8036 pwdiUpdateChanReqType->numchan = pChanList->numChan;
8037
8038 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
8039 {
8040 pChanInfoType->mhz =
8041 vos_chan_to_freq(pChanList->chanParam[i].chanId);
8042
8043 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
8044 pChanInfoType->band_center_freq2 = 0;
8045
8046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8047 "chan[%d] = %u", i, pChanInfoType->mhz);
8048 if (pChanList->chanParam[i].dfsSet)
8049 {
8050 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
8051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8052 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
8053 pChanList->chanParam[i].dfsSet);
8054 }
8055
8056 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
8057 {
8058 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
8059 }
8060 else
8061 {
8062 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
8063 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
8064 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
8065 }
8066
8067 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
8068 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05308069 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008070 pChanInfoType++;
8071 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008072 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
8073 pWdaParams->pWdaContext = pWDA;
8074 pWdaParams->wdaMsgParam = (void *)pChanList;
8075 /* store Params pass it to WDI */
8076 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
8077 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
8078 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
8079 if(IS_WDI_STATUS_FAILURE(status))
8080 {
8081 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8082 "Failure in Update Channel REQ Params WDI API, free all the memory");
8083 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
8084 vos_mem_free(pwdiUpdateChReqParam);
8085 vos_mem_free(pWdaParams->wdaMsgParam);
8086 vos_mem_free(pWdaParams);
8087 }
8088 return CONVERT_WDI2VOS_STATUS(status);
8089}
8090
Jeff Johnson295189b2012-06-20 16:38:30 -07008091/*
8092 * FUNCTION: WDA_AddTSReqCallback
8093 * send ADD TS RSP back to PE
8094 */
8095void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
8096{
8097 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308098 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 tAddTsParams *pAddTsReqParams;
8100
8101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008102 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 if(NULL == pWdaParams)
8104 {
8105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008106 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 VOS_ASSERT(0) ;
8108 return ;
8109 }
8110 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308111 if (NULL == pWDA)
8112 {
8113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8114 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8116 vos_mem_free(pWdaParams->wdaMsgParam);
8117 vos_mem_free(pWdaParams);
8118
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308119 VOS_ASSERT(0);
8120 return ;
8121 }
8122
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
8124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8125 vos_mem_free(pWdaParams);
8126
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008127 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 return ;
8130}
8131
Jeff Johnson295189b2012-06-20 16:38:30 -07008132/*
8133 * FUNCTION: WDA_ProcessAddTSReq
8134 * Request to WDI to Update the ADD TS REQ params.
8135 */
8136VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
8137 tAddTsParams *pAddTsReqParams)
8138{
8139 WDI_Status status = WDI_STATUS_SUCCESS ;
8140 WDI_AddTSReqParamsType *wdiAddTSReqParam =
8141 (WDI_AddTSReqParamsType *)vos_mem_malloc(
8142 sizeof(WDI_AddTSReqParamsType)) ;
8143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 if(NULL == wdiAddTSReqParam)
8147 {
8148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 VOS_ASSERT(0);
8151 return VOS_STATUS_E_NOMEM;
8152 }
8153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8154 if(NULL == pWdaParams)
8155 {
8156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 VOS_ASSERT(0);
8159 vos_mem_free(wdiAddTSReqParam);
8160 return VOS_STATUS_E_NOMEM;
8161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
8163 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 //TS IE
8165 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
8166 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
8167 pAddTsReqParams->tspec.length;
8168
8169 //TS IE : TS INFO : TRAFFIC
8170 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
8171 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
8172 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
8173 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
8174 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
8175 pAddTsReqParams->tspec.tsinfo.traffic.psb;
8176 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
8177 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
8178 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
8179 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
8180 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
8181 pAddTsReqParams->tspec.tsinfo.traffic.direction;
8182 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
8183 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
8184 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
8185 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
8186
8187 //TS IE : TS INFO : SCHEDULE
8188 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
8189 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
8190 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
8191 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 //TS IE
8193 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
8194 pAddTsReqParams->tspec.nomMsduSz;
8195 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
8196 pAddTsReqParams->tspec.maxMsduSz;
8197 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
8198 pAddTsReqParams->tspec.minSvcInterval;
8199 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
8200 pAddTsReqParams->tspec.maxSvcInterval;
8201 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
8202 pAddTsReqParams->tspec.inactInterval;
8203 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
8204 pAddTsReqParams->tspec.suspendInterval;
8205 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
8206 pAddTsReqParams->tspec.svcStartTime;
8207 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
8208 pAddTsReqParams->tspec.minDataRate;
8209 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
8210 pAddTsReqParams->tspec.meanDataRate;
8211 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
8212 pAddTsReqParams->tspec.peakDataRate;
8213 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
8214 pAddTsReqParams->tspec.maxBurstSz;
8215 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
8216 pAddTsReqParams->tspec.delayBound;
8217 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
8218 pAddTsReqParams->tspec.minPhyRate;
8219 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
8220 pAddTsReqParams->tspec.surplusBw;
8221 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
8222 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07008223 /* TODO: tAddTsParams doesn't have the following fields */
8224#if 0
8225 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8226 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
8227 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8228 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8229#endif
8230 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
8231
8232 pWdaParams->pWdaContext = pWDA;
8233 /* Store ADD TS pointer, as this will be used for response */
8234 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 /* store Params pass it to WDI */
8236 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 status = WDI_AddTSReq(wdiAddTSReqParam,
8238 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008239 if(IS_WDI_STATUS_FAILURE(status))
8240 {
8241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8242 "Failure in ADD TS REQ Params WDI API, free all the memory " );
8243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8244 vos_mem_free(pWdaParams);
8245 pAddTsReqParams->status = eSIR_FAILURE ;
8246 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
8247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008249}
8250
Jeff Johnson295189b2012-06-20 16:38:30 -07008251/*
8252 * FUNCTION: WDA_DelTSReqCallback
8253 * send DEL TS RSP back to PE
8254 */
8255void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
8256{
8257 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008259 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8261 vos_mem_free(pWdaParams->wdaMsgParam) ;
8262 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 /*
8264 * No respone required for WDA_DEL_TS_REQ so just free the request
8265 * param here
8266 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 return ;
8268}
8269
Jeff Johnson295189b2012-06-20 16:38:30 -07008270/*
8271 * FUNCTION: WDA_ProcessDelTSReq
8272 * Request to WDI to Update the DELTS REQ params.
8273 */
8274VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
8275 tDelTsParams *pDelTSReqParams)
8276{
8277 WDI_Status status = WDI_STATUS_SUCCESS ;
8278 WDI_DelTSReqParamsType *wdiDelTSReqParam =
8279 (WDI_DelTSReqParamsType *)vos_mem_malloc(
8280 sizeof(WDI_DelTSReqParamsType)) ;
8281 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 if(NULL == wdiDelTSReqParam)
8285 {
8286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 VOS_ASSERT(0);
8289 return VOS_STATUS_E_NOMEM;
8290 }
8291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8292 if(NULL == pWdaParams)
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008296 VOS_ASSERT(0);
8297 vos_mem_free(wdiDelTSReqParam);
8298 return VOS_STATUS_E_NOMEM;
8299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
8301 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
8302 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
8303 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
8304 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 pWdaParams->pWdaContext = pWDA;
8306 /* Store DEL TS pointer, as this will be used for response */
8307 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 /* store Params pass it to WDI */
8309 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 status = WDI_DelTSReq(wdiDelTSReqParam,
8311 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 if(IS_WDI_STATUS_FAILURE(status))
8313 {
8314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8315 "Failure in DEL TS REQ Params WDI API, free all the memory " );
8316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8317 vos_mem_free(pWdaParams->wdaMsgParam);
8318 vos_mem_free(pWdaParams);
8319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008321}
Jeff Johnson295189b2012-06-20 16:38:30 -07008322/*
8323 * FUNCTION: WDA_UpdateBeaconParamsCallback
8324 * Free the memory. No need to send any response to PE in this case
8325 */
8326void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
8327{
8328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008330 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 if(NULL == pWdaParams)
8332 {
8333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008334 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 VOS_ASSERT(0) ;
8336 return ;
8337 }
8338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8339 vos_mem_free(pWdaParams->wdaMsgParam) ;
8340 vos_mem_free(pWdaParams);
8341 /*
8342 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
8343 * param here
8344 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 return ;
8346}
Jeff Johnson295189b2012-06-20 16:38:30 -07008347/*
8348 * FUNCTION: WDA_ProcessUpdateBeaconParams
8349 * Request to WDI to send the beacon parameters to HAL to update the Hardware
8350 */
8351VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
8352 tUpdateBeaconParams *pUpdateBeaconParams)
8353{
8354 WDI_Status status = WDI_STATUS_SUCCESS ;
8355 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
8356 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
8357 sizeof(WDI_UpdateBeaconParamsType)) ;
8358 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008360 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 if(NULL == wdiUpdateBeaconParams)
8362 {
8363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 VOS_ASSERT(0);
8366 return VOS_STATUS_E_NOMEM;
8367 }
8368 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8369 if(NULL == pWdaParams)
8370 {
8371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 VOS_ASSERT(0);
8374 vos_mem_free(wdiUpdateBeaconParams);
8375 return VOS_STATUS_E_NOMEM;
8376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
8378 pUpdateBeaconParams->bssIdx;
8379 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
8380 pUpdateBeaconParams->fShortPreamble;
8381 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
8382 pUpdateBeaconParams->fShortSlotTime;
8383 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
8384 pUpdateBeaconParams->beaconInterval;
8385 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
8386 pUpdateBeaconParams->llaCoexist;
8387 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
8388 pUpdateBeaconParams->llbCoexist;
8389 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
8390 pUpdateBeaconParams->llgCoexist;
8391 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
8392 pUpdateBeaconParams->ht20MhzCoexist;
8393 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
8394 pUpdateBeaconParams->llnNonGFCoexist;
8395 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
8396 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
8397 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
8398 pUpdateBeaconParams->fRIFSMode;
8399 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
8400 pUpdateBeaconParams->paramChangeBitmap;
8401 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
8402
8403 pWdaParams->pWdaContext = pWDA;
8404 /* Store UpdateBeacon Req pointer, as this will be used for response */
8405 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 /* store Params pass it to WDI */
8407 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
8409 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
8410 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 if(IS_WDI_STATUS_FAILURE(status))
8412 {
8413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8414 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
8415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8416 vos_mem_free(pWdaParams->wdaMsgParam);
8417 vos_mem_free(pWdaParams);
8418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008420}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008421#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07008422/*
8423 * FUNCTION: WDA_TSMStatsReqCallback
8424 * send TSM Stats RSP back to PE
8425 */
8426void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
8427{
8428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8429 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008430 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
8431 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008432
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 if(NULL == pWdaParams)
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008438 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 VOS_ASSERT(0) ;
8440 return ;
8441 }
8442 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308443 if (NULL == pWDA)
8444 {
8445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8446 "%s:pWDA is NULL", __func__);
8447 VOS_ASSERT(0);
8448 return ;
8449 }
8450
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008451 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
8452
8453 if(NULL == pGetTsmStatsReqParams)
8454 {
8455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8456 "%s: pGetTsmStatsReqParams received NULL", __func__);
8457 VOS_ASSERT(0);
8458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8459 vos_mem_free(pWdaParams);
8460 return;
8461 }
8462
8463 pTsmRspParams =
8464 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07008465 if( NULL == pTsmRspParams )
8466 {
8467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008468 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008469 VOS_ASSERT( 0 );
8470 return ;
8471 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008472 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
8473 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
8474 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
8475
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
8477 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
8478 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
8479 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
8480 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
8481 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
8482 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
8483 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
8484 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
8485 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008486
8487 /* Assign get tsm stats req req (backup) in to the response */
8488 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
8489
8490 /* free WDI command buffer */
8491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8492 vos_mem_free(pWdaParams);
8493
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 return ;
8496}
8497
8498
Jeff Johnson295189b2012-06-20 16:38:30 -07008499/*
8500 * FUNCTION: WDA_ProcessTsmStatsReq
8501 * Request to WDI to get the TSM Stats params.
8502 */
8503VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008504 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07008505{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008506 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008508 tWDA_ReqParams *pWdaParams = NULL;
8509 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
8510
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008512 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
8514 sizeof(WDI_TSMStatsReqParamsType));
8515 if(NULL == wdiTSMReqParam)
8516 {
8517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008519 VOS_ASSERT(0);
8520 return VOS_STATUS_E_NOMEM;
8521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8523 if(NULL == pWdaParams)
8524 {
8525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 VOS_ASSERT(0);
8528 vos_mem_free(wdiTSMReqParam);
8529 return VOS_STATUS_E_NOMEM;
8530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
8532 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
8533 pTsmStats->bssId,
8534 sizeof(wpt_macAddr));
8535 wdiTSMReqParam->wdiReqStatusCB = NULL ;
8536
8537 pWdaParams->pWdaContext = pWDA;
8538 /* Store TSM Stats pointer, as this will be used for response */
8539 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008540 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 status = WDI_TSMStatsReq(wdiTSMReqParam,
8542 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 if(IS_WDI_STATUS_FAILURE(status))
8544 {
8545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8546 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008547 vos_mem_free(pWdaParams);
8548
8549 pGetTsmStatsRspParams =
8550 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
8551 if(NULL == pGetTsmStatsRspParams)
8552 {
8553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8554 "%s: VOS MEM Alloc Failure", __func__);
8555 VOS_ASSERT(0);
8556 vos_mem_free(pTsmStats);
8557 return VOS_STATUS_E_NOMEM;
8558 }
8559 pGetTsmStatsRspParams->staId = pTsmStats->staId;
8560 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
8561 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
8562
8563 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 return CONVERT_WDI2VOS_STATUS(status) ;
8566}
8567#endif
8568/*
8569 * FUNCTION: WDA_SendBeaconParamsCallback
8570 * No need to send any response to PE in this case
8571 */
8572void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
8573{
8574
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008577 return ;
8578}
Jeff Johnson295189b2012-06-20 16:38:30 -07008579/*
8580 * FUNCTION: WDA_ProcessSendBeacon
8581 * Request to WDI to send the beacon template to HAL to update the TPE memory and
8582 * start beacon trasmission
8583 */
8584VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
8585 tSendbeaconParams *pSendbeaconParams)
8586{
8587 WDI_Status status = WDI_STATUS_SUCCESS ;
8588 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008590 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
8592 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
8593 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
8594 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07008595 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
8596 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308597 /* p2pIeOffset should be atleast greater than timIeOffset */
8598 if ((pSendbeaconParams->p2pIeOffset != 0) &&
8599 (pSendbeaconParams->p2pIeOffset <
8600 pSendbeaconParams->timIeOffset))
8601 {
8602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8603 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308604 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308605 VOS_ASSERT( 0 );
8606 return WDI_STATUS_E_FAILURE;
8607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008608 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
8609 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 /* Copy the beacon template to local buffer */
8611 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
8612 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
8613 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
8614
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
8616 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 if(IS_WDI_STATUS_FAILURE(status))
8618 {
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8620 "Failure in SEND BEACON REQ Params WDI API" );
8621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 vos_mem_free(pSendbeaconParams);
8623 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008624}
Jeff Johnson295189b2012-06-20 16:38:30 -07008625/*
8626 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8627 * No need to send any response to PE in this case
8628 */
8629void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8630{
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008632 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 return ;
8634}
8635
Jeff Johnson295189b2012-06-20 16:38:30 -07008636/*
8637 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8638 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8639 * send probe response
8640 */
8641VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8642 tSendProbeRespParams *pSendProbeRspParams)
8643{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008644 WDI_Status status = WDI_STATUS_SUCCESS;
8645 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8646 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008648 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008649
8650 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308651 {
8652 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008653 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308654 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008655
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008657 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008659 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008660 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 /* Copy the Probe Response template to local buffer */
8662 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008663 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07008664 pSendProbeRspParams->pProbeRespTemplate,
8665 pSendProbeRspParams->probeRespTemplateLen);
8666 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008667 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8669 WDI_PROBE_REQ_BITMAP_IE_LEN);
8670
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008671 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008672
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008673 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 if(IS_WDI_STATUS_FAILURE(status))
8676 {
8677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8678 "Failure in SEND Probe RSP Params WDI API" );
8679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008681 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008683}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008684#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008685/*
8686 * FUNCTION: WDA_SetMaxTxPowerCallBack
8687 * send the response to PE with power value received from WDI
8688 */
8689void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8690 void* pUserData)
8691{
8692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8693 tWDA_CbContext *pWDA = NULL;
8694 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8695
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 if(NULL == pWdaParams)
8699 {
8700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 VOS_ASSERT(0) ;
8703 return ;
8704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308706 if (NULL == pWDA)
8707 {
8708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8709 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8711 vos_mem_free(pWdaParams->wdaMsgParam);
8712 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308713 VOS_ASSERT(0);
8714 return ;
8715 }
8716
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 if( NULL == pMaxTxPowerParams )
8719 {
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008721 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008722 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8724 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 return ;
8726 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008727
Jeff Johnson295189b2012-06-20 16:38:30 -07008728
8729 /*need to free memory for the pointers used in the
8730 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8732 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008734
Jeff Johnson295189b2012-06-20 16:38:30 -07008735
8736 /* send response to UMAC*/
8737 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8738
8739 return;
8740}
Jeff Johnson295189b2012-06-20 16:38:30 -07008741/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008742 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008743 * Request to WDI to send set Max Tx Power Request
8744 */
8745 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8746 tMaxTxPowerParams *MaxTxPowerParams)
8747{
8748 WDI_Status status = WDI_STATUS_SUCCESS;
8749 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8750 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008751
Jeff Johnson295189b2012-06-20 16:38:30 -07008752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008753 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8756 sizeof(WDI_SetMaxTxPowerParamsType));
8757 if(NULL == wdiSetMaxTxPowerParams)
8758 {
8759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 VOS_ASSERT(0);
8762 return VOS_STATUS_E_NOMEM;
8763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8765 if(NULL == pWdaParams)
8766 {
8767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 vos_mem_free(wdiSetMaxTxPowerParams);
8770 VOS_ASSERT(0);
8771 return VOS_STATUS_E_NOMEM;
8772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 /* Copy.Max.Tx.Power Params to WDI structure */
8774 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8775 MaxTxPowerParams->bssId,
8776 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8778 MaxTxPowerParams->selfStaMacAddr,
8779 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8781 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 pWdaParams->pWdaContext = pWDA;
8784 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 /* store Params pass it to WDI */
8786 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8788 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008789 if(IS_WDI_STATUS_FAILURE(status))
8790 {
8791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8792 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8794 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008795 /* send response to UMAC*/
8796 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 }
8798 return CONVERT_WDI2VOS_STATUS(status);
8799
8800}
Jeff Johnson295189b2012-06-20 16:38:30 -07008801#endif
schang86c22c42013-03-13 18:41:24 -07008802
8803/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008804 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8805 * send the response to PE with power value received from WDI
8806 */
8807void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8808 *pwdiSetMaxTxPowerPerBandRsp,
8809 void* pUserData)
8810{
8811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8812 tWDA_CbContext *pWDA = NULL;
8813 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8814
8815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8816 "<------ %s ", __func__);
8817 if (NULL == pWdaParams)
8818 {
8819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8820 "%s: pWdaParams received NULL", __func__);
8821 VOS_ASSERT(0);
8822 return ;
8823 }
8824 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308825 if (NULL == pWDA)
8826 {
8827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8828 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8830 vos_mem_free(pWdaParams->wdaMsgParam);
8831 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308832 VOS_ASSERT(0);
8833 return ;
8834 }
8835
Arif Hussaina5ebce02013-08-09 15:09:58 -07008836 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8837 if ( NULL == pMxTxPwrPerBandParams )
8838 {
8839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8840 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8841 VOS_ASSERT(0);
8842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8843 vos_mem_free(pWdaParams);
8844 return;
8845 }
8846
8847 /*need to free memory for the pointers used in the
8848 WDA Process.Set Max Tx Power Req function*/
8849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8850 vos_mem_free(pWdaParams);
8851 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8852
8853 /* send response to UMAC*/
8854 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8855 pMxTxPwrPerBandParams, 0);
8856
8857 return;
8858}
8859
8860/*
8861 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8862 * Request to WDI to send set Max Tx Power Per band Request
8863 */
8864 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8865 tMaxTxPowerPerBandParams
8866 *MaxTxPowerPerBandParams)
8867{
8868 WDI_Status status = WDI_STATUS_SUCCESS;
8869 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8870 tWDA_ReqParams *pWdaParams = NULL;
8871
8872 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8873 "------> %s ", __func__);
8874
8875 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8876 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8877
8878 if (NULL == wdiSetMxTxPwrPerBandParams)
8879 {
8880 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8881 "%s: VOS MEM Alloc Failure", __func__);
8882 VOS_ASSERT(0);
8883 return VOS_STATUS_E_NOMEM;
8884 }
8885 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8886 if (NULL == pWdaParams)
8887 {
8888 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8889 "%s: VOS MEM Alloc Failure", __func__);
8890 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8891 VOS_ASSERT(0);
8892 return VOS_STATUS_E_NOMEM;
8893 }
8894 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8895 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8896 MaxTxPowerPerBandParams->bandInfo;
8897 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8898 MaxTxPowerPerBandParams->power;
8899 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8900 pWdaParams->pWdaContext = pWDA;
8901 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8902 /* store Params pass it to WDI */
8903 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8904 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8905 WDA_SetMaxTxPowerPerBandCallBack,
8906 pWdaParams);
8907 if (IS_WDI_STATUS_FAILURE(status))
8908 {
8909 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8910 "Failure in SET MAX TX Power REQ Params WDI API,"
8911 " free all the memory");
8912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8913 vos_mem_free(pWdaParams);
8914 /* send response to UMAC*/
8915 WDA_SendMsg(pWDA,
8916 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8917 MaxTxPowerPerBandParams, 0);
8918 }
8919 return CONVERT_WDI2VOS_STATUS(status);
8920}
8921
8922/*
schang86c22c42013-03-13 18:41:24 -07008923 * FUNCTION: WDA_SetTxPowerCallBack
8924 * send the response to PE with power value received from WDI
8925 */
8926void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8927 void* pUserData)
8928{
8929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8930 tWDA_CbContext *pWDA = NULL;
8931 tSirSetTxPowerReq *pTxPowerParams = NULL;
8932
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8934 "<------ %s ", __func__);
8935 if(NULL == pWdaParams)
8936 {
8937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8938 "%s: pWdaParams received NULL", __func__);
8939 VOS_ASSERT(0) ;
8940 return ;
8941 }
8942 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308943 if (NULL == pWDA)
8944 {
8945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8946 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8948 vos_mem_free(pWdaParams->wdaMsgParam);
8949 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308950 VOS_ASSERT(0);
8951 return ;
8952 }
8953
schang86c22c42013-03-13 18:41:24 -07008954 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8955 if(NULL == pTxPowerParams)
8956 {
8957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8958 "%s: pTxPowerParams received NULL " ,__func__);
8959 VOS_ASSERT(0);
8960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8961 vos_mem_free(pWdaParams);
8962 return ;
8963 }
8964
8965 /*need to free memory for the pointers used in the
8966 WDA Process.Set Max Tx Power Req function*/
8967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8968 vos_mem_free(pWdaParams);
8969
8970 /* send response to UMAC*/
8971 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8972 return;
8973}
8974
8975/*
8976 * FUNCTION: WDA_ProcessSetTxPowerReq
8977 * Request to WDI to send set Tx Power Request
8978 */
8979 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8980 tSirSetTxPowerReq *txPowerParams)
8981{
8982 WDI_Status status = WDI_STATUS_SUCCESS;
8983 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8984 tWDA_ReqParams *pWdaParams = NULL;
8985
8986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8987 "------> %s ", __func__);
8988
8989 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8990 sizeof(WDI_SetTxPowerParamsType));
8991 if(NULL == wdiSetTxPowerParams)
8992 {
8993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8994 "%s: VOS MEM Alloc Failure", __func__);
8995 VOS_ASSERT(0);
8996 return VOS_STATUS_E_NOMEM;
8997 }
8998 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8999 if(NULL == pWdaParams)
9000 {
9001 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9002 "%s: VOS MEM Alloc Failure", __func__);
9003 vos_mem_free(wdiSetTxPowerParams);
9004 VOS_ASSERT(0);
9005 return VOS_STATUS_E_NOMEM;
9006 }
9007 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
9008 txPowerParams->bssIdx;
9009 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
9010 txPowerParams->mwPower;
9011 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
9012 pWdaParams->pWdaContext = pWDA;
9013 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
9014 /* store Params pass it to WDI */
9015 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
9016 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
9017 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
9018 if(IS_WDI_STATUS_FAILURE(status))
9019 {
9020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9021 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
9022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9023 vos_mem_free(pWdaParams);
9024 /* send response to UMAC*/
9025 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
9026 }
9027 return CONVERT_WDI2VOS_STATUS(status);
9028}
9029
Jeff Johnson295189b2012-06-20 16:38:30 -07009030/*
9031 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9032 * Free the memory. No need to send any response to PE in this case
9033 */
9034void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
9035{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9037
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009039 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009040
9041 if(NULL == pWdaParams)
9042 {
9043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009044 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009045 VOS_ASSERT(0) ;
9046 return ;
9047 }
9048
9049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9050 vos_mem_free(pWdaParams->wdaMsgParam) ;
9051 vos_mem_free(pWdaParams);
9052
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 /*
9054 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
9055 * so just free the request param here
9056 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 return ;
9058}
9059
Jeff Johnson295189b2012-06-20 16:38:30 -07009060/*
9061 * FUNCTION: WDA_ProcessSetP2PGONOAReq
9062 * Request to WDI to set the P2P Group Owner Notice of Absence Req
9063 */
9064VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
9065 tP2pPsParams *pP2pPsConfigParams)
9066{
9067 WDI_Status status = WDI_STATUS_SUCCESS ;
9068 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
9069 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
9070 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009071 tWDA_ReqParams *pWdaParams = NULL;
9072
Jeff Johnson295189b2012-06-20 16:38:30 -07009073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 if(NULL == wdiSetP2PGONOAReqParam)
9076 {
9077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009078 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309079 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009080 VOS_ASSERT(0);
9081 return VOS_STATUS_E_NOMEM;
9082 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009083
9084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9085 if(NULL == pWdaParams)
9086 {
9087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009088 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009089 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009090 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009091 VOS_ASSERT(0);
9092 return VOS_STATUS_E_NOMEM;
9093 }
9094
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
9096 pP2pPsConfigParams->opp_ps;
9097 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
9098 pP2pPsConfigParams->ctWindow;
9099 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
9100 pP2pPsConfigParams->count;
9101 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
9102 pP2pPsConfigParams->duration;
9103 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
9104 pP2pPsConfigParams->interval;
9105 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
9106 pP2pPsConfigParams->single_noa_duration;
9107 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
9108 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009109
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
9111 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009112 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
9113
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009115 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
9116 pWdaParams->pWdaContext = pWDA;
9117
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009119 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
9120
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 if(IS_WDI_STATUS_FAILURE(status))
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9124 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9126 vos_mem_free(pWdaParams->wdaMsgParam);
9127 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009129 return CONVERT_WDI2VOS_STATUS(status);
9130
Jeff Johnson295189b2012-06-20 16:38:30 -07009131}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309132
9133#ifdef FEATURE_WLAN_TDLS
9134/*
9135 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9136 * Free the memory. No need to send any response to PE in this case
9137 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309138void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
9139 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309140{
9141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9142 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309143 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309144
9145
9146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9147 "<------ %s " ,__func__);
9148 if(NULL == pWdaParams)
9149 {
9150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9151 "%s: pWdaParams received NULL", __func__);
9152 VOS_ASSERT(0) ;
9153 return ;
9154 }
9155 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9156
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309157 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309158 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9160 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9162 vos_mem_free(pWdaParams->wdaMsgParam);
9163 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309164 VOS_ASSERT(0);
9165 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309166 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309167
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309168 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
9169 if( NULL == pTdlsLinkEstablishParams )
9170 {
9171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9172 "%s: pTdlsLinkEstablishParams "
9173 "received NULL " ,__func__);
9174 VOS_ASSERT(0);
9175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9176 vos_mem_free(pWdaParams);
9177 return ;
9178 }
9179 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
9180 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309182 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309183 /* send response to UMAC*/
9184 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
9185
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309186 return ;
9187}
9188
9189VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
9190 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
9191{
9192 WDI_Status status = WDI_STATUS_SUCCESS ;
9193 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
9194 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
9195 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
9196 tWDA_ReqParams *pWdaParams = NULL;
9197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9198 "------> %s " ,__func__);
9199 if(NULL == wdiSetTDLSLinkEstablishReqParam)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9202 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309203 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309204 VOS_ASSERT(0);
9205 return VOS_STATUS_E_NOMEM;
9206 }
9207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9208 if(NULL == pWdaParams)
9209 {
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9211 "%s: VOS MEM Alloc Failure", __func__);
9212 vos_mem_free(pTdlsLinkEstablishParams);
9213 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
9214 VOS_ASSERT(0);
9215 return VOS_STATUS_E_NOMEM;
9216 }
9217 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309218 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309219 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309220 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309221 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309222 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309223 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309224 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309225 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309226 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05309227 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
9228 pTdlsLinkEstablishParams->isOffChannelSupported;
9229
9230 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
9231 pTdlsLinkEstablishParams->validChannels,
9232 pTdlsLinkEstablishParams->validChannelsLen);
9233
9234 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
9235 pTdlsLinkEstablishParams->validChannelsLen;
9236
9237 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
9238 pTdlsLinkEstablishParams->validOperClasses,
9239 pTdlsLinkEstablishParams->validOperClassesLen);
9240 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
9241 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309242
9243 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
9244 /* Store msg pointer from PE, as this will be used for response */
9245 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
9246 /* store Params pass it to WDI */
9247 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
9248 pWdaParams->pWdaContext = pWDA;
9249
9250 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
9251 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
9252 WDA_SetTDLSLinkEstablishReqParamsCallback,
9253 pWdaParams);
9254 if(IS_WDI_STATUS_FAILURE(status))
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9257 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
9258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9259 vos_mem_free(pWdaParams->wdaMsgParam);
9260 vos_mem_free(pWdaParams);
9261 }
9262 return CONVERT_WDI2VOS_STATUS(status);
9263}
Atul Mittalc0f739f2014-07-31 13:47:47 +05309264
9265// tdlsoffchan
9266void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
9267 void* pUserData)
9268{
9269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9270 tWDA_CbContext *pWDA = NULL;
9271 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
9272
9273
9274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9275 "<------ %s " ,__func__);
9276 if(NULL == pWdaParams)
9277 {
9278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9279 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309280 VOS_ASSERT(0) ;
9281 return ;
9282 }
9283 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9284
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309285 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05309286 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9288 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9290 vos_mem_free(pWdaParams->wdaMsgParam);
9291 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309292 VOS_ASSERT(0);
9293 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309294 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309295
Atul Mittalc0f739f2014-07-31 13:47:47 +05309296 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309297 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05309298 {
9299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9300 "%s: pTdlsChanSwitchParams "
9301 "received NULL " ,__func__);
9302 VOS_ASSERT(0);
9303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9304 vos_mem_free(pWdaParams);
9305 return ;
9306 }
9307 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
9308 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9310 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05309311 /* send response to UMAC*/
9312 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05309313
9314 return ;
9315}
9316VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
9317 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
9318{
9319 WDI_Status status = WDI_STATUS_SUCCESS ;
9320 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
9321 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
9322 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
9323 tWDA_ReqParams *pWdaParams = NULL;
9324
9325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9326 "Enter: %s ",__func__);
9327 if(NULL == wdiSetTDLSChanSwitchReqParam)
9328 {
9329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9330 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309331 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309332 VOS_ASSERT(0);
9333 return VOS_STATUS_E_NOMEM;
9334 }
9335
9336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9337 if(NULL == pWdaParams)
9338 {
9339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9340 "%s: VOS MEM Alloc Failure", __func__);
9341 vos_mem_free(pTdlsChanSwitchParams);
9342 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
9343 VOS_ASSERT(0);
9344 return VOS_STATUS_E_NOMEM;
9345 }
9346 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
9347 pTdlsChanSwitchParams->staIdx;
9348 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
9349 pTdlsChanSwitchParams->tdlsSwMode;
9350 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
9351 pTdlsChanSwitchParams->operClass;
9352 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
9353 pTdlsChanSwitchParams->tdlsOffCh;
9354 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
9355 pTdlsChanSwitchParams->tdlsOffChBwOffset;
9356
9357
9358 /* Store msg pointer from PE, as this will be used for response */
9359 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
9360 /* store Params pass it to WDI */
9361 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
9362 pWdaParams->pWdaContext = pWDA;
9363 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
9364 (WDI_SetTDLSChanSwitchReqParamsRspCb)
9365 WDA_SetTDLSChanSwitchReqParamsCallback,
9366 pWdaParams);
9367 if(IS_WDI_STATUS_FAILURE(status))
9368 {
9369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9370 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
9371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9372 vos_mem_free(pWdaParams->wdaMsgParam);
9373 vos_mem_free(pWdaParams);
9374 }
9375 return CONVERT_WDI2VOS_STATUS(status);
9376}
9377#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309378
9379
Jeff Johnson295189b2012-06-20 16:38:30 -07009380#ifdef WLAN_FEATURE_VOWIFI_11R
9381/*
9382 * FUNCTION: WDA_AggrAddTSReqCallback
9383 * send ADD AGGREGATED TS RSP back to PE
9384 */
9385void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
9386{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309388 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009389 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009392 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009393 if(NULL == pWdaParams)
9394 {
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009396 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009397 VOS_ASSERT(0) ;
9398 return ;
9399 }
9400
9401 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309402 if (NULL == pWDA)
9403 {
9404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9405 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9407 vos_mem_free(pWdaParams->wdaMsgParam);
9408 vos_mem_free(pWdaParams);
9409
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309410 VOS_ASSERT(0);
9411 return ;
9412 }
9413
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009414 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009415
9416 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9417 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009418 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009421
9422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9423 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 return ;
9425}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009426/*
9427 * FUNCTION: WDA_ProcessAddTSReq
9428 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
9429 */
9430VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
9431 tAggrAddTsParams *pAggrAddTsReqParams)
9432{
9433 WDI_Status status = WDI_STATUS_SUCCESS ;
9434 int i;
9435 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009436 tWDA_ReqParams *pWdaParams = NULL;
9437
9438
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
9442 sizeof(WDI_AggrAddTSReqParamsType)) ;
9443 if(NULL == wdiAggrAddTSReqParam)
9444 {
9445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009446 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309447 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009448 VOS_ASSERT(0);
9449 return VOS_STATUS_E_NOMEM;
9450 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009451
9452
9453 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9454 if(NULL == pWdaParams)
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009457 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009458 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009459 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009460 VOS_ASSERT(0);
9461 return VOS_STATUS_E_NOMEM;
9462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
9464 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
9465 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 for( i = 0; i < WDI_MAX_NO_AC; i++ )
9467 {
9468 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
9469 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
9470 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
9472 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
9473 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
9474 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
9475 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
9476 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
9477 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
9478 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
9479 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
9480 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
9481 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
9482 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
9483 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
9484 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
9485 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
9486 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
9488 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07009489 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
9490 pAggrAddTsReqParams->tspec[i].nomMsduSz;
9491 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
9492 pAggrAddTsReqParams->tspec[i].maxMsduSz;
9493 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
9494 pAggrAddTsReqParams->tspec[i].minSvcInterval;
9495 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
9496 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
9497 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
9498 pAggrAddTsReqParams->tspec[i].inactInterval;
9499 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
9500 pAggrAddTsReqParams->tspec[i].suspendInterval;
9501 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
9502 pAggrAddTsReqParams->tspec[i].svcStartTime;
9503 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
9504 pAggrAddTsReqParams->tspec[i].minDataRate;
9505 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
9506 pAggrAddTsReqParams->tspec[i].meanDataRate;
9507 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
9508 pAggrAddTsReqParams->tspec[i].peakDataRate;
9509 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
9510 pAggrAddTsReqParams->tspec[i].maxBurstSz;
9511 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
9512 pAggrAddTsReqParams->tspec[i].delayBound;
9513 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
9514 pAggrAddTsReqParams->tspec[i].minPhyRate;
9515 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
9516 pAggrAddTsReqParams->tspec[i].surplusBw;
9517 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
9518 pAggrAddTsReqParams->tspec[i].mediumTime;
9519 }
9520
9521 /* TODO: tAggrAddTsParams doesn't have the following fields */
9522#if 0
9523 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
9524 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
9525 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
9526 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
9527#endif
9528 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
9529
9530 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009531 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009533 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
9534
9535 pWdaParams->pWdaContext = pWDA;
9536
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009538 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
9539
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 if(IS_WDI_STATUS_FAILURE(status))
9541 {
9542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9543 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009544
9545 /* send the failure response back to PE*/
9546 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9547 {
9548 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
9549 }
9550
9551 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
9552 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05309553
9554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9555 vos_mem_free(pWdaParams);
9556
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 return CONVERT_WDI2VOS_STATUS(status) ;
9559}
9560#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009561/*
Mihir Shetea4306052014-03-25 00:02:54 +05309562 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 * send Enter IMPS RSP back to PE
9564 */
Mihir Shetea4306052014-03-25 00:02:54 +05309565void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009566{
Mihir Shetea4306052014-03-25 00:02:54 +05309567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309568 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309569
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05309571 "<------ %s status=%d" ,__func__,status);
9572 if(NULL == pWdaParams)
9573 {
9574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9575 "%s: pWdaParams received NULL", __func__);
9576 VOS_ASSERT(0);
9577 return;
9578 }
9579
9580 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309581 if (NULL == pWDA)
9582 {
9583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9584 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9586 vos_mem_free(pWdaParams->wdaMsgParam);
9587 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309588 VOS_ASSERT(0);
9589 return ;
9590 }
Mihir Shetea4306052014-03-25 00:02:54 +05309591
9592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9593 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309594 if (WDI_STATUS_SUCCESS != status)
9595 {
9596 pWDA->failureCounts.enterImpsFailureCount++;
9597 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9598 pWDA->failureCounts.enterImpsFailureCount)
9599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9601 "%s: Status %d fail count %d", __func__, status,
9602 pWDA->failureCounts.enterImpsFailureCount);
9603 pWDA->failureCounts.enterImpsFailureCount = 0;
9604 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9605 WLAN_LOG_INDICATOR_HOST_DRIVER,
9606 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9607 FALSE, TRUE);
9608 }
9609 }
9610 else
9611 {
9612 pWDA->failureCounts.enterImpsFailureCount = 0;
9613 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009614 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 return ;
9616}
Mihir Shetea4306052014-03-25 00:02:54 +05309617
9618
9619/*
9620 * FUNCTION: WDA_EnterImpsReqCallback
9621 * Free memory and send Enter IMPS RSP back to PE.
9622 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9623 */
9624void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9625{
9626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309627 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309628
9629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9630 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9631
9632 if(NULL == pWdaParams)
9633 {
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9635 "%s: pWdaParams received NULL", __func__);
9636 VOS_ASSERT(0);
9637 return;
9638 }
9639
9640 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309641 if (NULL == pWDA)
9642 {
9643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9644 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9646 vos_mem_free(pWdaParams->wdaMsgParam);
9647 vos_mem_free(pWdaParams);
9648
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309649 VOS_ASSERT(0);
9650 return ;
9651 }
9652
Mihir Shetea4306052014-03-25 00:02:54 +05309653
9654 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9655 {
9656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9657 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309658 pWDA->failureCounts.enterImpsFailureCount++;
9659 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9660 pWDA->failureCounts.enterImpsFailureCount)
9661 {
9662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9663 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9664 pWDA->failureCounts.enterImpsFailureCount);
9665 pWDA->failureCounts.enterImpsFailureCount = 0;
9666 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9667 WLAN_LOG_INDICATOR_HOST_DRIVER,
9668 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9669 FALSE, TRUE);
9670 }
Mihir Shetea4306052014-03-25 00:02:54 +05309671 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9672 CONVERT_WDI2SIR_STATUS(wdiStatus));
9673 }
9674
9675 return;
9676}
Jeff Johnson295189b2012-06-20 16:38:30 -07009677/*
9678 * FUNCTION: WDA_ProcessEnterImpsReq
9679 * Request to WDI to Enter IMPS power state.
9680 */
9681VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9682{
9683 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309684 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9685 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309686 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009688 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309689
9690
9691 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9692 if (NULL == wdiEnterImpsReqParams)
9693 {
9694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9695 "%s: VOS MEM Alloc Failure", __func__);
9696 VOS_ASSERT(0);
9697 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9698 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9699 return VOS_STATUS_E_NOMEM;
9700 }
9701
9702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9703 if (NULL == pWdaParams)
9704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9706 "%s: VOS MEM Alloc Failure", __func__);
9707 VOS_ASSERT(0);
9708 vos_mem_free(wdiEnterImpsReqParams);
9709 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9710 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9711 return VOS_STATUS_E_NOMEM;
9712 }
9713
9714 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9715 wdiEnterImpsReqParams->pUserData = pWdaParams;
9716
9717 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9718 pWdaParams->wdaMsgParam = NULL;
9719 pWdaParams->pWdaContext = pWDA;
9720
9721 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9722 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9723 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 if(IS_WDI_STATUS_FAILURE(status))
9725 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309726 if (! (failcnt & 0xF))
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9728 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9729 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309730 vos_mem_free(wdiEnterImpsReqParams);
9731 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009732 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 return CONVERT_WDI2VOS_STATUS(status) ;
9735}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309736
9737/*
9738 * FUNCTION: WDA_ExitImpsRespCallback
9739 * send Exit IMPS RSP back to PE
9740 */
9741void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9742{
9743 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9744 tWDA_CbContext *pWDA;
9745
9746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9747 "<------ %s " ,__func__);
9748
9749 if (NULL == pWdaParams)
9750 {
9751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9752 "%s: pWdaParams received NULL", __func__);
9753 VOS_ASSERT(0);
9754 return;
9755 }
9756 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9757
9758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9759 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309760 if (WDI_STATUS_SUCCESS != status)
9761 {
9762 pWDA->failureCounts.exitImpsFailureCount++;
9763 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9764 pWDA->failureCounts.exitImpsFailureCount)
9765 {
9766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9767 "%s: Status %d fail count %d", __func__,
9768 status,
9769 pWDA->failureCounts.exitImpsFailureCount);
9770 pWDA->failureCounts.exitImpsFailureCount = 0;
9771 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9772 WLAN_LOG_INDICATOR_HOST_DRIVER,
9773 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9774 FALSE, TRUE);
9775 }
9776 }
9777 else
9778 {
9779 pWDA->failureCounts.exitImpsFailureCount = 0;
9780 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309781
9782 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9783 return;
9784}
9785
Jeff Johnson295189b2012-06-20 16:38:30 -07009786/*
9787 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009788 */
9789void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9790{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309792 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009794 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309795 if(NULL == pWdaParams)
9796 {
9797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9798 "%s: pWdaParams received NULL", __func__);
9799 VOS_ASSERT(0);
9800 return;
9801 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309802 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309803 if (IS_WDI_STATUS_FAILURE(status))
9804 {
9805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9806 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309807
9808 pWDA->failureCounts.exitImpsFailureCount++;
9809 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9810 pWDA->failureCounts.exitImpsFailureCount)
9811 {
9812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9813 "%s: wdiStatus %d fail count %d", __func__,
9814 status,
9815 pWDA->failureCounts.exitImpsFailureCount);
9816 pWDA->failureCounts.exitImpsFailureCount = 0;
9817 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9818 WLAN_LOG_INDICATOR_HOST_DRIVER,
9819 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9820 FALSE, TRUE);
9821 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309822 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9823 {
9824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9825 FL("reload wlan driver"));
9826 wpalWlanReload();
9827 }
9828 }
9829 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009830}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309831
Jeff Johnson295189b2012-06-20 16:38:30 -07009832/*
9833 * FUNCTION: WDA_ProcessExitImpsReq
9834 * Request to WDI to Exit IMPS power state.
9835 */
9836VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9837{
9838 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309839 tWDA_ReqParams *pWdaParams;
9840 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9841
Jeff Johnson295189b2012-06-20 16:38:30 -07009842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009843 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309844 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9845 sizeof(WDI_ExitImpsReqParamsType));
9846 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009847 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9849 "%s: VOS MEM Alloc Failure", __func__);
9850 VOS_ASSERT(0);
9851 return VOS_STATUS_E_NOMEM;
9852 }
9853 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9854 if(NULL == pWdaParams)
9855 {
9856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9857 "%s: VOS MEM Alloc Failure", __func__);
9858 VOS_ASSERT(0);
9859 vos_mem_free(wdiExitImpsReqParams);
9860 return VOS_STATUS_E_NOMEM;
9861 }
9862 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9863 wdiExitImpsReqParams->pUserData = pWdaParams;
9864
9865 /* Store param pointer as passed in by caller */
9866 /* store Params pass it to WDI */
9867 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9868 pWdaParams->pWdaContext = pWDA;
9869 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9870 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9871 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9872 pWdaParams);
9873 if (IS_WDI_STATUS_FAILURE(status))
9874 {
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9876 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9878 vos_mem_free(pWdaParams);
9879 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 return CONVERT_WDI2VOS_STATUS(status) ;
9882}
Jeff Johnson295189b2012-06-20 16:38:30 -07009883/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009884 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 * send Enter BMPS RSP back to PE
9886 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009887void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009888{
9889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309890 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009891 tEnterBmpsParams *pEnterBmpsRspParams;
9892
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009894 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 if(NULL == pWdaParams)
9896 {
9897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009898 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009899 VOS_ASSERT(0) ;
9900 return ;
9901 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009902
9903 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309904 if (NULL == pWDA)
9905 {
9906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9907 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309908
9909 if(pWdaParams->wdaWdiApiMsgParam)
9910 {
9911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9912 }
9913 vos_mem_free(pWdaParams);
9914
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309915 VOS_ASSERT(0);
9916 return ;
9917 }
9918
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009919 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9920
9921 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009922 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009923
9924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309926 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9927 {
9928 pWDA->failureCounts.enterBmpsFailureCount++;
9929 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9930 pWDA->failureCounts.enterBmpsFailureCount)
9931 {
9932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9933 "%s: wdiStatus %d fail count %d", __func__,
9934 pwdiEnterBmpsRsp->wdiStatus,
9935 pWDA->failureCounts.enterBmpsFailureCount);
9936 pWDA->failureCounts.enterBmpsFailureCount = 0;
9937 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9938 WLAN_LOG_INDICATOR_HOST_DRIVER,
9939 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9940 FALSE, TRUE);
9941 }
9942 }
9943 else
9944 {
9945 pWDA->failureCounts.enterBmpsFailureCount = 0;
9946 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009947 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9948
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 return ;
9950}
Jeff Johnson295189b2012-06-20 16:38:30 -07009951/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009952 * FUNCTION: WDA_EnterBmpsReqCallback
9953 * Free memory and send Enter BMPS RSP back to PE.
9954 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9955 */
9956void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9957{
9958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309959 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009960 tEnterBmpsParams *pEnterBmpsRspParams;
9961
9962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9963 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9964
9965 if(NULL == pWdaParams)
9966 {
9967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9968 "%s: pWdaParams received NULL", __func__);
9969 VOS_ASSERT(0);
9970 return;
9971 }
9972
9973 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309974 if (NULL == pWDA)
9975 {
9976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9977 "%s:pWDA is NULL", __func__);
9978 VOS_ASSERT(0);
9979 return ;
9980 }
9981
Yue Ma7f44bbe2013-04-12 11:47:39 -07009982 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9983 pEnterBmpsRspParams->status = wdiStatus;
9984
9985 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9986 {
9987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9988 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309989 pWDA->failureCounts.enterBmpsFailureCount++;
9990 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9991 pWDA->failureCounts.enterBmpsFailureCount)
9992 {
9993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9994 "%s: wdiStatus %d fail count %d", __func__,
9995 wdiStatus,
9996 pWDA->failureCounts.enterBmpsFailureCount);
9997 pWDA->failureCounts.enterBmpsFailureCount = 0;
9998 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9999 WLAN_LOG_INDICATOR_HOST_DRIVER,
10000 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
10001 FALSE, TRUE);
10002 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010003 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
10004 }
10005
10006 return;
10007}
10008/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 * FUNCTION: WDA_ProcessEnterBmpsReq
10010 * Request to WDI to Enter BMPS power state.
10011 */
10012VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
10013 tEnterBmpsParams *pEnterBmpsReqParams)
10014{
10015 WDI_Status status = WDI_STATUS_SUCCESS;
10016 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
10017 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
10021 {
10022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010023 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 VOS_ASSERT(0);
10025 return VOS_STATUS_E_FAILURE;
10026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010027 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
10028 if (NULL == wdiEnterBmpsReqParams)
10029 {
10030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010033 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10034 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 return VOS_STATUS_E_NOMEM;
10036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10038 if (NULL == pWdaParams)
10039 {
10040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010041 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 VOS_ASSERT(0);
10043 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010044 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10045 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 return VOS_STATUS_E_NOMEM;
10047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010048 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
10049 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
10050 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
10051 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080010052 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
10054 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
10055 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010056 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
10057 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010058
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 /* Store param pointer as passed in by caller */
10060 /* store Params pass it to WDI */
10061 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010062 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010065 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 if (IS_WDI_STATUS_FAILURE(status))
10067 {
10068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10069 "Failure in Enter BMPS REQ WDI API, free all the memory" );
10070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010071 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010073 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 return CONVERT_WDI2VOS_STATUS(status);
10076}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010077
10078
10079static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
10080 WDI_Status wdiStatus,
10081 tExitBmpsParams *pExitBmpsReqParams)
10082{
10083 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
10084
10085 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
10086}
10087
10088
Jeff Johnson295189b2012-06-20 16:38:30 -070010089/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010090 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 * send Exit BMPS RSP back to PE
10092 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010093void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010094{
10095 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010096 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010097 tExitBmpsParams *pExitBmpsRspParams;
10098
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010100 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 if(NULL == pWdaParams)
10102 {
10103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 VOS_ASSERT(0) ;
10106 return ;
10107 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010108
10109 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010110 if (NULL == pWDA)
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10113 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010114
10115 if(pWdaParams->wdaWdiApiMsgParam)
10116 {
10117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10118 }
10119 vos_mem_free(pWdaParams);
10120
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010121 VOS_ASSERT(0);
10122 return ;
10123 }
10124
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010125 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10126
10127 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010128 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010129
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +053010131 vos_mem_free(pWdaParams);
10132
10133 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
10134 {
10135 pWDA->failureCounts.exitBmpsFailureCount++;
10136 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10137 pWDA->failureCounts.exitBmpsFailureCount)
10138 {
10139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10140 "%s: Status %d fail count %d", __func__,
10141 pExitBmpsRspParams->status,
10142 pWDA->failureCounts.exitBmpsFailureCount);
10143 pWDA->failureCounts.exitBmpsFailureCount = 0;
10144 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10145 WLAN_LOG_INDICATOR_HOST_DRIVER,
10146 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10147 FALSE, TRUE);
10148 }
10149 }
10150 else
10151 {
10152 pWDA->failureCounts.exitBmpsFailureCount = 0;
10153 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010154
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010155 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 return ;
10157}
Jeff Johnson295189b2012-06-20 16:38:30 -070010158/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010159 * FUNCTION: WDA_ExitBmpsReqCallback
10160 * Free memory and send Exit BMPS RSP back to PE.
10161 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
10162 */
10163void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
10164{
10165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010166 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010167 tExitBmpsParams *pExitBmpsRspParams;
10168
10169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10170 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10171
10172 if(NULL == pWdaParams)
10173 {
10174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10175 "%s: pWdaParams received NULL", __func__);
10176 VOS_ASSERT(0);
10177 return;
10178 }
10179
10180 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010181 if (NULL == pWDA)
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10184 "%s:pWDA is NULL", __func__);
10185 VOS_ASSERT(0);
10186 return ;
10187 }
10188
Yue Ma7f44bbe2013-04-12 11:47:39 -070010189 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10190 pExitBmpsRspParams->status = wdiStatus;
10191
10192 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10193 {
10194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10195 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +053010196 pWDA->failureCounts.exitBmpsFailureCount++;
10197 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10198 pWDA->failureCounts.exitBmpsFailureCount)
10199 {
10200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10201 "%s: wdiStatus %d fail count %d", __func__,
10202 wdiStatus,
10203 pWDA->failureCounts.exitBmpsFailureCount);
10204 pWDA->failureCounts.exitBmpsFailureCount = 0;
10205 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10206 WLAN_LOG_INDICATOR_HOST_DRIVER,
10207 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10208 FALSE, TRUE);
10209 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010210 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
10211 }
10212
10213 return;
10214}
10215/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 * FUNCTION: WDA_ProcessExitBmpsReq
10217 * Request to WDI to Exit BMPS power state.
10218 */
10219VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
10220 tExitBmpsParams *pExitBmpsReqParams)
10221{
10222 WDI_Status status = WDI_STATUS_SUCCESS ;
10223 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
10224 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
10225 sizeof(WDI_ExitBmpsReqParamsType)) ;
10226 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010228 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 if(NULL == wdiExitBmpsReqParams)
10230 {
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010234 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 return VOS_STATUS_E_NOMEM;
10236 }
10237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10238 if(NULL == pWdaParams)
10239 {
10240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 VOS_ASSERT(0);
10243 vos_mem_free(wdiExitBmpsReqParams);
10244 return VOS_STATUS_E_NOMEM;
10245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -070010247
10248 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
10249
Yue Ma7f44bbe2013-04-12 11:47:39 -070010250 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
10251 wdiExitBmpsReqParams->pUserData = pWdaParams;
10252
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 /* Store param pointer as passed in by caller */
10254 /* store Params pass it to WDI */
10255 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
10256 pWdaParams->pWdaContext = pWDA;
10257 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010259 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 if(IS_WDI_STATUS_FAILURE(status))
10261 {
10262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10263 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10265 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010266 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 return CONVERT_WDI2VOS_STATUS(status) ;
10269}
Jeff Johnson295189b2012-06-20 16:38:30 -070010270/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010271 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 * send Enter UAPSD RSP back to PE
10273 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010274void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010275{
10276 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010277 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010278 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010280 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 if(NULL == pWdaParams)
10282 {
10283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010284 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 VOS_ASSERT(0) ;
10286 return ;
10287 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010288
10289 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010290 if (NULL == pWDA)
10291 {
10292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10293 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010294
10295 if(pWdaParams->wdaWdiApiMsgParam)
10296 {
10297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10298 }
10299 vos_mem_free(pWdaParams);
10300
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010301 VOS_ASSERT(0);
10302 return ;
10303 }
10304
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010305 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10306
10307 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010308 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010309
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10311 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010312 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 return ;
10314}
Jeff Johnson295189b2012-06-20 16:38:30 -070010315/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010316 * FUNCTION: WDA_EnterUapsdReqCallback
10317 * Free memory and send Enter UAPSD RSP back to PE.
10318 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
10319 */
10320void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10321{
10322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10323 tWDA_CbContext *pWDA;
10324 tUapsdParams *pEnterUapsdRsqParams;
10325
10326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10327 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10328
10329 if(NULL == pWdaParams)
10330 {
10331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10332 "%s: pWdaParams received NULL", __func__);
10333 VOS_ASSERT(0);
10334 return;
10335 }
10336
10337 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010338 if (NULL == pWDA)
10339 {
10340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10341 "%s:pWDA is NULL", __func__);
10342 VOS_ASSERT(0);
10343 return ;
10344 }
10345
Yue Ma7f44bbe2013-04-12 11:47:39 -070010346 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10347 pEnterUapsdRsqParams->status = wdiStatus;
10348
10349 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10350 {
10351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10352 vos_mem_free(pWdaParams);
10353 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
10354 }
10355
10356 return;
10357}
10358/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 * FUNCTION: WDA_ProcessEnterUapsdReq
10360 * Request to WDI to Enter UAPSD power state.
10361 */
10362VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
10363 tUapsdParams *pEnterUapsdReqParams)
10364{
10365 WDI_Status status = WDI_STATUS_SUCCESS ;
10366 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
10367 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
10368 sizeof(WDI_EnterUapsdReqParamsType)) ;
10369 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 if(NULL == wdiEnterUapsdReqParams)
10373 {
10374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 VOS_ASSERT(0);
10377 return VOS_STATUS_E_NOMEM;
10378 }
10379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10380 if(NULL == pWdaParams)
10381 {
10382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 VOS_ASSERT(0);
10385 vos_mem_free(wdiEnterUapsdReqParams);
10386 return VOS_STATUS_E_NOMEM;
10387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010388 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
10389 pEnterUapsdReqParams->beDeliveryEnabled;
10390 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
10391 pEnterUapsdReqParams->beTriggerEnabled;
10392 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
10393 pEnterUapsdReqParams->bkDeliveryEnabled;
10394 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
10395 pEnterUapsdReqParams->bkTriggerEnabled;
10396 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
10397 pEnterUapsdReqParams->viDeliveryEnabled;
10398 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
10399 pEnterUapsdReqParams->viTriggerEnabled;
10400 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
10401 pEnterUapsdReqParams->voDeliveryEnabled;
10402 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
10403 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070010404 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010405
Yue Ma7f44bbe2013-04-12 11:47:39 -070010406 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
10407 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 /* Store param pointer as passed in by caller */
10410 /* store Params pass it to WDI */
10411 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
10412 pWdaParams->pWdaContext = pWDA;
10413 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010415 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 if(IS_WDI_STATUS_FAILURE(status))
10417 {
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10419 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
10420 vos_mem_free(pWdaParams->wdaMsgParam) ;
10421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10422 vos_mem_free(pWdaParams) ;
10423 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010424 return CONVERT_WDI2VOS_STATUS(status) ;
10425}
Jeff Johnson295189b2012-06-20 16:38:30 -070010426/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010427 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 * send Exit UAPSD RSP back to PE
10429 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010430void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010431{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010432
10433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10434 tWDA_CbContext *pWDA;
10435 tExitUapsdParams *pExitUapsdRspParams;
10436
Jeff Johnson295189b2012-06-20 16:38:30 -070010437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010438 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010439 if(NULL == pWdaParams)
10440 {
10441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010442 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010443 VOS_ASSERT(0);
10444 return;
10445 }
10446
10447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10448 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10449
10450 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010451 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010452
10453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10454 vos_mem_free(pWdaParams) ;
10455
10456 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 return ;
10458}
Jeff Johnson295189b2012-06-20 16:38:30 -070010459/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010460 * FUNCTION: WDA_ExitUapsdReqCallback
10461 * Free memory and send Exit UAPSD RSP back to PE.
10462 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
10463 */
10464void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10465{
10466 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010467 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010468 tExitUapsdParams *pExitUapsdRspParams;
10469
10470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10471 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10472
10473 if(NULL == pWdaParams)
10474 {
10475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10476 "%s: pWdaParams received NULL", __func__);
10477 VOS_ASSERT(0);
10478 return;
10479 }
10480
10481 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010482 if (NULL == pWDA)
10483 {
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10485 "%s:pWDA is NULL", __func__);
10486 VOS_ASSERT(0);
10487 return ;
10488 }
10489
Yue Ma7f44bbe2013-04-12 11:47:39 -070010490 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10491 pExitUapsdRspParams->status = wdiStatus;
10492
10493 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10494 {
10495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10496 vos_mem_free(pWdaParams);
10497 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
10498 }
10499
10500 return;
10501}
10502/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 * FUNCTION: WDA_ProcessExitUapsdReq
10504 * Request to WDI to Exit UAPSD power state.
10505 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010506VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
10507 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010508{
10509 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010510 tWDA_ReqParams *pWdaParams ;
10511 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
10512 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
10513 sizeof(WDI_ExitUapsdReqParamsType)) ;
10514
Jeff Johnson295189b2012-06-20 16:38:30 -070010515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010516 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010517
10518 if(NULL == wdiExitUapsdReqParams)
10519 {
10520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010521 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010522 VOS_ASSERT(0);
10523 return VOS_STATUS_E_NOMEM;
10524 }
10525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10526 if(NULL == pWdaParams)
10527 {
10528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010529 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010530 VOS_ASSERT(0);
10531 vos_mem_free(wdiExitUapsdReqParams);
10532 return VOS_STATUS_E_NOMEM;
10533 }
10534
10535 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010536 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
10537 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010538
10539 /* Store param pointer as passed in by caller */
10540 /* store Params pass it to WDI */
10541 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
10542 pWdaParams->pWdaContext = pWDA;
10543 pWdaParams->wdaMsgParam = pExitUapsdParams;
10544
Yue Ma7f44bbe2013-04-12 11:47:39 -070010545 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 if(IS_WDI_STATUS_FAILURE(status))
10547 {
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10549 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010550 vos_mem_free(pWdaParams->wdaMsgParam) ;
10551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10552 vos_mem_free(pWdaParams) ;
10553
Jeff Johnson295189b2012-06-20 16:38:30 -070010554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 return CONVERT_WDI2VOS_STATUS(status) ;
10556}
10557
Jeff Johnson295189b2012-06-20 16:38:30 -070010558/*
10559 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
10560 *
10561 */
10562void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
10563{
10564 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010566 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 if(NULL == pWdaParams)
10568 {
10569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010570 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010571 VOS_ASSERT(0) ;
10572 return ;
10573 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 if( pWdaParams != NULL )
10575 {
10576 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10577 {
10578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10579 }
10580 if( pWdaParams->wdaMsgParam != NULL )
10581 {
10582 vos_mem_free(pWdaParams->wdaMsgParam) ;
10583 }
10584 vos_mem_free(pWdaParams) ;
10585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 return ;
10587}
Jeff Johnson295189b2012-06-20 16:38:30 -070010588/*
10589 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
10590 * Request to WDI to set the power save params at start.
10591 */
10592VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
10593 tSirPowerSaveCfg *pPowerSaveCfg)
10594{
10595 WDI_Status status = WDI_STATUS_SUCCESS ;
10596 tHalCfg *tlvStruct = NULL ;
10597 tANI_U8 *tlvStructStart = NULL ;
10598 v_PVOID_t *configParam;
10599 tANI_U32 configParamSize;
10600 tANI_U32 *configDataValue;
10601 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
10602 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010604 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010605 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
10606 {
10607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010608 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010609 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010610 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 return VOS_STATUS_E_FAILURE;
10612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
10614 if (NULL == wdiPowerSaveCfg)
10615 {
10616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010618 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010619 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010620 return VOS_STATUS_E_NOMEM;
10621 }
10622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10623 if(NULL == pWdaParams)
10624 {
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 VOS_ASSERT(0);
10628 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010629 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010630 return VOS_STATUS_E_NOMEM;
10631 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010632 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10633 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010634 if(NULL == configParam)
10635 {
10636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010637 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010638 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 vos_mem_free(pWdaParams);
10640 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010641 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010642 return VOS_STATUS_E_NOMEM;
10643 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 vos_mem_set(configParam, configParamSize, 0);
10645 wdiPowerSaveCfg->pConfigBuffer = configParam;
10646 tlvStruct = (tHalCfg *)configParam;
10647 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10649 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10650 tlvStruct->length = sizeof(tANI_U32);
10651 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10652 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10654 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10656 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10657 tlvStruct->length = sizeof(tANI_U32);
10658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10659 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10661 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10663 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10664 tlvStruct->length = sizeof(tANI_U32);
10665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10666 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10668 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10670 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10671 tlvStruct->length = sizeof(tANI_U32);
10672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10673 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10675 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10677 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10678 tlvStruct->length = sizeof(tANI_U32);
10679 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10680 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10682 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10684 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10685 tlvStruct->length = sizeof(tANI_U32);
10686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10687 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010688 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10689 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010690 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10691 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10692 tlvStruct->length = sizeof(tANI_U32);
10693 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10694 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010697 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10698 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10699 tlvStruct->length = sizeof(tANI_U32);
10700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10701 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10702 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10703 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010704 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10705 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10706 tlvStruct->length = sizeof(tANI_U32);
10707 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10708 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10709 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10710 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10712 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10713 tlvStruct->length = sizeof(tANI_U32);
10714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10715 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10717 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10719 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10720 tlvStruct->length = sizeof(tANI_U32);
10721 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10722 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10724 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 /* store Params pass it to WDI */
10728 pWdaParams->wdaMsgParam = configParam;
10729 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10730 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10732 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010733 if(IS_WDI_STATUS_FAILURE(status))
10734 {
10735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10736 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10737 vos_mem_free(pWdaParams->wdaMsgParam);
10738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10739 vos_mem_free(pWdaParams);
10740 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010741 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 return CONVERT_WDI2VOS_STATUS(status);
10743}
Jeff Johnson295189b2012-06-20 16:38:30 -070010744/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010745 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010746 *
10747 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010748void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010749{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10751
Jeff Johnson295189b2012-06-20 16:38:30 -070010752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010753 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010754
10755 if(NULL == pWdaParams)
10756 {
10757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10758 "%s: pWdaParams received NULL", __func__);
10759 VOS_ASSERT(0);
10760 return ;
10761 }
10762
10763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 vos_mem_free(pWdaParams);
10765
Jeff Johnson295189b2012-06-20 16:38:30 -070010766 return ;
10767}
Jeff Johnson295189b2012-06-20 16:38:30 -070010768/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010769 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10770 * Free memory.
10771 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10772 */
10773void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10774{
10775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10776
10777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10778 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10779
10780 if(NULL == pWdaParams)
10781 {
10782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10783 "%s: pWdaParams received NULL", __func__);
10784 VOS_ASSERT(0);
10785 return;
10786 }
10787
10788 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10789 {
10790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10791 vos_mem_free(pWdaParams);
10792 }
10793
10794 return;
10795}
10796/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 * FUNCTION: WDA_SetUapsdAcParamsReq
10798 * Request to WDI to set the UAPSD params for an ac (sta mode).
10799 */
10800VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10801 tUapsdInfo *pUapsdInfo)
10802{
10803 WDI_Status status = WDI_STATUS_SUCCESS;
10804 tWDA_CbContext *pWDA = NULL ;
10805 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10806 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10807 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10808 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010811 if(NULL == wdiUapsdParams)
10812 {
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 VOS_ASSERT(0);
10816 return VOS_STATUS_E_NOMEM;
10817 }
10818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10819 if(NULL == pWdaParams)
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 VOS_ASSERT(0);
10824 vos_mem_free(wdiUapsdParams);
10825 return VOS_STATUS_E_NOMEM;
10826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10828 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10829 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10830 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10831 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10832 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010833 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10834 wdiUapsdParams->pUserData = pWdaParams;
10835
Jeff Johnson295189b2012-06-20 16:38:30 -070010836 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010837 pWdaParams->pWdaContext = pWDA;
10838 /* Store param pointer as passed in by caller */
10839 pWdaParams->wdaMsgParam = pUapsdInfo;
10840 /* store Params pass it to WDI */
10841 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010843 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 if(IS_WDI_STATUS_FAILURE(status))
10846 {
10847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10848 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10850 vos_mem_free(pWdaParams);
10851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010852 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10853 return VOS_STATUS_SUCCESS;
10854 else
10855 return VOS_STATUS_E_FAILURE;
10856
Jeff Johnson295189b2012-06-20 16:38:30 -070010857}
10858/*
10859 * FUNCTION: WDA_ClearUapsdAcParamsReq
10860 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10861 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10862 * and again enter the UPASD with the modified params. Hence the disable
10863 * function was kept empty.
10864 *
10865 */
10866VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10867{
10868 /* do nothing */
10869 return VOS_STATUS_SUCCESS;
10870}
Jeff Johnson295189b2012-06-20 16:38:30 -070010871/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010872 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 *
10874 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010875void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010876{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10878
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010880 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010881
10882 if(NULL == pWdaParams)
10883 {
10884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010885 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010886 VOS_ASSERT(0) ;
10887 return ;
10888 }
10889
10890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10891 vos_mem_free(pWdaParams->wdaMsgParam);
10892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010893
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 //print a msg, nothing else to do
10895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010896 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 return ;
10898}
Jeff Johnson295189b2012-06-20 16:38:30 -070010899/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010900 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10901 * Free memory.
10902 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10903 */
10904void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10905{
10906 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10907
10908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10909 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10910
10911 if(NULL == pWdaParams)
10912 {
10913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10914 "%s: pWdaParams received NULL", __func__);
10915 VOS_ASSERT(0);
10916 return;
10917 }
10918
10919 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10920 {
10921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10922 vos_mem_free(pWdaParams->wdaMsgParam);
10923 vos_mem_free(pWdaParams);
10924 }
10925
10926 return;
10927}
10928/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 * FUNCTION: WDA_UpdateUapsdParamsReq
10930 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10931 */
10932VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10933 tUpdateUapsdParams* pUpdateUapsdInfo)
10934{
10935 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010936 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010937 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10938 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10939 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010940 tWDA_ReqParams *pWdaParams = NULL;
10941
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010943 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 if(NULL == wdiUpdateUapsdParams)
10945 {
10946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 VOS_ASSERT(0);
10949 return VOS_STATUS_E_NOMEM;
10950 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10952 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10953 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010954 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10955 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010956
10957 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10958 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010961 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010963 vos_mem_free(pUpdateUapsdInfo);
10964 vos_mem_free(wdiUpdateUapsdParams);
10965 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010968 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010969 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010970 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10971 pWdaParams->pWdaContext = pWDA;
10972
Jeff Johnson43971f52012-07-17 12:26:56 -070010973 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010974 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010975 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010976
Jeff Johnson43971f52012-07-17 12:26:56 -070010977 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010978 {
10979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10980 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010981 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10983 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010984 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010986 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010987}
Jeff Johnson295189b2012-06-20 16:38:30 -070010988/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010989 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 *
10991 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010992void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010993{
10994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010996 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010997 if(WDI_STATUS_SUCCESS != wdiStatus)
10998 {
10999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011000 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011001 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 if(NULL == pWdaParams)
11003 {
11004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011005 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 VOS_ASSERT(0) ;
11007 return ;
11008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11010 vos_mem_free(pWdaParams->wdaMsgParam);
11011 vos_mem_free(pWdaParams);
11012 return ;
11013}
Jeff Johnson295189b2012-06-20 16:38:30 -070011014/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011015 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
11016 * Free memory.
11017 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
11018 */
11019void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11020{
11021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11022
11023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11025
11026 if(NULL == pWdaParams)
11027 {
11028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11029 "%s: pWdaParams received NULL", __func__);
11030 VOS_ASSERT(0);
11031 return;
11032 }
11033
11034 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11035 {
11036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11037 vos_mem_free(pWdaParams->wdaMsgParam);
11038 vos_mem_free(pWdaParams);
11039 }
11040
11041 return;
11042}
11043/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
11045 *
11046 */
11047VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
11048 tSirWlanSetRxpFilters *pWlanSuspendParam)
11049{
Jeff Johnson295189b2012-06-20 16:38:30 -070011050 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011051 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011052 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011053 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011054 /* Sanity Check
11055 * This is very unlikely and add assert to collect more info next time */
11056 if(NULL == pWlanSuspendParam)
11057 {
11058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11059 "%s: pWlanSuspendParam received NULL", __func__);
11060 VOS_ASSERT(0) ;
11061 return VOS_STATUS_E_FAULT;
11062 }
11063 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
11064 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011066 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011067 if(NULL == wdiRxpFilterParams)
11068 {
11069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 VOS_ASSERT(0);
11072 vos_mem_free(pWlanSuspendParam);
11073 return VOS_STATUS_E_NOMEM;
11074 }
11075 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11076 if(NULL == pWdaParams)
11077 {
11078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 VOS_ASSERT(0);
11081 vos_mem_free(wdiRxpFilterParams);
11082 vos_mem_free(pWlanSuspendParam);
11083 return VOS_STATUS_E_NOMEM;
11084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
11086 pWlanSuspendParam->setMcstBcstFilter;
11087 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
11088 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11089
Yue Ma7f44bbe2013-04-12 11:47:39 -070011090 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
11091 wdiRxpFilterParams->pUserData = pWdaParams;
11092
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 pWdaParams->pWdaContext = pWDA;
11094 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11095 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011096 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011097 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011099 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 {
11101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11102 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011103 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11105 vos_mem_free(pWdaParams->wdaMsgParam);
11106 vos_mem_free(pWdaParams);
11107 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011108 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011109}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011110
11111/*
Siddharth Bhal64246172015-02-27 01:04:37 +053011112 * FUNCTION: WDA_ProcessGetFrameLogReq
11113 * Request to WDI to get the Frame Log.
11114 */
11115VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
11116 tAniGetFrameLogReq *pGetFrameLog)
11117{
11118 VOS_STATUS status = VOS_STATUS_SUCCESS;
11119 WDI_Status wstatus;
11120 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
11121 tWDA_ReqParams *pWdaParams ;
11122
11123 /* Sanity Check*/
11124 if(NULL == pGetFrameLog)
11125 {
11126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011127 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053011128 VOS_ASSERT(0) ;
11129 return VOS_STATUS_E_FAULT;
11130 }
11131
11132 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
11133 sizeof(WDI_GetFrameLogReqInfoType));
11134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11135 "------> %s " ,__func__);
11136
11137 if(NULL == wdiGetFrameLogInfo)
11138 {
11139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11140 "%s: VOS MEM Alloc Failure", __func__);
11141 VOS_ASSERT(0);
11142 vos_mem_free(pGetFrameLog);
11143 return VOS_STATUS_E_NOMEM;
11144 }
11145
11146 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11147 if(NULL == pWdaParams)
11148 {
11149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11150 "%s: VOS MEM Alloc Failure", __func__);
11151 VOS_ASSERT(0);
11152 vos_mem_free(wdiGetFrameLogInfo);
11153 vos_mem_free(pGetFrameLog);
11154 return VOS_STATUS_E_NOMEM;
11155 }
11156
11157 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
11158
11159 pWdaParams->pWdaContext = pWDA;
11160 pWdaParams->wdaMsgParam = pGetFrameLog;
11161 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
11162
11163 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
11164 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
11165 pWdaParams);
11166 if(IS_WDI_STATUS_FAILURE(wstatus))
11167 {
11168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11169 "Failure in get frame log REQ WDI API, free all the memory" );
11170 status = CONVERT_WDI2VOS_STATUS(wstatus);
11171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11172 vos_mem_free(pWdaParams->wdaMsgParam);
11173 vos_mem_free(pWdaParams);
11174 }
11175 return status;
11176}
11177
Sachin Ahuja715aafc2015-07-21 23:35:10 +053011178
11179/*
11180 * FUNCTION: WDA_FatalEventLogsRspCallback
11181 * recieves Flush Logs response from FW
11182 */
11183
11184void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
11185 void* pUserData)
11186{
11187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11188
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11190 "<------ %s,wdiStatus:%d " ,
11191 __func__, wdiRsp->wdiStatus);
11192 if(NULL == pWdaParams)
11193 {
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11195 "%s: pWdaParams received NULL", __func__);
11196 VOS_ASSERT(0);
11197 return ;
11198 }
11199
11200 if(NULL == pWdaParams->wdaMsgParam)
11201 {
11202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11203 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
11204 VOS_ASSERT(0);
11205 vos_mem_free(pWdaParams);
11206 return ;
11207 }
11208
11209 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
11210 {
11211 /*
11212 * If it is failure, it means JOb is already posted by FW
11213 * for logging, so for failure scenario also we will get the
11214 * done indication
11215 */
11216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11217 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
11218 __func__, wdiRsp->wdiStatus);
11219 }
11220
11221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11222 vos_mem_free(pWdaParams->wdaMsgParam);
11223 vos_mem_free(pWdaParams);
11224
11225 return;
11226
11227}
11228
11229/*
11230 * FUNCTION: WDA_ProcessFatalEventLogsReq
11231 * Request to WDI to send the fatal Event Logs Req.
11232 */
11233
11234VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
11235 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
11236{
11237 VOS_STATUS status = VOS_STATUS_SUCCESS;
11238 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
11239 tWDA_ReqParams *pWdaParams ;
11240 WDI_Status wstatus;
11241
11242
11243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11244 "------> %s " ,__func__);
11245 if (NULL == pFatalEventLogsReqParam)
11246 {
11247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11248 "%s: pMgmtLoggingInitParam received NULL", __func__);
11249 VOS_ASSERT(0) ;
11250 return VOS_STATUS_E_FAULT;
11251 }
11252 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
11253 sizeof(WDI_FatalEventLogsReqInfoType));
11254 if(NULL == wdiFatalEventLogsReqInfo)
11255 {
11256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11257 "%s: VOS MEM Alloc Failure", __func__);
11258 VOS_ASSERT(0);
11259 vos_mem_free(pFatalEventLogsReqParam);
11260 return VOS_STATUS_E_NOMEM;
11261 }
11262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11263 if(NULL == pWdaParams)
11264 {
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11266 "%s: VOS MEM Alloc Failure", __func__);
11267 VOS_ASSERT(0);
11268 vos_mem_free(wdiFatalEventLogsReqInfo);
11269 vos_mem_free(pFatalEventLogsReqParam);
11270 return VOS_STATUS_E_NOMEM;
11271 }
11272 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
11273 pWdaParams->pWdaContext = pWDA;
11274 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
11275 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
11276
11277 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
11278 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
11279 pWdaParams);
11280 if(IS_WDI_STATUS_FAILURE(wstatus))
11281 {
11282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11283 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11284 status = CONVERT_WDI2VOS_STATUS(wstatus);
11285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11286 vos_mem_free(pWdaParams->wdaMsgParam);
11287 vos_mem_free(pWdaParams);
11288 }
11289
11290 return status;
11291
11292}
11293
Siddharth Bhal64246172015-02-27 01:04:37 +053011294/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011295 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011296 *
11297 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011298VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
11299 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011300{
11301 VOS_STATUS status = VOS_STATUS_SUCCESS;
11302 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011303 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011304 tWDA_ReqParams *pWdaParams ;
11305
11306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11307 "------> %s " ,__func__);
11308
11309 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011310 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011311 {
11312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011313 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011314 VOS_ASSERT(0) ;
11315 return VOS_STATUS_E_FAULT;
11316 }
11317
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011318 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
11319 sizeof(WDI_FWLoggingInitReqInfoType));
11320 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11323 "%s: VOS MEM Alloc Failure", __func__);
11324 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011325 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011326 return VOS_STATUS_E_NOMEM;
11327 }
11328
11329 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11330 if(NULL == pWdaParams)
11331 {
11332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11333 "%s: VOS MEM Alloc Failure", __func__);
11334 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011335 vos_mem_free(wdiFWLoggingInitInfo);
11336 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011337 return VOS_STATUS_E_NOMEM;
11338 }
11339
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011340 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
11341 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
11342 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
11343 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
11344 wdiFWLoggingInitInfo->continuousFrameLogging =
11345 pFWLoggingInitParam->continuousFrameLogging;
11346 wdiFWLoggingInitInfo->minLogBufferSize=
11347 pFWLoggingInitParam->minLogBufferSize;
11348 wdiFWLoggingInitInfo->maxLogBufferSize=
11349 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011350
11351 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011352 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
11353 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011354
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011355 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
11356 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011357 pWdaParams);
11358 if(IS_WDI_STATUS_FAILURE(wstatus))
11359 {
11360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11361 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11362 status = CONVERT_WDI2VOS_STATUS(wstatus);
11363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11364 vos_mem_free(pWdaParams->wdaMsgParam);
11365 vos_mem_free(pWdaParams);
11366 }
11367
11368 return status;
11369}
11370
Jeff Johnson295189b2012-06-20 16:38:30 -070011371/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053011372 * FUNCTION: WDA_ProcessStartRssiMonitorReq
11373 *
11374 */
11375VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
11376 tSirRssiMonitorReq *pRssiMonitorReqParam)
11377{
11378 VOS_STATUS status = VOS_STATUS_SUCCESS;
11379 WDI_Status wstatus;
11380 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11381 tWDA_ReqParams *pWdaParams ;
11382
11383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11384 "------> %s " ,__func__);
11385
11386 /* Sanity Check*/
11387 if(NULL == pRssiMonitorReqParam)
11388 {
11389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11390 "%s: pRssiMonitorReqParam received NULL", __func__);
11391 VOS_ASSERT(0) ;
11392 return VOS_STATUS_E_FAULT;
11393 }
11394
11395 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11396 sizeof(WDI_RssiMonitorReqInfoType));
11397 if(NULL == wdiRssiMonitorInfo)
11398 {
11399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11400 "%s: VOS MEM Alloc Failure", __func__);
11401 VOS_ASSERT(0);
11402 vos_mem_free(pRssiMonitorReqParam);
11403 return VOS_STATUS_E_NOMEM;
11404 }
11405
11406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11407 if(NULL == pWdaParams)
11408 {
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11410 "%s: VOS MEM Alloc Failure", __func__);
11411 VOS_ASSERT(0);
11412 vos_mem_free(wdiRssiMonitorInfo);
11413 vos_mem_free(pRssiMonitorReqParam);
11414 return VOS_STATUS_E_NOMEM;
11415 }
11416
11417 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11418 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
11419 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
11420 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11421 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11422
11423 pWdaParams->pWdaContext = pWDA;
11424 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11425 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11426
11427 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
11428 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
11429 pWdaParams);
11430 if(IS_WDI_STATUS_FAILURE(wstatus))
11431 {
11432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11433 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11434 status = CONVERT_WDI2VOS_STATUS(wstatus);
11435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11436 vos_mem_free(pWdaParams->wdaMsgParam);
11437 vos_mem_free(pWdaParams);
11438 }
11439
11440 return status;
11441}
11442
11443/*
11444 * FUNCTION: WDA_ProcessStopRssiMonitorReq
11445 *
11446 */
11447VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
11448 tSirRssiMonitorReq *pRssiMonitorReqParam)
11449{
11450 VOS_STATUS status = VOS_STATUS_SUCCESS;
11451 WDI_Status wstatus;
11452 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11453 tWDA_ReqParams *pWdaParams ;
11454
11455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11456 "------> %s " ,__func__);
11457
11458 /* Sanity Check*/
11459 if(NULL == pRssiMonitorReqParam)
11460 {
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11462 "%s: pRssiMonitorReqParam received NULL", __func__);
11463 VOS_ASSERT(0) ;
11464 return VOS_STATUS_E_FAULT;
11465 }
11466
11467 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11468 sizeof(WDI_RssiMonitorReqInfoType));
11469 if(NULL == wdiRssiMonitorInfo)
11470 {
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11472 "%s: VOS MEM Alloc Failure", __func__);
11473 VOS_ASSERT(0);
11474 vos_mem_free(pRssiMonitorReqParam);
11475 return VOS_STATUS_E_NOMEM;
11476 }
11477
11478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11479 if(NULL == pWdaParams)
11480 {
11481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11482 "%s: VOS MEM Alloc Failure", __func__);
11483 VOS_ASSERT(0);
11484 vos_mem_free(wdiRssiMonitorInfo);
11485 vos_mem_free(pRssiMonitorReqParam);
11486 return VOS_STATUS_E_NOMEM;
11487 }
11488
11489 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11490 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11491 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11492
11493 pWdaParams->pWdaContext = pWDA;
11494 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11495 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11496
11497 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
11498 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
11499 pWdaParams);
11500 if(IS_WDI_STATUS_FAILURE(wstatus))
11501 {
11502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11503 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11504 status = CONVERT_WDI2VOS_STATUS(wstatus);
11505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11506 vos_mem_free(pWdaParams->wdaMsgParam);
11507 vos_mem_free(pWdaParams);
11508 }
11509
11510 return status;
11511}
11512
11513
11514/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 * FUNCTION: WDA_WdiIndicationCallback
11516 *
11517 */
11518void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
11519 void* pUserData)
11520{
11521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011522 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011523}
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011524
11525/**
11526 * WDA_ProcessWlanSuspendIndCallback: callback API for WDA_ProcessWlanSuspendInd
11527 * @wdiStatus: wdi status
11528 * @pUserData: suspend params
11529 *
11530 * Return: None
11531 */
11532void WDA_ProcessWlanSuspendIndCallback(WDI_Status wdiStatus, void* pUserData)
11533{
11534 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11535 tSirWlanSuspendParam *pWlanSuspendParam;
11536
11537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11538 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11539
11540 if(NULL == pWdaParams)
11541 {
11542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11543 "%s: pWdaParams received NULL", __func__);
11544 return;
11545 }
11546
11547 pWlanSuspendParam = (tSirWlanSuspendParam *)pWdaParams->wdaMsgParam;
11548 if (pWlanSuspendParam == NULL)
11549 {
11550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11551 "%s: suspend params NULL", __func__);
11552 vos_mem_free(pWdaParams);
11553 return;
11554 }
11555 if (pWlanSuspendParam->wlan_sus_callback)
11556 {
11557 pWlanSuspendParam->wlan_sus_callback(pWlanSuspendParam->context,
11558 CONVERT_WDI2VOS_STATUS(wdiStatus));
11559 }
11560 else
11561 {
11562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11563 "%s: wlan suspend callback is NULL", __func__);
11564 }
11565 if (pWdaParams->wdaMsgParam) {
11566 vos_mem_free(pWdaParams->wdaMsgParam);
11567 pWdaParams->wdaMsgParam = NULL;
11568 }
11569 vos_mem_free(pWdaParams);
11570 return;
11571}
11572
Jeff Johnson295189b2012-06-20 16:38:30 -070011573/*
11574 * FUNCTION: WDA_ProcessWlanSuspendInd
11575 *
11576 */
11577VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
11578 tSirWlanSuspendParam *pWlanSuspendParam)
11579{
11580 WDI_Status wdiStatus;
11581 WDI_SuspendParamsType wdiSuspendParams;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011582 tWDA_ReqParams *pWdaParams;
11583
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011585 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
11587 pWlanSuspendParam->configuredMcstBcstFilterSetting;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011588 wdiSuspendParams.wdiReqStatusCB = WDA_ProcessWlanSuspendIndCallback;
11589
11590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11591 if (!pWdaParams)
11592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11593 "%s memory allocation failed" ,__func__);
11594 pWdaParams->pWdaContext = pWDA;
11595 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11596 wdiSuspendParams.pUserData = pWdaParams;
11597
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011599 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
11600 if(WDI_STATUS_PENDING == wdiStatus)
11601 {
11602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011603 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 }
11605 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11606 {
11607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011608 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11611}
11612
Chet Lanctot186b5732013-03-18 10:26:30 -070011613#ifdef WLAN_FEATURE_11W
11614/*
11615 * FUNCTION: WDA_ProcessExcludeUnecryptInd
11616 *
11617 */
11618VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
11619 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
11620{
11621 WDI_Status wdiStatus;
11622 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
11623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11624 "------> %s ", __func__);
11625
11626 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
11627 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
11628 sizeof(tSirMacAddr));
11629
11630 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
11631 wdiExclUnencryptParams.pUserData = pWDA;
11632
11633 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
11634 if(WDI_STATUS_PENDING == wdiStatus)
11635 {
11636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11637 "Pending received for %s:%d ", __func__, __LINE__ );
11638 }
11639 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11642 "Failure in %s:%d ", __func__, __LINE__ );
11643 }
11644 vos_mem_free(pExclUnencryptParam);
11645 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11646}
11647#endif
11648
Jeff Johnson295189b2012-06-20 16:38:30 -070011649/*
11650 * FUNCTION: WDA_ProcessWlanResumeCallback
11651 *
11652 */
11653void WDA_ProcessWlanResumeCallback(
11654 WDI_SuspendResumeRspParamsType *resumeRspParams,
11655 void* pUserData)
11656{
11657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011659 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011660 if(NULL == pWdaParams)
11661 {
11662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011663 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 VOS_ASSERT(0) ;
11665 return ;
11666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
11668 {
11669 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011670 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11673 vos_mem_free(pWdaParams->wdaMsgParam);
11674 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 return ;
11676}
Jeff Johnson295189b2012-06-20 16:38:30 -070011677/*
11678 * FUNCTION: WDA_ProcessWlanResumeReq
11679 *
11680 */
11681VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11682 tSirWlanResumeParam *pWlanResumeParam)
11683{
11684 WDI_Status wdiStatus;
11685 WDI_ResumeParamsType *wdiResumeParams =
11686 (WDI_ResumeParamsType *)vos_mem_malloc(
11687 sizeof(WDI_ResumeParamsType) ) ;
11688 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011691 if(NULL == wdiResumeParams)
11692 {
11693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 VOS_ASSERT(0);
11696 return VOS_STATUS_E_NOMEM;
11697 }
11698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11699 if(NULL == pWdaParams)
11700 {
11701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 VOS_ASSERT(0);
11704 vos_mem_free(wdiResumeParams);
11705 return VOS_STATUS_E_NOMEM;
11706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011707 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11708 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 wdiResumeParams->wdiReqStatusCB = NULL;
11711 pWdaParams->wdaMsgParam = pWlanResumeParam;
11712 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11713 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11715 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11716 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11718 {
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11720 "Failure in Host Resume REQ WDI API, free all the memory " );
11721 VOS_ASSERT(0);
11722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11723 vos_mem_free(pWdaParams->wdaMsgParam);
11724 vos_mem_free(pWdaParams);
11725 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11727}
11728
Jeff Johnson295189b2012-06-20 16:38:30 -070011729/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011730 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 *
11732 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011733void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011734{
11735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011737 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 if(NULL == pWdaParams)
11739 {
11740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011741 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011742 VOS_ASSERT(0) ;
11743 return ;
11744 }
11745
11746 vos_mem_free(pWdaParams->wdaMsgParam) ;
11747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11748 vos_mem_free(pWdaParams) ;
11749 /*
11750 * No respone required for SetBeaconFilter req so just free the request
11751 * param here
11752 */
11753
Jeff Johnson295189b2012-06-20 16:38:30 -070011754 return ;
11755}
Jeff Johnson295189b2012-06-20 16:38:30 -070011756/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011757 * FUNCTION: WDA_SetBeaconFilterReqCallback
11758 * Free memory.
11759 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11760 */
11761void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11762{
11763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11764
11765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11766 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11767
11768 if(NULL == pWdaParams)
11769 {
11770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11771 "%s: pWdaParams received NULL", __func__);
11772 VOS_ASSERT(0);
11773 return;
11774 }
11775
11776 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11777 {
11778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11779 vos_mem_free(pWdaParams->wdaMsgParam);
11780 vos_mem_free(pWdaParams);
11781 }
11782
11783 return;
11784}
11785/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 * FUNCTION: WDA_SetBeaconFilterReq
11787 * Request to WDI to send the beacon filtering related information.
11788 */
11789VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11790 tBeaconFilterMsg* pBeaconFilterInfo)
11791{
11792 WDI_Status status = WDI_STATUS_SUCCESS;
11793 tANI_U8 *dstPtr, *srcPtr;
11794 tANI_U8 filterLength;
11795 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11796 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11797 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11798 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011800 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 if(NULL == wdiBeaconFilterInfo)
11802 {
11803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011804 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 VOS_ASSERT(0);
11806 return VOS_STATUS_E_NOMEM;
11807 }
11808 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11809 if(NULL == pWdaParams)
11810 {
11811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 VOS_ASSERT(0);
11814 vos_mem_free(wdiBeaconFilterInfo);
11815 return VOS_STATUS_E_NOMEM;
11816 }
Abhishek Singhdfe0f742017-01-03 11:26:38 +053011817 vos_mem_zero(wdiBeaconFilterInfo, sizeof(WDI_BeaconFilterReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -070011818 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11819 pBeaconFilterInfo->beaconInterval;
11820 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11821 pBeaconFilterInfo->capabilityInfo;
11822 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11823 pBeaconFilterInfo->capabilityMask;
11824 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011825
11826 //Fill the BssIdx
11827 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11828
Jeff Johnson295189b2012-06-20 16:38:30 -070011829 //Fill structure with info contained in the beaconFilterTable
11830 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11831 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11832 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11833 if(WDI_BEACON_FILTER_LEN < filterLength)
11834 {
11835 filterLength = WDI_BEACON_FILTER_LEN;
11836 }
11837 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011838 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11839 wdiBeaconFilterInfo->pUserData = pWdaParams;
11840
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 /* Store param pointer as passed in by caller */
11842 /* store Params pass it to WDI */
11843 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11844 pWdaParams->pWdaContext = pWDA;
11845 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11846
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011848 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 if(IS_WDI_STATUS_FAILURE(status))
11850 {
11851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11852 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11853 vos_mem_free(pWdaParams->wdaMsgParam) ;
11854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11855 vos_mem_free(pWdaParams) ;
11856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 return CONVERT_WDI2VOS_STATUS(status) ;
11858}
Jeff Johnson295189b2012-06-20 16:38:30 -070011859/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011860 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 *
11862 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011863void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011864{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11866
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011868 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011869
11870 if(NULL == pWdaParams)
11871 {
11872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011873 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011874 VOS_ASSERT(0) ;
11875 return ;
11876 }
11877
11878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11879 vos_mem_free(pWdaParams->wdaMsgParam);
11880 vos_mem_free(pWdaParams);
11881
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 //print a msg, nothing else to do
11883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011884 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011885 return ;
11886}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011887/*
11888 * FUNCTION: WDA_RemBeaconFilterReqCallback
11889 * Free memory.
11890 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11891 */
11892void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11893{
11894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11895
11896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11897 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11898
11899 if(NULL == pWdaParams)
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11902 "%s: pWdaParams received NULL", __func__);
11903 VOS_ASSERT(0);
11904 return;
11905 }
11906
11907 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11908 {
11909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11910 vos_mem_free(pWdaParams->wdaMsgParam);
11911 vos_mem_free(pWdaParams);
11912 }
11913
11914 return;
11915}
Jeff Johnson295189b2012-06-20 16:38:30 -070011916 // TODO: PE does not have this feature for now implemented,
11917 // but the support for removing beacon filter exists between
11918 // HAL and FW. This function can be called whenever PE defines
11919 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011920/*
11921 * FUNCTION: WDA_RemBeaconFilterReq
11922 * Request to WDI to send the removal of beacon filtering related information.
11923 */
11924VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11925 tRemBeaconFilterMsg* pBeaconFilterInfo)
11926{
11927 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011928 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11930 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11931 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011932 tWDA_ReqParams *pWdaParams ;
11933
Jeff Johnson295189b2012-06-20 16:38:30 -070011934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011935 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 if(NULL == wdiBeaconFilterInfo)
11937 {
11938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 VOS_ASSERT(0);
11941 return VOS_STATUS_E_NOMEM;
11942 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11944 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011945 {
11946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011949 vos_mem_free(wdiBeaconFilterInfo);
11950 vos_mem_free(pBeaconFilterInfo);
11951 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011953
11954 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11955 pBeaconFilterInfo->ucIeCount;
11956 //Fill structure with info contained in the ucRemIeId
11957 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11958 pBeaconFilterInfo->ucRemIeId,
11959 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11960 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11961 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011962
11963 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011964 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011966 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11967
11968 pWdaParams->pWdaContext = pWDA;
11969
Jeff Johnson43971f52012-07-17 12:26:56 -070011970 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011971 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011972 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 {
11974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11975 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011976 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11978 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011979 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011981 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011982}
Jeff Johnson295189b2012-06-20 16:38:30 -070011983/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011984 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011985 *
11986 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011987void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011988{
11989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011991 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011992 if(NULL == pWdaParams)
11993 {
11994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011995 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011996 VOS_ASSERT(0) ;
11997 return ;
11998 }
11999
12000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12001 vos_mem_free(pWdaParams) ;
12002
Jeff Johnson295189b2012-06-20 16:38:30 -070012003 return ;
12004}
Jeff Johnson295189b2012-06-20 16:38:30 -070012005/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012006 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
12007 * Free memory.
12008 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
12009 */
12010void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
12011{
12012 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12013
12014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12015 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12016
12017 if(NULL == pWdaParams)
12018 {
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12020 "%s: pWdaParams received NULL", __func__);
12021 VOS_ASSERT(0);
12022 return;
12023 }
12024
12025 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12026 {
12027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12028 vos_mem_free(pWdaParams);
12029 }
12030
12031 return;
12032}
12033/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 * FUNCTION: WDA_SetRSSIThresholdsReq
12035 * Request to WDI to set the RSSI thresholds (sta mode).
12036 */
12037VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
12038{
12039 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012040 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012041 tWDA_CbContext *pWDA = NULL ;
12042 v_PVOID_t pVosContext = NULL;
12043 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
12044 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
12045 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
12046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012048 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 if(NULL == wdiRSSIThresholdsInfo)
12050 {
12051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012053 VOS_ASSERT(0);
12054 return VOS_STATUS_E_NOMEM;
12055 }
12056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12057 if(NULL == pWdaParams)
12058 {
12059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012061 VOS_ASSERT(0);
12062 vos_mem_free(wdiRSSIThresholdsInfo);
12063 return VOS_STATUS_E_NOMEM;
12064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
12067 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
12068 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
12070 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
12071 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
12073 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
12074 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012075 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
12076 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
12078 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12079
Jeff Johnson295189b2012-06-20 16:38:30 -070012080 /* Store param pointer as passed in by caller */
12081 /* store Params pass it to WDI */
12082 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
12083 pWdaParams->pWdaContext = pWDA;
12084 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070012085 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012086 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012087 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 {
12089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12090 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012091 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12093 vos_mem_free(pWdaParams) ;
12094 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012095 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012096
12097}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012098/*
Yue Madb90ac12013-04-04 13:39:13 -070012099 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012100 *
12101 */
Yue Madb90ac12013-04-04 13:39:13 -070012102void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012103{
12104 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12105
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012107 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 if(NULL == pWdaParams)
12109 {
12110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012111 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012112 VOS_ASSERT(0) ;
12113 return ;
12114 }
12115
12116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12117 vos_mem_free(pWdaParams->wdaMsgParam);
12118 vos_mem_free(pWdaParams) ;
12119
12120 //print a msg, nothing else to do
12121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070012122 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 return ;
12124}
Jeff Johnson295189b2012-06-20 16:38:30 -070012125/*
Yue Madb90ac12013-04-04 13:39:13 -070012126 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070012127 * Free memory.
12128 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070012129 */
12130void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12131{
12132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12133
12134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12135 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12136
12137 if(NULL == pWdaParams)
12138 {
12139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12140 "%s: Invalid pWdaParams pointer", __func__);
12141 VOS_ASSERT(0);
12142 return;
12143 }
12144
12145 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12146 {
12147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12148 vos_mem_free(pWdaParams->wdaMsgParam);
12149 vos_mem_free(pWdaParams);
12150 }
12151
12152 return;
12153}
12154/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012155 * FUNCTION: WDA_ProcessHostOffloadReq
12156 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12157 * to broadcast traffic (sta mode).
12158 */
12159VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
12160 tSirHostOffloadReq *pHostOffloadParams)
12161{
12162 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012163 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
12165 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
12166 sizeof(WDI_HostOffloadReqParamsType)) ;
12167 tWDA_ReqParams *pWdaParams ;
12168
12169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012170 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070012171
12172 if(NULL == wdiHostOffloadInfo)
12173 {
12174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012176 VOS_ASSERT(0);
12177 return VOS_STATUS_E_NOMEM;
12178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12180 if(NULL == pWdaParams)
12181 {
12182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012184 VOS_ASSERT(0);
12185 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012186 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 return VOS_STATUS_E_NOMEM;
12188 }
12189
12190 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
12191 pHostOffloadParams->offloadType;
12192 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
12193 pHostOffloadParams->enableOrDisable;
12194
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012195 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
12196 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
12197
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
12199 {
12200 case SIR_IPV4_ARP_REPLY_OFFLOAD:
12201 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
12202 pHostOffloadParams->params.hostIpv4Addr,
12203 4);
12204 break;
12205 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
12206 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12207 pHostOffloadParams->params.hostIpv6Addr,
12208 16);
12209 break;
12210 case SIR_IPV6_NS_OFFLOAD:
12211 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12212 pHostOffloadParams->params.hostIpv6Addr,
12213 16);
12214
12215#ifdef WLAN_NS_OFFLOAD
12216 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
12217 {
12218 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
12219 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
12220 16);
12221 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
12222 }
12223 else
12224 {
12225 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
12226 }
12227
12228 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
12229 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
12230 16);
12231 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
12232 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
12233 6);
12234
12235 //Only two are supported so let's go through them without a loop
12236 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
12237 {
12238 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
12239 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
12240 16);
12241 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
12242 }
12243 else
12244 {
12245 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
12246 }
12247
12248 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
12249 {
12250 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
12251 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
12252 16);
12253 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
12254 }
12255 else
12256 {
12257 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
12258 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053012259 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
12260 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012261 break;
12262#endif //WLAN_NS_OFFLOAD
12263 default:
12264 {
12265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12266 "No Handling for Offload Type %x in WDA "
12267 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
12268 //WDA_VOS_ASSERT(0) ;
12269 }
12270 }
Yue Madb90ac12013-04-04 13:39:13 -070012271 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
12272 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012273
Jeff Johnson295189b2012-06-20 16:38:30 -070012274 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012275 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012276 /* store Params pass it to WDI */
12277 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
12278 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012279
Jeff Johnson295189b2012-06-20 16:38:30 -070012280
Jeff Johnson43971f52012-07-17 12:26:56 -070012281 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070012282 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012283
Jeff Johnson43971f52012-07-17 12:26:56 -070012284 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053012286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053012287 "Failure in host offload REQ WDI API, free all the memory %d",
12288 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070012289 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12291 vos_mem_free(pWdaParams->wdaMsgParam);
12292 vos_mem_free(pWdaParams) ;
12293 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012294 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012295
12296}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012297/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012298 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 *
12300 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012301void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012302{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12304
Jeff Johnson295189b2012-06-20 16:38:30 -070012305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012306 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012307
12308 if(NULL == pWdaParams)
12309 {
12310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012311 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012312 VOS_ASSERT(0) ;
12313 return ;
12314 }
12315
12316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12317 vos_mem_free(pWdaParams->wdaMsgParam);
12318 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012319
Jeff Johnson295189b2012-06-20 16:38:30 -070012320 //print a msg, nothing else to do
12321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012322 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012323 return ;
12324}
Jeff Johnson295189b2012-06-20 16:38:30 -070012325/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012326 * FUNCTION: WDA_KeepAliveReqCallback
12327 * Free memory.
12328 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
12329 */
12330void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
12331{
12332 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12333
12334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12335 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12336
12337 if(NULL == pWdaParams)
12338 {
12339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12340 "%s: pWdaParams received NULL", __func__);
12341 VOS_ASSERT(0);
12342 return;
12343 }
12344
12345 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12346 {
12347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12348 vos_mem_free(pWdaParams->wdaMsgParam);
12349 vos_mem_free(pWdaParams);
12350 }
12351
12352 return;
12353}
12354/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012355 * FUNCTION: WDA_ProcessKeepAliveReq
12356 * Request to WDI to send Keep Alive packets to minimize unnecessary host
12357 * wakeup due to broadcast traffic (sta mode).
12358 */
12359VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
12360 tSirKeepAliveReq *pKeepAliveParams)
12361{
12362 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012363 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
12365 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
12366 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012367 tWDA_ReqParams *pWdaParams;
12368
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 if(NULL == wdiKeepAliveInfo)
12372 {
12373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012375 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012376 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012377 return VOS_STATUS_E_NOMEM;
12378 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012379
12380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12381 if(NULL == pWdaParams)
12382 {
12383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012384 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012385 VOS_ASSERT(0);
12386 vos_mem_free(wdiKeepAliveInfo);
12387 vos_mem_free(pKeepAliveParams);
12388 return VOS_STATUS_E_NOMEM;
12389 }
12390
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
12392 pKeepAliveParams->packetType;
12393 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
12394 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012395
12396 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
12397 pKeepAliveParams->bssId,
12398 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012399
12400 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
12401 {
12402 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12403 pKeepAliveParams->hostIpv4Addr,
12404 SIR_IPV4_ADDR_LEN);
12405 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12406 pKeepAliveParams->destIpv4Addr,
12407 SIR_IPV4_ADDR_LEN);
12408 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12409 pKeepAliveParams->destMacAddr,
12410 SIR_MAC_ADDR_LEN);
12411 }
12412 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
12413 {
12414 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12415 SIR_IPV4_ADDR_LEN,
12416 0);
12417 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12418 SIR_IPV4_ADDR_LEN,
12419 0);
12420 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12421 SIR_MAC_ADDR_LEN,
12422 0);
12423 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012424 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
12425 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012426
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012428 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012429 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012430 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
12431 pWdaParams->pWdaContext = pWDA;
12432
Jeff Johnson295189b2012-06-20 16:38:30 -070012433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
12434 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
12435 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
12436 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
12437 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
12438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
12439 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
12440 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
12441 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
12442 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
12443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12444 "WDA DMAC : %d:%d:%d:%d:%d:%d",
12445 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
12446 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
12447 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
12448 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
12449 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
12450 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
12451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12452 "TimePeriod %d PacketType %d",
12453 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
12454 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070012455 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012456 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012457
Jeff Johnson43971f52012-07-17 12:26:56 -070012458 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012459 {
12460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12461 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012462 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12464 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012465 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012466 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012467 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012468
12469}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012470/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012471 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012472 *
12473 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012474void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012475 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
12476 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012477{
12478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012480 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 if(NULL == pWdaParams)
12482 {
12483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012484 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012485 VOS_ASSERT(0) ;
12486 return ;
12487 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12489 vos_mem_free(pWdaParams->wdaMsgParam);
12490 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012491 return ;
12492}
Jeff Johnson295189b2012-06-20 16:38:30 -070012493/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012494 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
12495 * Free memory.
12496 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
12497 */
12498void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12499{
12500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12501
12502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12503 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12504
12505 if(NULL == pWdaParams)
12506 {
12507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12508 "%s: pWdaParams received NULL", __func__);
12509 VOS_ASSERT(0);
12510 return;
12511 }
12512
12513 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12514 {
12515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12516 vos_mem_free(pWdaParams->wdaMsgParam);
12517 vos_mem_free(pWdaParams);
12518 }
12519
12520 return;
12521}
12522
12523/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012524 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
12525 * Request to WDI to add WOWL Bcast pattern
12526 */
12527VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
12528 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
12529{
12530 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012531 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
12533 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
12534 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
12535 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 if(NULL == wdiWowlAddBcPtrnInfo)
12539 {
12540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012542 VOS_ASSERT(0);
12543 return VOS_STATUS_E_NOMEM;
12544 }
12545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12546 if(NULL == pWdaParams)
12547 {
12548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012550 VOS_ASSERT(0);
12551 vos_mem_free(wdiWowlAddBcPtrnInfo);
12552 return VOS_STATUS_E_NOMEM;
12553 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
12555 pWowlAddBcPtrnParams->ucPatternId;
12556 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
12557 pWowlAddBcPtrnParams->ucPatternByteOffset;
12558 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
12559 pWowlAddBcPtrnParams->ucPatternMaskSize;
12560 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
12561 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
12563 {
12564 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12565 pWowlAddBcPtrnParams->ucPattern,
12566 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
12567 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12568 pWowlAddBcPtrnParams->ucPatternMask,
12569 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12570 }
12571 else
12572 {
12573 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12574 pWowlAddBcPtrnParams->ucPattern,
12575 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12576 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12577 pWowlAddBcPtrnParams->ucPatternMask,
12578 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12579
12580 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
12581 pWowlAddBcPtrnParams->ucPatternExt,
12582 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12583 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
12584 pWowlAddBcPtrnParams->ucPatternMaskExt,
12585 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12586 }
12587
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012588 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
12589 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
12590
Yue Ma7f44bbe2013-04-12 11:47:39 -070012591 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
12592 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012593 /* Store param pointer as passed in by caller */
12594 /* store Params pass it to WDI */
12595 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
12596 pWdaParams->pWdaContext = pWDA;
12597 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012598 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012599 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012600 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012601 {
12602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12603 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012604 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012605 vos_mem_free(pWdaParams->wdaMsgParam) ;
12606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12607 vos_mem_free(pWdaParams) ;
12608 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012609 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012610
12611}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012612/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012613 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012614 *
12615 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012616void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012617 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
12618 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012619{
12620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012622 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012623 if(NULL == pWdaParams)
12624 {
12625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012626 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012627 VOS_ASSERT(0) ;
12628 return ;
12629 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12631 vos_mem_free(pWdaParams->wdaMsgParam);
12632 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012633 return ;
12634}
Jeff Johnson295189b2012-06-20 16:38:30 -070012635/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012636 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
12637 * Free memory.
12638 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
12639 */
12640void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12641{
12642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12643
12644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12645 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12646
12647 if(NULL == pWdaParams)
12648 {
12649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12650 "%s: pWdaParams received NULL", __func__);
12651 VOS_ASSERT(0);
12652 return;
12653 }
12654
12655 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12656 {
12657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12658 vos_mem_free(pWdaParams->wdaMsgParam);
12659 vos_mem_free(pWdaParams);
12660 }
12661
12662 return;
12663}
12664/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
12666 * Request to WDI to delete WOWL Bcast pattern
12667 */
12668VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
12669 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
12670{
12671 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012672 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
12674 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
12675 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
12676 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012678 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 if(NULL == wdiWowlDelBcPtrnInfo)
12680 {
12681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 VOS_ASSERT(0);
12684 return VOS_STATUS_E_NOMEM;
12685 }
12686 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12687 if(NULL == pWdaParams)
12688 {
12689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012690 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 VOS_ASSERT(0);
12692 vos_mem_free(wdiWowlDelBcPtrnInfo);
12693 return VOS_STATUS_E_NOMEM;
12694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012695 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12696 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012697
12698 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12699 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12700
Yue Ma7f44bbe2013-04-12 11:47:39 -070012701 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12702 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 /* Store param pointer as passed in by caller */
12704 /* store Params pass it to WDI */
12705 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12706 pWdaParams->pWdaContext = pWDA;
12707 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012708 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012709 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012710 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012711 {
12712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12713 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012714 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 vos_mem_free(pWdaParams->wdaMsgParam) ;
12716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12717 vos_mem_free(pWdaParams) ;
12718 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012719 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012720
12721}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012722/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012723 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012724 *
12725 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012726void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012727{
12728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012729 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012730 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012733 if(NULL == pWdaParams)
12734 {
12735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012736 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012737 VOS_ASSERT(0) ;
12738 return ;
12739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012740 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012741 if (NULL == pWDA)
12742 {
12743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12744 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012745
12746 if(pWdaParams->wdaWdiApiMsgParam)
12747 {
12748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12749 }
12750 vos_mem_free(pWdaParams);
12751
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012752 VOS_ASSERT(0);
12753 return ;
12754 }
12755
Jeff Johnson295189b2012-06-20 16:38:30 -070012756 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12757
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012758 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12759
Jeff Johnson295189b2012-06-20 16:38:30 -070012760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12761 vos_mem_free(pWdaParams) ;
12762
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012763 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012764 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012765 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012766 return ;
12767}
Jeff Johnson295189b2012-06-20 16:38:30 -070012768/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012769 * FUNCTION: WDA_WowlEnterReqCallback
12770 * Free memory and send WOWL Enter RSP back to PE.
12771 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12772 */
12773void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12774{
12775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012776 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012777 tSirHalWowlEnterParams *pWowlEnterParams;
12778
12779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12780 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12781
12782 if(NULL == pWdaParams)
12783 {
12784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12785 "%s: pWdaParams received NULL", __func__);
12786 VOS_ASSERT(0);
12787 return;
12788 }
12789
12790 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012791 if (NULL == pWDA)
12792 {
12793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12794 "%s:pWDA is NULL", __func__);
12795 VOS_ASSERT(0);
12796 return ;
12797 }
12798
Yue Ma7f44bbe2013-04-12 11:47:39 -070012799 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12800 pWowlEnterParams->status = wdiStatus;
12801
12802 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12803 {
12804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12805 vos_mem_free(pWdaParams);
12806 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12807 }
12808
12809 return;
12810}
12811/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012812 * FUNCTION: WDA_ProcessWowlEnterReq
12813 * Request to WDI to enter WOWL
12814 */
12815VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12816 tSirHalWowlEnterParams *pWowlEnterParams)
12817{
12818 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012819 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012820 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12821 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12822 sizeof(WDI_WowlEnterReqParamsType)) ;
12823 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012826 if(NULL == wdiWowlEnterInfo)
12827 {
12828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012830 VOS_ASSERT(0);
12831 return VOS_STATUS_E_NOMEM;
12832 }
12833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12834 if(NULL == pWdaParams)
12835 {
12836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 VOS_ASSERT(0);
12839 vos_mem_free(wdiWowlEnterInfo);
12840 return VOS_STATUS_E_NOMEM;
12841 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012842
12843 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12844
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12846 pWowlEnterParams->magicPtrn,
12847 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012848 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12849 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012850 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12851 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012852 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12853 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12855 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12857 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12859 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012860 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12861 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12863 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012864#ifdef WLAN_WAKEUP_EVENTS
12865 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12866 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12867
12868 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12869 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12870
12871 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12872 pWowlEnterParams->ucWowNetScanOffloadMatch;
12873
12874 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12875 pWowlEnterParams->ucWowGTKRekeyError;
12876
12877 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12878 pWowlEnterParams->ucWoWBSSConnLoss;
12879#endif // WLAN_WAKEUP_EVENTS
12880
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012881 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12882 pWowlEnterParams->bssIdx;
12883
Yue Ma7f44bbe2013-04-12 11:47:39 -070012884 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12885 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 /* Store param pointer as passed in by caller */
12887 /* store Params pass it to WDI */
12888 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12889 pWdaParams->pWdaContext = pWDA;
12890 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012891 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012892 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012893 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012894 {
12895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12896 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012897 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 vos_mem_free(pWdaParams->wdaMsgParam) ;
12899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12900 vos_mem_free(pWdaParams) ;
12901 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012902 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012903
12904}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012905/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012906 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012907 *
12908 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012909void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012910{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012912 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012913 tSirHalWowlExitParams *pWowlExitParams;
12914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012915 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012916 if(NULL == pWdaParams)
12917 {
12918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012919 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012920 VOS_ASSERT(0) ;
12921 return ;
12922 }
12923 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012924 if (NULL == pWDA)
12925 {
12926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12927 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012928
12929 if(pWdaParams->wdaWdiApiMsgParam)
12930 {
12931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12932 }
12933 vos_mem_free(pWdaParams);
12934
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012935 VOS_ASSERT(0);
12936 return ;
12937 }
12938
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012939 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12940
12941 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012942 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012943
12944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12945 vos_mem_free(pWdaParams) ;
12946
Jeff Johnson295189b2012-06-20 16:38:30 -070012947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012948 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012949 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012950 return ;
12951}
Jeff Johnson295189b2012-06-20 16:38:30 -070012952/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012953 * FUNCTION: WDA_WowlExitReqCallback
12954 * Free memory and send WOWL Exit RSP back to PE.
12955 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12956 */
12957void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12958{
12959 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012960 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012961 tSirHalWowlExitParams *pWowlExitParams;
12962
12963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12964 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12965
12966 if(NULL == pWdaParams)
12967 {
12968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12969 "%s: pWdaParams received NULL", __func__);
12970 VOS_ASSERT(0);
12971 return;
12972 }
12973
12974 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012975 if (NULL == pWDA)
12976 {
12977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12978 "%s:pWDA is NULL", __func__);
12979 VOS_ASSERT(0);
12980 return ;
12981 }
12982
Yue Ma7f44bbe2013-04-12 11:47:39 -070012983 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12984 pWowlExitParams->status = wdiStatus;
12985
12986 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12987 {
12988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12989 vos_mem_free(pWdaParams);
12990 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12991 }
12992
12993 return;
12994}
12995/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 * FUNCTION: WDA_ProcessWowlExitReq
12997 * Request to WDI to add WOWL Bcast pattern
12998 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012999VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
13000 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013001{
13002 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013003 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013004 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
13005 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
13006 sizeof(WDI_WowlExitReqParamsType)) ;
13007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013009 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013010 if(NULL == wdiWowlExitInfo)
13011 {
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013013 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013014 VOS_ASSERT(0);
13015 return VOS_STATUS_E_NOMEM;
13016 }
13017 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13018 if(NULL == pWdaParams)
13019 {
13020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013021 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013022 VOS_ASSERT(0);
13023 vos_mem_free(wdiWowlExitInfo);
13024 return VOS_STATUS_E_NOMEM;
13025 }
13026
13027 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
13028 pWowlExitParams->bssIdx;
13029
Yue Ma7f44bbe2013-04-12 11:47:39 -070013030 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
13031 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013032
13033 /* Store param pointer as passed in by caller */
13034 /* store Params pass it to WDI */
13035 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
13036 pWdaParams->pWdaContext = pWDA;
13037 pWdaParams->wdaMsgParam = pWowlExitParams;
13038
13039 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013040 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013041
Jeff Johnson43971f52012-07-17 12:26:56 -070013042 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 {
13044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13045 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013046 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13048 vos_mem_free(pWdaParams->wdaMsgParam);
13049 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013050 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013051 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013052}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013053/*
13054 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
13055 * Request to WDI to determine whether a given station is capable of
13056 * using HW-based frame translation
13057 */
13058v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
13059 tANI_U8 staIdx)
13060{
13061 return WDI_IsHwFrameTxTranslationCapable(staIdx);
13062}
Katya Nigam6201c3e2014-05-27 17:51:42 +053013063
13064/*
13065 * FUNCTION: WDA_IsSelfSTA
13066 * Request to WDI to determine whether a given STAID is self station
13067 * index.
13068 */
13069v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
13070{
13071
13072 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13073
Girish Gowli05cf44e2014-06-12 21:53:37 +053013074 if (NULL != pWDA)
13075 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
13076 else
13077 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053013078}
Jeff Johnson295189b2012-06-20 16:38:30 -070013079/*
13080 * FUNCTION: WDA_NvDownloadReqCallback
13081 * send NV Download RSP back to PE
13082 */
13083void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
13084 void* pUserData)
13085{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013086
13087 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013088 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013089
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013091 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013092
13093 if(NULL == pWdaParams)
13094 {
13095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013096 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013097 VOS_ASSERT(0) ;
13098 return ;
13099 }
13100
13101 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013102 if (NULL == pWDA)
13103 {
13104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13105 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053013106
13107 if(pWdaParams->wdaWdiApiMsgParam)
13108 {
13109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13110 }
13111 vos_mem_free(pWdaParams);
13112
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013113 VOS_ASSERT(0);
13114 return ;
13115 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013116
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13119 vos_mem_free(pWdaParams);
13120
Jeff Johnson295189b2012-06-20 16:38:30 -070013121 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013122 return ;
13123}
Jeff Johnson295189b2012-06-20 16:38:30 -070013124/*
13125 * FUNCTION: WDA_ProcessNvDownloadReq
13126 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
13127 */
13128VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
13129{
13130 /* Initialize the local Variables*/
13131 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13132 v_VOID_t *pNvBuffer=NULL;
13133 v_SIZE_t bufferSize = 0;
13134 WDI_Status status = WDI_STATUS_E_FAILURE;
13135 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013136 tWDA_ReqParams *pWdaParams ;
13137
Jeff Johnson295189b2012-06-20 16:38:30 -070013138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013139 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013140 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013141 {
13142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013143 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013144 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 return VOS_STATUS_E_FAILURE;
13146 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013147
Jeff Johnson295189b2012-06-20 16:38:30 -070013148 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070013149 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
13150
Jeff Johnson295189b2012-06-20 16:38:30 -070013151 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
13152 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 if(NULL == wdiNvDownloadReqParam)
13154 {
13155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 VOS_ASSERT(0);
13158 return VOS_STATUS_E_NOMEM;
13159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013160 /* Copy Params to wdiNvDownloadReqParam*/
13161 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
13162 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013163
13164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13165 if(NULL == pWdaParams)
13166 {
13167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013168 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013169 VOS_ASSERT(0);
13170 vos_mem_free(wdiNvDownloadReqParam);
13171 return VOS_STATUS_E_NOMEM;
13172 }
13173
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013175 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
13176 pWdaParams->wdaMsgParam = NULL;
13177 pWdaParams->pWdaContext = pWDA;
13178
13179
Jeff Johnson295189b2012-06-20 16:38:30 -070013180 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013181
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013183 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
13184
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 if(IS_WDI_STATUS_FAILURE(status))
13186 {
13187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13188 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13190 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013193}
13194/*
13195 * FUNCTION: WDA_FlushAcReqCallback
13196 * send Flush AC RSP back to TL
13197 */
13198void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
13199{
13200 vos_msg_t wdaMsg = {0} ;
13201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13202 tFlushACReq *pFlushACReqParams;
13203 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 if(NULL == pWdaParams)
13207 {
13208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 VOS_ASSERT(0) ;
13211 return ;
13212 }
13213
13214 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
13215 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
13216 if(NULL == pFlushACRspParams)
13217 {
13218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013220 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013221 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013222 return ;
13223 }
13224 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
13225 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
13226 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
13227 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
13228 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070013229 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013230 vos_mem_free(pWdaParams->wdaMsgParam) ;
13231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13232 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
13234 wdaMsg.bodyptr = (void *)pFlushACRspParams;
13235 // POST message to TL
13236 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
13237
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 return ;
13239}
Jeff Johnson295189b2012-06-20 16:38:30 -070013240/*
13241 * FUNCTION: WDA_ProcessFlushAcReq
13242 * Request to WDI to Update the DELBA REQ params.
13243 */
13244VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
13245 tFlushACReq *pFlushAcReqParams)
13246{
13247 WDI_Status status = WDI_STATUS_SUCCESS ;
13248 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
13249 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
13250 sizeof(WDI_FlushAcReqParamsType)) ;
13251 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013252 if(NULL == wdiFlushAcReqParam)
13253 {
13254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013256 VOS_ASSERT(0);
13257 return VOS_STATUS_E_NOMEM;
13258 }
13259 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13260 if(NULL == pWdaParams)
13261 {
13262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013264 VOS_ASSERT(0);
13265 vos_mem_free(wdiFlushAcReqParam);
13266 return VOS_STATUS_E_NOMEM;
13267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013269 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013270 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
13271 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
13272 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
13273 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 /* Store Flush AC pointer, as this will be used for response */
13275 /* store Params pass it to WDI */
13276 pWdaParams->pWdaContext = pWDA;
13277 pWdaParams->wdaMsgParam = pFlushAcReqParams;
13278 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013279 status = WDI_FlushAcReq(wdiFlushAcReqParam,
13280 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013281 if(IS_WDI_STATUS_FAILURE(status))
13282 {
13283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13284 "Failure in Flush AC REQ Params WDI API, free all the memory " );
13285 vos_mem_free(pWdaParams->wdaMsgParam) ;
13286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13287 vos_mem_free(pWdaParams) ;
13288 //TODO: respond to TL with failure
13289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013290 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013291}
Jeff Johnson295189b2012-06-20 16:38:30 -070013292/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013293 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013294 *
13295 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013296void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013297{
13298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013299 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013300 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013301
13302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013303 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 if(NULL == pWdaParams)
13305 {
13306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013307 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 VOS_ASSERT(0) ;
13309 return ;
13310 }
13311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013312 if (NULL == pWDA)
13313 {
13314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13315 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053013316 vos_mem_free(pWdaParams->wdaMsgParam) ;
13317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13318 vos_mem_free(pWdaParams) ;
13319
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013320 VOS_ASSERT(0);
13321 return ;
13322 }
13323
Jeff Johnson295189b2012-06-20 16:38:30 -070013324 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13325 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13326 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13327 {
13328 pWDA->wdaAmpSessionOn = VOS_FALSE;
13329 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 vos_mem_free(pWdaParams->wdaMsgParam) ;
13331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13332 vos_mem_free(pWdaParams) ;
13333 /*
13334 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
13335 * param here
13336 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 return ;
13338}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013339/*
13340 * FUNCTION: WDA_BtAmpEventReqCallback
13341 * Free memory.
13342 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
13343 */
13344void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
13345{
13346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013347 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013348 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013349
Yue Ma7f44bbe2013-04-12 11:47:39 -070013350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13351 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13352
13353 if(NULL == pWdaParams)
13354 {
13355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13356 "%s: pWdaParams received NULL", __func__);
13357 VOS_ASSERT(0);
13358 return;
13359 }
13360
13361 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013362 if (NULL == pWDA)
13363 {
13364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13365 "%s:pWDA is NULL", __func__);
13366 VOS_ASSERT(0);
13367 return ;
13368 }
13369
Yue Ma7f44bbe2013-04-12 11:47:39 -070013370 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13371
13372 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13373 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13374 {
13375 pWDA->wdaAmpSessionOn = VOS_FALSE;
13376 }
13377
13378 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13379 {
13380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13381 vos_mem_free(pWdaParams->wdaMsgParam);
13382 vos_mem_free(pWdaParams);
13383 }
13384
13385 return;
13386}
Jeff Johnson295189b2012-06-20 16:38:30 -070013387/*
13388 * FUNCTION: WDA_ProcessBtAmpEventReq
13389 * Request to WDI to Update with BT AMP events.
13390 */
13391VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
13392 tSmeBtAmpEvent *pBtAmpEventParams)
13393{
13394 WDI_Status status = WDI_STATUS_SUCCESS ;
13395 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
13396 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
13397 sizeof(WDI_BtAmpEventParamsType)) ;
13398 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013400 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013401 if(NULL == wdiBtAmpEventParam)
13402 {
13403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013405 VOS_ASSERT(0);
13406 return VOS_STATUS_E_NOMEM;
13407 }
13408 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13409 if(NULL == pWdaParams)
13410 {
13411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 VOS_ASSERT(0);
13414 vos_mem_free(wdiBtAmpEventParam);
13415 return VOS_STATUS_E_NOMEM;
13416 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
13418 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013419 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
13420 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013421 /* Store BT AMP event pointer, as this will be used for response */
13422 /* store Params pass it to WDI */
13423 pWdaParams->pWdaContext = pWDA;
13424 pWdaParams->wdaMsgParam = pBtAmpEventParams;
13425 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013427 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013428 if(IS_WDI_STATUS_FAILURE(status))
13429 {
13430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13431 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
13432 vos_mem_free(pWdaParams->wdaMsgParam) ;
13433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13434 vos_mem_free(pWdaParams) ;
13435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13437 {
13438 pWDA->wdaAmpSessionOn = VOS_TRUE;
13439 }
13440 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013441}
13442
Jeff Johnson295189b2012-06-20 16:38:30 -070013443/*
13444 * FUNCTION: WDA_FTMCommandReqCallback
13445 * Handle FTM CMD response came from HAL
13446 * Route responce to HDD FTM
13447 */
13448void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
13449 void *usrData)
13450{
13451 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013452 if((NULL == pWDA) || (NULL == ftmCmdRspData))
13453 {
13454 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013455 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 return;
13457 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013458 /* Release Current FTM Command Request */
13459 vos_mem_free(pWDA->wdaFTMCmdReq);
13460 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013461 /* Post FTM Responce to HDD FTM */
13462 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 return;
13464}
Jeff Johnson295189b2012-06-20 16:38:30 -070013465/*
13466 * FUNCTION: WDA_ProcessFTMCommand
13467 * Send FTM command to WDI
13468 */
13469VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
13470 tPttMsgbuffer *pPTTFtmCmd)
13471{
13472 WDI_Status status = WDI_STATUS_SUCCESS;
13473 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013474 ftmCMDReq = (WDI_FTMCommandReqType *)
13475 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
13476 if(NULL == ftmCMDReq)
13477 {
13478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13479 "WDA FTM Command buffer alloc fail");
13480 return VOS_STATUS_E_NOMEM;
13481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
13483 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070013485 /* Send command to WDI */
13486 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 return status;
13488}
Jeff Johnsone7245742012-09-05 17:12:55 -070013489#ifdef FEATURE_OEM_DATA_SUPPORT
13490/*
13491 * FUNCTION: WDA_StartOemDataReqCallback
13492 *
13493 */
13494void WDA_StartOemDataReqCallback(
13495 WDI_oemDataRspParamsType *wdiOemDataRspParams,
13496 void* pUserData)
13497{
13498 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013500 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013501 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013502
Jeff Johnsone7245742012-09-05 17:12:55 -070013503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013504 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013505
13506 if(NULL == pWdaParams)
13507 {
13508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013509 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013510 VOS_ASSERT(0) ;
13511 return ;
13512 }
13513 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
13514
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013515 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070013516 {
13517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013518 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013519 VOS_ASSERT(0);
13520 return ;
13521 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013522
Jeff Johnsone7245742012-09-05 17:12:55 -070013523 /*
13524 * Allocate memory for response params sent to PE
13525 */
13526 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
13527
13528 // Check if memory is allocated for OemdataMeasRsp Params.
13529 if(NULL == pOemDataRspParams)
13530 {
13531 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13532 "OEM DATA WDA callback alloc fail");
13533 VOS_ASSERT(0) ;
13534 return;
13535 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013536
Jeff Johnsone7245742012-09-05 17:12:55 -070013537 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13539 vos_mem_free(pWdaParams->wdaMsgParam);
13540 vos_mem_free(pWdaParams) ;
13541
Jeff Johnsone7245742012-09-05 17:12:55 -070013542 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013543 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070013544 * Also, here success always means that we have atleast one BSSID.
13545 */
13546 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
13547
13548 //enable Tx
13549 status = WDA_ResumeDataTx(pWDA);
13550 if(status != VOS_STATUS_SUCCESS)
13551 {
13552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
13553 }
13554 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
13555 return ;
13556}
13557/*
13558 * FUNCTION: WDA_ProcessStartOemDataReq
13559 * Send Start Oem Data Req to WDI
13560 */
13561VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
13562 tStartOemDataReq *pOemDataReqParams)
13563{
13564 WDI_Status status = WDI_STATUS_SUCCESS;
13565 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013566 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070013567
13568 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
13569
13570 if(NULL == wdiOemDataReqParams)
13571 {
13572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013573 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013574 VOS_ASSERT(0);
13575 return VOS_STATUS_E_NOMEM;
13576 }
13577
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013578 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
13579 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
13580 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
13581 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070013582
13583 wdiOemDataReqParams->wdiReqStatusCB = NULL;
13584
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13586 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070013587 {
13588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013590 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013591 vos_mem_free(pOemDataReqParams);
13592 VOS_ASSERT(0);
13593 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070013594 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013595
Bernald44a1ae2013-01-09 08:30:39 -080013596 pWdaParams->pWdaContext = (void*)pWDA;
13597 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
13598 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013599
13600 status = WDI_StartOemDataReq(wdiOemDataReqParams,
13601 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013602
13603 if(IS_WDI_STATUS_FAILURE(status))
13604 {
13605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13606 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13608 vos_mem_free(pWdaParams->wdaMsgParam);
13609 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013610 }
13611 return CONVERT_WDI2VOS_STATUS(status) ;
13612}
13613#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013614/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013615 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013616 *
13617 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013618void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013619{
13620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013622 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013623 if(NULL == pWdaParams)
13624 {
13625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013626 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013627 VOS_ASSERT(0) ;
13628 return ;
13629 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013630
13631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13632 vos_mem_free(pWdaParams->wdaMsgParam);
13633 vos_mem_free(pWdaParams);
13634
13635 return ;
13636}
13637/*
13638 * FUNCTION: WDA_SetTxPerTrackingReqCallback
13639 * Free memory.
13640 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
13641 */
13642void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
13643{
13644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13645
13646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13647 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13648
13649 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013650 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13652 "%s: pWdaParams received NULL", __func__);
13653 VOS_ASSERT(0);
13654 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013655 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013656
13657 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013658 {
13659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013660 vos_mem_free(pWdaParams->wdaMsgParam);
13661 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013662 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013663
13664 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013665}
Jeff Johnson295189b2012-06-20 16:38:30 -070013666#ifdef WLAN_FEATURE_GTK_OFFLOAD
13667/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013668 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013669 *
13670 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013671void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013672 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013673{
13674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13675
13676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013677 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013678 if(NULL == pWdaParams)
13679 {
13680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13681 "%s: pWdaParams received NULL", __func__);
13682 VOS_ASSERT(0);
13683 return;
13684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013685
Jeff Johnson295189b2012-06-20 16:38:30 -070013686 vos_mem_free(pWdaParams->wdaMsgParam) ;
13687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13688 vos_mem_free(pWdaParams) ;
13689
13690 //print a msg, nothing else to do
13691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013692 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013693
13694 return ;
13695}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013696/*
13697 * FUNCTION: WDA_GTKOffloadReqCallback
13698 * Free memory.
13699 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13700 */
13701void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13702{
13703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013704
Yue Ma7f44bbe2013-04-12 11:47:39 -070013705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13706 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13707
13708 if(NULL == pWdaParams)
13709 {
13710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13711 "%s: pWdaParams received NULL", __func__);
13712 VOS_ASSERT(0);
13713 return;
13714 }
13715
13716 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13717 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013718 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13719 sizeof(WDI_GtkOffloadReqMsg));
13720 vos_mem_zero(pWdaParams->wdaMsgParam,
13721 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13723 vos_mem_free(pWdaParams->wdaMsgParam);
13724 vos_mem_free(pWdaParams);
13725 }
13726
13727 return;
13728}
Jeff Johnson295189b2012-06-20 16:38:30 -070013729/*
13730 * FUNCTION: WDA_ProcessGTKOffloadReq
13731 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13732 * to broadcast traffic (sta mode).
13733 */
13734VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13735 tpSirGtkOffloadParams pGtkOffloadParams)
13736{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013737 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13739 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13740 sizeof(WDI_GtkOffloadReqMsg)) ;
13741 tWDA_ReqParams *pWdaParams ;
13742
13743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013744 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013745
13746 if(NULL == wdiGtkOffloadReqMsg)
13747 {
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 VOS_ASSERT(0);
13751 return VOS_STATUS_E_NOMEM;
13752 }
13753
13754 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13755 if(NULL == pWdaParams)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013759 VOS_ASSERT(0);
13760 vos_mem_free(wdiGtkOffloadReqMsg);
13761 return VOS_STATUS_E_NOMEM;
13762 }
13763
13764 //
13765 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13766 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013767
13768 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013769 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013770
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13772 // Copy KCK
13773 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13774 // Copy KEK
13775 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13776 // Copy KeyReplayCounter
13777 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13778 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13779
Yue Ma7f44bbe2013-04-12 11:47:39 -070013780 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13781 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013782
Jeff Johnson295189b2012-06-20 16:38:30 -070013783
13784 /* Store Params pass it to WDI */
13785 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13786 pWdaParams->pWdaContext = pWDA;
13787 /* Store param pointer as passed in by caller */
13788 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13789
Yue Ma7f44bbe2013-04-12 11:47:39 -070013790 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013791
13792 if(IS_WDI_STATUS_FAILURE(status))
13793 {
13794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13795 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013796 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13797 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13799 vos_mem_free(pWdaParams->wdaMsgParam);
13800 vos_mem_free(pWdaParams);
13801 }
13802
13803 return CONVERT_WDI2VOS_STATUS(status) ;
13804}
13805
13806/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013807 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013808 *
13809 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013810void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013811 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013812{
13813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13814 tWDA_CbContext *pWDA;
13815 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013816 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013817 vos_msg_t vosMsg;
13818
13819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013820 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013821
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013822 if(NULL == pWdaParams)
13823 {
13824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13825 "%s: pWdaParams received NULL", __func__);
13826 VOS_ASSERT(0);
13827 return;
13828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013829
Nirav Shah374de6e2014-02-13 16:40:01 +053013830 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13831 if(NULL == pGtkOffloadGetInfoRsp)
13832 {
13833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13834 "%s: vos_mem_malloc failed ", __func__);
13835 VOS_ASSERT(0);
13836 return;
13837 }
13838
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13840 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13841
13842 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13843 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13844
13845 /* Message Header */
13846 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013847 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013848
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013849 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13850 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13851 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13852 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13853 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013854
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013855 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13856 pwdiGtkOffloadGetInfoRsparams->bssId,
13857 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013858 /* VOS message wrapper */
13859 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13860 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13861 vosMsg.bodyval = 0;
13862
13863 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13864 {
13865 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013866 vos_mem_zero(pGtkOffloadGetInfoRsp,
13867 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13869 }
13870
13871 vos_mem_free(pWdaParams->wdaMsgParam) ;
13872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13873 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013874
13875 return;
13876}
13877/*
13878 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13879 * Free memory and send RSP back to SME.
13880 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13881 */
13882void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13883{
13884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13885 vos_msg_t vosMsg;
13886
13887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13888 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13889
13890 if(NULL == pWdaParams)
13891 {
13892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13893 "%s: pWdaParams received NULL", __func__);
13894 VOS_ASSERT(0);
13895 return;
13896 }
13897
13898 /* VOS message wrapper */
13899 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13900 vosMsg.bodyptr = NULL;
13901 vosMsg.bodyval = 0;
13902
13903 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13904 {
13905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13906 vos_mem_free(pWdaParams->wdaMsgParam);
13907 vos_mem_free(pWdaParams);
13908 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13909 }
13910
13911 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013912}
13913#endif
13914
13915/*
13916 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13917 * Request to WDI to set Tx Per Tracking configurations
13918 */
13919VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13920{
13921 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013922 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013923 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13924 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13925 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13926 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013928 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013929 if(NULL == pwdiSetTxPerTrackingReqParams)
13930 {
13931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013932 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013933 vos_mem_free(pTxPerTrackingParams);
13934 VOS_ASSERT(0);
13935 return VOS_STATUS_E_NOMEM;
13936 }
13937 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13938 if(NULL == pWdaParams)
13939 {
13940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013942 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13943 vos_mem_free(pTxPerTrackingParams);
13944 VOS_ASSERT(0);
13945 return VOS_STATUS_E_NOMEM;
13946 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013947 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13948 pTxPerTrackingParams->ucTxPerTrackingEnable;
13949 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13950 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13951 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13952 pTxPerTrackingParams->ucTxPerTrackingRatio;
13953 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13954 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013955 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13956 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013957 /* Store param pointer as passed in by caller */
13958 /* store Params pass it to WDI
13959 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13960 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13961 pWdaParams->pWdaContext = pWDA;
13962 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013963 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013964 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013965 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013966 {
13967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13968 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013969 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 vos_mem_free(pWdaParams->wdaMsgParam) ;
13971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13972 vos_mem_free(pWdaParams) ;
13973 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013974 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013975
13976}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013977/*
13978 * FUNCTION: WDA_HALDumpCmdCallback
13979 * Send the VOS complete .
13980 */
13981void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13982 void* pUserData)
13983{
13984 tANI_U8 *buffer = NULL;
13985 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013986 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013987 if(NULL == pWdaParams)
13988 {
13989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013990 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013991 VOS_ASSERT(0) ;
13992 return ;
13993 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013994
13995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13996 "%s: WDA HAL DUMP Resp Received",__func__);
13997
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 pWDA = pWdaParams->pWdaContext;
13999 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014000 if(wdiRspParams->usBufferLen > 0)
14001 {
14002 /*Copy the Resp data to UMAC supplied buffer*/
14003 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
14004 }
Siddharth Bhal68115602015-01-18 20:44:55 +053014005
14006 if (!pWdaParams->wdaHALDumpAsync)
14007 {/* Indicate VOSS about the start complete */
14008 vos_WDAComplete_cback(pWDA->pVosContext);
14009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14011 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014012 return ;
14013}
14014
Jeff Johnson295189b2012-06-20 16:38:30 -070014015/*
14016 * FUNCTION: WDA_ProcessHALDumpCmdReq
14017 * Send Dump command to WDI
14018 */
14019VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
14020 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053014021 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014022{
14023 WDI_Status status = WDI_STATUS_SUCCESS;
14024 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
14025 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053014026 tWDA_HalDumpReqParams *pWdaParams ;
14027
Jeff Johnson295189b2012-06-20 16:38:30 -070014028 pVosContextType pVosContext = NULL;
14029 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014030 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
14031 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053014032 if(pVosContext)
14033 {
14034 if (pVosContext->isLogpInProgress)
14035 {
14036 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
14037 "%s:LOGP in Progress. Ignore!!!", __func__);
14038 return VOS_STATUS_E_BUSY;
14039 }
14040 }
14041 else
14042 {
14043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14044 "%s: VOS Context Null", __func__);
14045 return VOS_STATUS_E_RESOURCES;
14046 }
14047
Siddharth Bhal68115602015-01-18 20:44:55 +053014048 if (NULL == pVosContext->pWDAContext)
14049 {
14050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14051 "%s: WDA Context Null", __func__);
14052 return VOS_STATUS_E_RESOURCES;
14053 }
14054 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014055 if(NULL == pWdaParams)
14056 {
14057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014059 return VOS_STATUS_E_NOMEM;
14060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014061 /* Allocate memory WDI request structure*/
14062 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
14063 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
14064 if(NULL == wdiHALDumpCmdReqParam)
14065 {
14066 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14067 "WDA HAL DUMP Command buffer alloc fail");
14068 vos_mem_free(pWdaParams);
14069 return WDI_STATUS_E_FAILURE;
14070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070014072 /* Extract the arguments */
14073 wdiHalDumpCmdInfo->command = cmd;
14074 wdiHalDumpCmdInfo->argument1 = arg1;
14075 wdiHalDumpCmdInfo->argument2 = arg2;
14076 wdiHalDumpCmdInfo->argument3 = arg3;
14077 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070014078 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014079 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053014080 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070014081
14082 /* Response message will be passed through the buffer */
14083 pWdaParams->wdaMsgParam = (void *)pBuffer;
14084
14085 /* store Params pass it to WDI */
14086 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014087
14088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14089 "%s: WDA HAL DUMP Command sent",__func__);
14090
Jeff Johnson295189b2012-06-20 16:38:30 -070014091 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053014092 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
14093 pWdaParams);
14094 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
14095 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014096 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014097 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
14098 WDA_DUMPCMD_WAIT_TIMEOUT );
14099 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070014100 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014101 if ( vStatus == VOS_STATUS_E_TIMEOUT )
14102 {
14103 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14104 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
14105 }
14106 else
14107 {
14108 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14109 "%s: WDA_HALDUMP reporting other error",__func__);
14110 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053014111 if (!(vos_isLoadUnloadInProgress() ||
14112 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
14113 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014115 }
14116 return status;
14117}
Jeff Johnson295189b2012-06-20 16:38:30 -070014118#ifdef WLAN_FEATURE_GTK_OFFLOAD
14119/*
14120 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
14121 * Request to WDI to get GTK Offload Information
14122 */
14123VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
14124 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
14125{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014126 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014127 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
14128 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
14129 tWDA_ReqParams *pWdaParams ;
14130
14131 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
14132 {
14133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014135 VOS_ASSERT(0);
14136 return VOS_STATUS_E_NOMEM;
14137 }
14138
14139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14140 if(NULL == pWdaParams)
14141 {
14142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014144 VOS_ASSERT(0);
14145 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
14146 return VOS_STATUS_E_NOMEM;
14147 }
14148
Yue Ma7f44bbe2013-04-12 11:47:39 -070014149 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
14150 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014151
Jeff Johnson295189b2012-06-20 16:38:30 -070014152 /* Store Params pass it to WDI */
14153 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
14154 pWdaParams->pWdaContext = pWDA;
14155 /* Store param pointer as passed in by caller */
14156 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
14157
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014158 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014159 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014160
Yue Ma7f44bbe2013-04-12 11:47:39 -070014161 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014162
14163 if(IS_WDI_STATUS_FAILURE(status))
14164 {
14165 /* failure returned by WDI API */
14166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14167 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
14168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14169 vos_mem_free(pWdaParams) ;
14170 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
14171 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
14172 }
14173
14174 return CONVERT_WDI2VOS_STATUS(status) ;
14175}
14176#endif // WLAN_FEATURE_GTK_OFFLOAD
14177
14178/*
Yue Mab9c86f42013-08-14 15:59:08 -070014179 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
14180 *
14181 */
14182VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14183 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
14184{
14185 WDI_Status wdiStatus;
14186 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
14187
14188 addPeriodicTxPtrnParams =
14189 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
14190
14191 if (NULL == addPeriodicTxPtrnParams)
14192 {
14193 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14194 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
14195 __func__);
14196
14197 return VOS_STATUS_E_NOMEM;
14198 }
14199
14200 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
14201 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
14202
14203 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14204 addPeriodicTxPtrnParams->pUserData = pWDA;
14205
14206 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
14207
14208 if (WDI_STATUS_PENDING == wdiStatus)
14209 {
14210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14211 "Pending received for %s:%d", __func__, __LINE__ );
14212 }
14213 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14214 {
14215 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14216 "Failure in %s:%d", __func__, __LINE__ );
14217 }
14218
14219 vos_mem_free(addPeriodicTxPtrnParams);
14220
14221 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14222}
14223
14224/*
14225 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
14226 *
14227 */
14228VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14229 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
14230{
14231 WDI_Status wdiStatus;
14232 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
14233
14234 delPeriodicTxPtrnParams =
14235 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
14236
14237 if (NULL == delPeriodicTxPtrnParams)
14238 {
14239 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14240 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
14241 __func__);
14242
14243 return VOS_STATUS_E_NOMEM;
14244 }
14245
14246 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
14247 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
14248
14249 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14250 delPeriodicTxPtrnParams->pUserData = pWDA;
14251
14252 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
14253
14254 if (WDI_STATUS_PENDING == wdiStatus)
14255 {
14256 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14257 "Pending received for %s:%d", __func__, __LINE__ );
14258 }
14259 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14260 {
14261 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14262 "Failure in %s:%d", __func__, __LINE__ );
14263 }
14264
14265 vos_mem_free(delPeriodicTxPtrnParams);
14266
14267 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14268}
14269
Abhishek Singh00b71972016-01-07 10:51:04 +053014270/*
14271 * FUNCTION: WDA_ProcessRateUpdateInd
14272 *
14273 */
14274VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
14275 tSirRateUpdateInd *pRateUpdateParams)
14276{
14277 WDI_Status wdiStatus;
14278 WDI_RateUpdateIndParams rateUpdateParams;
14279
14280 vos_mem_copy(rateUpdateParams.bssid,
14281 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
14282
14283 rateUpdateParams.ucastDataRateTxFlag =
14284 pRateUpdateParams->ucastDataRateTxFlag;
14285 rateUpdateParams.rmcDataRateTxFlag =
14286 pRateUpdateParams->rmcDataRateTxFlag;
14287 rateUpdateParams.mcastDataRate24GHzTxFlag =
14288 pRateUpdateParams->mcastDataRate24GHzTxFlag;
14289 rateUpdateParams.mcastDataRate5GHzTxFlag =
14290 pRateUpdateParams->mcastDataRate5GHzTxFlag;
14291
14292 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
14293 rateUpdateParams.rmcDataRate =
14294 pRateUpdateParams->rmcDataRate;
14295 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
14296 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
14297
14298 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14299 rateUpdateParams.pUserData = pWDA;
14300
14301 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
14302
14303 if (WDI_STATUS_PENDING == wdiStatus)
14304 {
14305 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14306 "Pending received for %s:%d", __func__, __LINE__ );
14307 }
14308 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14309 {
14310 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14311 "Failure in %s:%d", __func__, __LINE__ );
14312 }
14313
14314 vos_mem_free(pRateUpdateParams);
14315
14316 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14317}
14318
14319
Rajeev79dbe4c2013-10-05 11:03:42 +053014320#ifdef FEATURE_WLAN_BATCH_SCAN
14321/*
14322 * FUNCTION: WDA_ProcessStopBatchScanInd
14323 *
14324 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
14325 *
14326 * PARAM:
14327 * pWDA: pointer to WDA context
14328 * pReq: pointer to stop batch scan request
14329 */
14330VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
14331 tSirStopBatchScanInd *pReq)
14332{
14333 WDI_Status wdiStatus;
14334 WDI_StopBatchScanIndType wdiReq;
14335
14336 wdiReq.param = pReq->param;
14337
14338 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
14339
14340 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14341 {
14342 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14343 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
14344 }
14345
14346 vos_mem_free(pReq);
14347
14348 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14349}
14350/*==========================================================================
14351 FUNCTION WDA_ProcessTriggerBatchScanResultInd
14352
14353 DESCRIPTION
14354 API to pull batch scan result from FW
14355
14356 PARAMETERS
14357 pWDA: Pointer to WDA context
14358 pGetBatchScanReq: Pointer to get batch scan result indication
14359
14360 RETURN VALUE
14361 NONE
14362
14363===========================================================================*/
14364VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
14365 tSirTriggerBatchScanResultInd *pReq)
14366{
14367 WDI_Status wdiStatus;
14368 WDI_TriggerBatchScanResultIndType wdiReq;
14369
14370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14371 "------> %s " ,__func__);
14372
14373 wdiReq.param = pReq->param;
14374
14375 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
14376
14377 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14378 {
14379 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14380 "Trigger batch scan result ind failed %s:%d",
14381 __func__, wdiStatus);
14382 }
14383
14384 vos_mem_free(pReq);
14385
14386 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14387}
14388
14389/*==========================================================================
14390 FUNCTION WDA_SetBatchScanRespCallback
14391
14392 DESCRIPTION
14393 API to process set batch scan response from FW
14394
14395 PARAMETERS
14396 pRsp: Pointer to set batch scan response
14397 pUserData: Pointer to user data
14398
14399 RETURN VALUE
14400 NONE
14401
14402===========================================================================*/
14403void WDA_SetBatchScanRespCallback
14404(
14405 WDI_SetBatchScanRspType *pRsp,
14406 void* pUserData
14407)
14408{
14409 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
14410 tpAniSirGlobal pMac;
14411 void *pCallbackContext;
14412 tWDA_CbContext *pWDA = NULL ;
14413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14414
14415
14416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14417 "<------ %s " ,__func__);
14418 if (NULL == pWdaParams)
14419 {
14420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14421 "%s: pWdaParams received NULL", __func__);
14422 VOS_ASSERT(0) ;
14423 return ;
14424 }
14425
14426 /*extract WDA context*/
14427 pWDA = pWdaParams->pWdaContext;
14428 if (NULL == pWDA)
14429 {
14430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14431 "%s:pWDA is NULL can't invole HDD callback",
14432 __func__);
14433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14434 vos_mem_free(pWdaParams->wdaMsgParam);
14435 vos_mem_free(pWdaParams);
14436 VOS_ASSERT(0);
14437 return;
14438 }
14439
14440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14441 vos_mem_free(pWdaParams->wdaMsgParam);
14442 vos_mem_free(pWdaParams);
14443
14444 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14445 if (NULL == pMac)
14446 {
14447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14448 "%s:pMac is NULL", __func__);
14449 VOS_ASSERT(0);
14450 return;
14451 }
14452
14453 pHddSetBatchScanRsp =
14454 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
14455 if (NULL == pHddSetBatchScanRsp)
14456 {
14457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14458 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
14459 VOS_ASSERT(0);
14460 return;
14461 }
14462
14463 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
14464
14465 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
14466 /*call hdd callback with set batch scan response data*/
14467 if(pMac->pmc.setBatchScanReqCallback)
14468 {
14469 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
14470 }
14471 else
14472 {
14473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14474 "%s:HDD callback is null", __func__);
14475 VOS_ASSERT(0);
14476 }
14477
14478 vos_mem_free(pHddSetBatchScanRsp);
14479 return ;
14480}
14481
14482/*==========================================================================
14483 FUNCTION WDA_ProcessSetBatchScanReq
14484
14485 DESCRIPTION
14486 API to send set batch scan request to WDI
14487
14488 PARAMETERS
14489 pWDA: Pointer to WDA context
14490 pSetBatchScanReq: Pointer to set batch scan req
14491
14492 RETURN VALUE
14493 NONE
14494
14495===========================================================================*/
14496VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
14497 tSirSetBatchScanReq *pSetBatchScanReq)
14498{
14499 WDI_Status status;
14500 tWDA_ReqParams *pWdaParams ;
14501 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
14502
14503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14504 "------> %s " ,__func__);
14505
14506 pWdiSetBatchScanReq =
14507 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
14508 if (NULL == pWdiSetBatchScanReq)
14509 {
14510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14511 "%s: VOS MEM Alloc Failure", __func__);
14512 vos_mem_free(pSetBatchScanReq);
14513 VOS_ASSERT(0);
14514 return VOS_STATUS_E_NOMEM;
14515 }
14516
14517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14518 if (NULL == pWdaParams)
14519 {
14520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14521 "%s: VOS MEM Alloc Failure", __func__);
14522 VOS_ASSERT(0);
14523 vos_mem_free(pSetBatchScanReq);
14524 vos_mem_free(pWdiSetBatchScanReq);
14525 return VOS_STATUS_E_NOMEM;
14526 }
14527
14528 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
14529 pWdiSetBatchScanReq->numberOfScansToBatch =
14530 pSetBatchScanReq->numberOfScansToBatch;
14531 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
14532 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
14533 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
14534
14535 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
14536 pWdaParams->pWdaContext = pWDA;
14537 pWdaParams->wdaMsgParam = pSetBatchScanReq;
14538
14539 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
14540 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
14541 if (IS_WDI_STATUS_FAILURE(status))
14542 {
14543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14544 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
14545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14546 vos_mem_free(pWdaParams->wdaMsgParam);
14547 vos_mem_free(pWdaParams);
14548 }
14549 return CONVERT_WDI2VOS_STATUS(status);
14550}
14551
14552#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014553/*
14554 * FUNCTION: WDA_ProcessHT40OBSSScanInd
14555 *
14556 * DESCRIPTION: This function sends start/update OBSS scan
14557 * inidcation message to WDI
14558 *
14559 * PARAM:
14560 * pWDA: pointer to WDA context
14561 * pReq: pointer to start OBSS scan request
14562 */
14563VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
14564 tSirHT40OBSSScanInd *pReq)
14565{
14566 WDI_Status status;
14567 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
14568 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053014569
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14571 "------> %s " ,__func__);
14572 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14573 wdiOBSSScanParams.pUserData = pWDA;
14574
14575 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
14576 pWdiOBSSScanInd->cmdType = pReq->cmdType;
14577 pWdiOBSSScanInd->scanType = pReq->scanType;
14578 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
14579 pReq->OBSSScanActiveDwellTime;
14580 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
14581 pReq->OBSSScanPassiveDwellTime;
14582 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
14583 pReq->BSSChannelWidthTriggerScanInterval;
14584 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
14585 pReq->BSSWidthChannelTransitionDelayFactor;
14586 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
14587 pReq->OBSSScanActiveTotalPerChannel;
14588 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
14589 pReq->OBSSScanPassiveTotalPerChannel;
14590 pWdiOBSSScanInd->OBSSScanActivityThreshold =
14591 pReq->OBSSScanActivityThreshold;
14592 pWdiOBSSScanInd->channelCount = pReq->channelCount;
14593 vos_mem_copy(pWdiOBSSScanInd->channels,
14594 pReq->channels,
14595 pReq->channelCount);
14596 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
14597 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
14598 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
14599 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
14600 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
14601
14602 vos_mem_copy(pWdiOBSSScanInd->ieField,
14603 pReq->ieField,
14604 pReq->ieFieldLen);
14605
14606 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
14607 if (WDI_STATUS_PENDING == status)
14608 {
14609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14610 "Pending received for %s:%d ",__func__,__LINE__ );
14611 }
14612 else if (WDI_STATUS_SUCCESS_SYNC != status)
14613 {
14614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14615 "Failure in %s:%d ",__func__,__LINE__ );
14616 }
14617 return CONVERT_WDI2VOS_STATUS(status) ;
14618}
14619/*
14620 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
14621 *
14622 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
14623 *
14624 * PARAM:
14625 * pWDA: pointer to WDA context
14626 * pReq: pointer to stop batch scan request
14627 */
14628VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
14629 tANI_U8 *bssIdx)
14630{
14631 WDI_Status status;
14632
14633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14634 "------> %s " ,__func__);
14635
14636 status = WDI_HT40OBSSStopScanInd(*bssIdx);
14637 if (WDI_STATUS_PENDING == status)
14638 {
14639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14640 "Pending received for %s:%d ",__func__,__LINE__ );
14641 }
14642 else if (WDI_STATUS_SUCCESS_SYNC != status)
14643 {
14644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14645 "Failure in %s:%d ",__func__,__LINE__ );
14646 }
14647 return CONVERT_WDI2VOS_STATUS(status) ;
14648}
Yue Mab9c86f42013-08-14 15:59:08 -070014649/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014650 * -------------------------------------------------------------------------
14651 * DATA interface with WDI for Mgmt Frames
14652 * -------------------------------------------------------------------------
14653 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014654/*
14655 * FUNCTION: WDA_TxComplete
14656 * Callback function for the WDA_TxPacket
14657 */
14658VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
14659 VOS_STATUS status )
14660{
14661
14662 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
14663 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014664 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014665
Mihir Shete63341222015-03-24 15:39:18 +053014666 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
14667
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 if(NULL == wdaContext)
14669 {
14670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14671 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014672 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014673 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014674 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014675 return VOS_STATUS_E_FAILURE;
14676 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014677
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014678 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014679 /*Check if frame was timed out or not*/
14680 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
14681 (v_PVOID_t)&uUserData);
14682
14683 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14684 {
14685 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014686 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14687 "%s: MGMT Frame Tx timed out",
14688 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014689 vos_pkt_return_packet(pData);
14690 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014691 return VOS_STATUS_SUCCESS;
14692 }
14693
Jeff Johnson295189b2012-06-20 16:38:30 -070014694 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14695 if( NULL!=wdaContext->pTxCbFunc)
14696 {
14697 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014698 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014699 {
14700 wdaContext->pTxCbFunc(pMac, pData);
14701 }
14702 else
14703 {
14704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014705 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014706 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014707 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014708 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 return status;
14710 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014711 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014712 else {
14713 wdaContext->mgmt_pktfree_fail++;
14714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14715 "%s:packet (%p) userData (%lx) is not freed",
14716 __func__, pData, uUserData);
14717 }
14718 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014719
14720 /*
14721 * Trigger the event to bring the HAL TL Tx complete function to come
14722 * out of wait
14723 * Let the coe above to complete the packet first. When this event is set,
14724 * the thread waiting for the event may run and set Vospacket_freed causing the original
14725 * packet not being freed.
14726 */
14727 status = vos_event_set(&wdaContext->txFrameEvent);
14728 if(!VOS_IS_STATUS_SUCCESS(status))
14729 {
14730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014731 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014733 return status;
14734}
Jeff Johnson295189b2012-06-20 16:38:30 -070014735/*
14736 * FUNCTION: WDA_TxPacket
14737 * Forward TX management frame to WDI
14738 */
14739VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14740 void *pFrmBuf,
14741 tANI_U16 frmLen,
14742 eFrameType frmType,
14743 eFrameTxDir txDir,
14744 tANI_U8 tid,
14745 pWDATxRxCompFunc pCompFunc,
14746 void *pData,
14747 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014748 tANI_U32 txFlag,
14749 tANI_U32 txBdToken
14750 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014751{
14752 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14753 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14754 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14755 tANI_U8 eventIdx = 0;
14756 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14757 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014758 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014759 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014760
Jeff Johnson295189b2012-06-20 16:38:30 -070014761 if((NULL == pWDA)||(NULL == pFrmBuf))
14762 {
14763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014764 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014765 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014766 VOS_ASSERT(0);
14767 return VOS_STATUS_E_FAILURE;
14768 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014769
Jeff Johnson295189b2012-06-20 16:38:30 -070014770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014771 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14772 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014773 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14774 if(NULL == pMac)
14775 {
14776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014777 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014778 VOS_ASSERT(0);
14779 return VOS_STATUS_E_FAILURE;
14780 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014781
Jeff Johnson295189b2012-06-20 16:38:30 -070014782 /* store the call back function in WDA context */
14783 pWDA->pTxCbFunc = pCompFunc;
14784 /* store the call back for the function of ackTxComplete */
14785 if( pAckTxComp )
14786 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014787 if( NULL != pWDA->pAckTxCbFunc )
14788 {
14789 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014791 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014792 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014793 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014794
Jeff Johnsone7245742012-09-05 17:12:55 -070014795 if( VOS_STATUS_SUCCESS !=
14796 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14797 {
14798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14799 "Tx Complete timeout Timer Stop Failed ");
14800 }
14801 else
14802 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014804 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014805 }
14806 }
14807
14808 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14809 pWDA->pAckTxCbFunc = pAckTxComp;
14810 if( VOS_STATUS_SUCCESS !=
14811 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14812 {
14813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14814 "Tx Complete Timer Start Failed ");
14815 pWDA->pAckTxCbFunc = NULL;
14816 return eHAL_STATUS_FAILURE;
14817 }
14818 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014819 /* Reset the event to be not signalled */
14820 status = vos_event_reset(&pWDA->txFrameEvent);
14821 if(!VOS_IS_STATUS_SUCCESS(status))
14822 {
14823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014824 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014825 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14826 if( pAckTxComp )
14827 {
14828 pWDA->pAckTxCbFunc = NULL;
14829 if( VOS_STATUS_SUCCESS !=
14830 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14831 {
14832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14833 "Tx Complete timeout Timer Stop Failed ");
14834 }
14835 }
14836 return VOS_STATUS_E_FAILURE;
14837 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014838
14839 /* If Peer Sta mask is set don't overwrite to self sta */
14840 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014841 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014842 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014844 else
14845 {
Ganesh K08bce952012-12-13 15:04:41 -080014846 /* Get system role, use the self station if in unknown role or STA role */
14847 systemRole = wdaGetGlobalSystemRole(pMac);
14848 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14849 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014850#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014851 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014852#endif
Ganesh K08bce952012-12-13 15:04:41 -080014853 ))
14854 {
14855 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14856 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014858
Jeff Johnsone7245742012-09-05 17:12:55 -070014859 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14860 disassoc frame reaches the HW, HAL has already deleted the peer station */
14861 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014862 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014863 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014864 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014865 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 /*Send Probe request frames on self sta idx*/
14867 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014869 /* Since we donot want probe responses to be retried, send probe responses
14870 through the NO_ACK queues */
14871 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14872 {
14873 //probe response is sent out using self station and no retries options.
14874 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14875 }
14876 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14877 {
14878 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14879 }
14880 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014881#ifdef FEATURE_WLAN_TDLS
14882 /* TDLS Management frames are sent using Peer Sta mask */
14883 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14884 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14885 {
14886 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14887
14888 }
14889#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014890 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014891
14892 /*Set frame tag to 0
14893 We will use the WDA user data in order to tag a frame as expired*/
14894 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14895 (v_PVOID_t)0);
14896
14897
14898 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014899 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14900 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014901 {
14902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014903 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014904 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014905 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014906 if( pAckTxComp )
14907 {
14908 pWDA->pAckTxCbFunc = NULL;
14909 if( VOS_STATUS_SUCCESS !=
14910 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14911 {
14912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14913 "Tx Complete timeout Timer Stop Failed ");
14914 }
14915 }
14916 return VOS_STATUS_E_FAILURE;
14917 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014918 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014919 /*
14920 * Wait for the event to be set by the TL, to get the response of TX
14921 * complete, this event should be set by the Callback function called by TL
14922 */
14923 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14924 &eventIdx);
14925 if(!VOS_IS_STATUS_SUCCESS(status))
14926 {
14927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14928 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014929 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014930 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014931 /*Tag Frame as timed out for later deletion*/
14932 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14933 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014934 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14935 after the packet gets completed(packet freed once)*/
14936
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014937 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14938
14939 /*
14940 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14941 * TX completion call back
14942 */
14943 VOS_SMP_MB;
14944 vos_lock_release(&pWDA->mgmt_pkt_lock);
14945
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014946 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014947 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014948
Abhishek Singh837adf22015-10-01 17:37:37 +053014949 if (vos_isFatalEventEnabled())
14950 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14951 WLAN_LOG_INDICATOR_HOST_DRIVER,
14952 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14953 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014954
Jeff Johnson295189b2012-06-20 16:38:30 -070014955 if( pAckTxComp )
14956 {
14957 pWDA->pAckTxCbFunc = NULL;
14958 if( VOS_STATUS_SUCCESS !=
14959 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14960 {
14961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14962 "Tx Complete timeout Timer Stop Failed ");
14963 }
14964 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014965 pWDA->mgmtTxfailureCnt++;
14966
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053014967 /* Request firmware recovery */
14968 if (WDA_TX_FW_RECOVERY_THRESHOLD ==
14969 pWDA->mgmtTxfailureCnt)
14970 {
14971 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14972 "%s: Request firmware for recovery", __func__);
14973 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
14974 }
14975
Abhishek Singhe721fb42015-11-30 14:22:10 +053014976 /* SSR if timeout continously for
14977 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14978 */
14979 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14980 pWDA->mgmtTxfailureCnt)
14981 {
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053014982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14983 "%s: Request system recovery", __func__);
Abhishek Singhe721fb42015-11-30 14:22:10 +053014984 vos_wlanRestart();
14985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014986 status = VOS_STATUS_E_FAILURE;
14987 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014988
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014989#ifdef WLAN_DUMP_MGMTFRAMES
14990 if (VOS_IS_STATUS_SUCCESS(status))
14991 {
14992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14993 "%s() TX packet : SubType %d", __func__,pFc->subType);
14994 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14995 pData, frmLen);
14996 }
14997#endif
14998
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014999 if (VOS_IS_STATUS_SUCCESS(status))
15000 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053015001 pWDA->mgmtTxfailureCnt = 0;
15002 if ((vos_timer_get_system_time() - time_snapshot) >=
15003 WDA_TX_TIME_THRESHOLD)
15004 {
15005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15006 "Tx Complete took %lu ms",
15007 vos_timer_get_system_time() - time_snapshot);
15008 }
15009
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080015010 if (pMac->fEnableDebugLog & 0x1)
15011 {
15012 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
15013 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
15014 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
15015 {
15016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
15017 pFc->type, pFc->subType);
15018 }
15019 }
15020 }
15021
15022
Jeff Johnson295189b2012-06-20 16:38:30 -070015023 return status;
15024}
Jeff Johnson295189b2012-06-20 16:38:30 -070015025/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015026 * FUNCTION: WDA_ProcessDHCPStartInd
15027 * Forward DHCP Start to WDI
15028 */
15029static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
15030 tAniDHCPInd *dhcpStartInd)
15031{
15032 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015033 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015034
c_hpothu0b0cab72014-02-13 21:52:40 +053015035 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
15036 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015037 sizeof(tSirMacAddr));
15038
c_hpothu0b0cab72014-02-13 21:52:40 +053015039 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015040
c_hpothu0b0cab72014-02-13 21:52:40 +053015041 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015042 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15044 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015045 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015046 else if (WDI_STATUS_SUCCESS_SYNC != status)
15047 {
15048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15049 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
15050 }
15051
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015052 vos_mem_free(dhcpStartInd);
15053 return CONVERT_WDI2VOS_STATUS(status) ;
15054}
15055
15056 /*
15057 * FUNCTION: WDA_ProcessDHCPStopInd
15058 * Forward DHCP Stop to WDI
15059 */
15060 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
15061 tAniDHCPInd *dhcpStopInd)
15062 {
15063 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015064 WDI_DHCPInd wdiDHCPInd;
15065
15066 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
15067 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
15068
15069 status = WDI_dhcpStopInd(&wdiDHCPInd);
15070
15071 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015072 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15074 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015075 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015076 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015077 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15079 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015080 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015081
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015082 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053015083
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015084 return CONVERT_WDI2VOS_STATUS(status) ;
15085 }
15086
Abhishek Singh00b71972016-01-07 10:51:04 +053015087#ifdef WLAN_FEATURE_RMC
15088
15089void
15090WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
15091{
15092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15093 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
15094
15095 switch (wdiRmcResponse->cmd)
15096 {
15097 case eWDI_BECOME_RULER_CMD :
15098 {
15099 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
15100
15101 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
15102 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
15103
15104 if (NULL == pRmcBecomeRulerInd)
15105 {
15106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15107 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
15108 break;
15109 }
15110
15111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15112 "Received eWDI_BECOME_RULER_CMD from WDI");
15113
15114 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
15115
15116 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
15117 wdiRmcResponse->mcastTransmitter,
15118 sizeof(tSirMacAddr));
15119 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
15120 wdiRmcResponse->mcastGroup,
15121 sizeof(tSirMacAddr));
15122
15123 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
15124 (void *)pRmcBecomeRulerInd, 0) ;
15125 break;
15126 }
15127 case eWDI_SUGGEST_RULER_CMD :
15128 {
15129 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
15130
15131 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
15132 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
15133
15134 if (NULL == pRmcRulerSelectInd)
15135 {
15136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15137 "%s: unable to allocate pRmcRulerSelectInd", __func__);
15138 break;
15139 }
15140
15141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15142 "Received eWDI_SUGGEST_RULER_CMD from WDI");
15143
15144 pRmcRulerSelectInd->status = wdiRmcResponse->status;
15145
15146 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
15147 wdiRmcResponse->mcastTransmitter,
15148 sizeof(tSirMacAddr));
15149 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
15150 wdiRmcResponse->mcastGroup,
15151 sizeof(tSirMacAddr));
15152 vos_mem_copy(pRmcRulerSelectInd->ruler,
15153 wdiRmcResponse->ruler,
15154 sizeof(pRmcRulerSelectInd->ruler));
15155
15156 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
15157 (void *)pRmcRulerSelectInd, 0) ;
15158 break;
15159 }
15160 }
15161
15162 /* free the config structure */
15163 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15164 {
15165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15166 }
15167 vos_mem_free(pWdaParams->wdaMsgParam);
15168 vos_mem_free(pWdaParams);
15169
15170}
15171
15172void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
15173{
15174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15175
15176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15177 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15178
15179 if (NULL == pWdaParams)
15180 {
15181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15182 "%s: pWdaParams received NULL", __func__);
15183 VOS_ASSERT(0);
15184 return;
15185 }
15186
15187 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15188 {
15189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15190 vos_mem_free(pWdaParams->wdaMsgParam);
15191 vos_mem_free(pWdaParams);
15192 }
15193
15194 return;
15195}
15196
15197static VOS_STATUS
15198WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
15199 tSirRmcRulerReq *rmcRulerReq)
15200{
15201 WDI_Status status;
15202 WDI_RmcRulerReqParams *wdiRulerReq;
15203 tWDA_ReqParams *pWdaParams;
15204
15205 wdiRulerReq = (WDI_RmcRulerReqParams *)
15206 vos_mem_malloc(sizeof(*wdiRulerReq));
15207
15208 if (NULL == wdiRulerReq)
15209 {
15210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15211 "%s: VOS MEM Alloc Failure", __func__);
15212 VOS_ASSERT(0);
15213 vos_mem_free(rmcRulerReq);
15214 return VOS_STATUS_E_NOMEM;
15215 }
15216
15217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15218 if (NULL == pWdaParams)
15219 {
15220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15221 "%s: VOS MEM Alloc Failure", __func__);
15222 VOS_ASSERT(0);
15223 vos_mem_free(rmcRulerReq);
15224 vos_mem_free(wdiRulerReq);
15225 return VOS_STATUS_E_NOMEM;
15226 }
15227
15228 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
15229 /* Store param pointer as passed in by caller */
15230 pWdaParams->wdaMsgParam = rmcRulerReq;
15231 pWdaParams->pWdaContext = pWDA;
15232
15233 wdiRulerReq->cmd = rmcRulerReq->cmd;
15234
15235 vos_mem_copy(wdiRulerReq->mcastTransmitter,
15236 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
15237 vos_mem_copy(wdiRulerReq->mcastGroup,
15238 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
15239 vos_mem_copy(wdiRulerReq->blacklist,
15240 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
15241
15242 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
15243
15244 status = WDI_RmcRulerReq(wdiRulerReq,
15245 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
15246 (void *)pWdaParams);
15247 if (IS_WDI_STATUS_FAILURE(status))
15248 {
15249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15250 vos_mem_free(pWdaParams->wdaMsgParam);
15251 vos_mem_free(pWdaParams) ;
15252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15253 "Ruler Request failed");
15254 }
15255 return CONVERT_WDI2VOS_STATUS(status) ;
15256}
15257
15258/*
15259 * FUNCTION: WDA_ProcessRMCUpdateInd
15260 * Forward Update Indication to WDI
15261*/
15262static VOS_STATUS
15263WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
15264 tSirRmcUpdateInd *rmcUpdateInd)
15265{
15266 WDI_Status status;
15267 WDI_RmcUpdateIndParams wdiUpdateInd;
15268
15269 /* Copy the paramters for Update_Ind */
15270
15271 wdiUpdateInd.indication = rmcUpdateInd->indication;
15272 wdiUpdateInd.role = rmcUpdateInd->role;
15273
15274 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
15275 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
15276
15277 vos_mem_copy(wdiUpdateInd.mcastGroup,
15278 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
15279
15280 vos_mem_copy(wdiUpdateInd.mcastRuler,
15281 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
15282
15283 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
15284 wdiUpdateInd.pUserData = pWDA;
15285 status = WDI_RmcUpdateInd(&wdiUpdateInd);
15286
15287 if (WDI_STATUS_PENDING == status)
15288 {
15289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15290 "Pending received for %s:%d ",__func__,__LINE__ );
15291 }
15292 else if (WDI_STATUS_SUCCESS_SYNC != status)
15293 {
15294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15295 "Failure in %s:%d ",__func__,__LINE__ );
15296 }
15297
15298 vos_mem_free(rmcUpdateInd);
15299
15300 return CONVERT_WDI2VOS_STATUS(status) ;
15301}
15302
15303void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
15304 ,void* pUserData)
15305{
15306
15307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15308 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
15309 tWDA_CbContext *pWDA;
15310 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
15311 vos_msg_t vosMsg;
15312 v_U32_t wdaCnt = 0;
15313
15314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15315 "<------ %s " ,__func__);
15316 if (NULL == pWdaParams)
15317 {
15318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15319 "%s: pWdaParams received NULL", __func__);
15320 VOS_ASSERT(0);
15321 return;
15322 }
15323
15324 if (NULL == peerInfoRspParams)
15325 {
15326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15327 "%s: peerInfoRspParams received NULL", __func__);
15328 if(pWdaParams->wdaMsgParam)
15329 vos_mem_free(pWdaParams->wdaMsgParam);
15330 if(pWdaParams->wdaWdiApiMsgParam)
15331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15332 vos_mem_free(pWdaParams);
15333
15334 VOS_ASSERT(0);
15335 return;
15336 }
15337
15338 pIbssPeerInfoParams =
15339 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
15340
15341 pIbssGetPeerInfoRsp =
15342 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
15343
15344 if(NULL == pIbssGetPeerInfoRsp)
15345 {
15346 if(pWdaParams->wdaMsgParam)
15347 vos_mem_free(pWdaParams->wdaMsgParam);
15348 if(pWdaParams->wdaWdiApiMsgParam)
15349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15350 vos_mem_free(pWdaParams);
15351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15352 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
15353 __func__);
15354 VOS_ASSERT(0);
15355 return;
15356
15357 }
15358
15359 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15360
15361
15362 if (peerInfoRspParams->wdiNumPeers > 32)
15363 {
15364 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
15365 /* free the mem and return */
15366 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15367 if(pWdaParams->wdaMsgParam)
15368 vos_mem_free(pWdaParams->wdaMsgParam);
15369 if(pWdaParams->wdaWdiApiMsgParam)
15370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15371 vos_mem_free(pWdaParams);
15372
15373 return;
15374 }
15375
15376 /* Message Header */
15377 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
15378 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
15379 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
15380 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
15381
15382 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
15383 {
15384 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
15385 tSirIbssPeerInfoParams *pSmeTmp =
15386 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
15387
15388 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
15389 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
15390 pSmeTmp->rssi = pWdiTmp->wdiRssi;
15391 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
15392 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
15393 }
15394
15395 /* VOS message wrapper */
15396 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
15397 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
15398 vosMsg.bodyval = 0;
15399
15400 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15401 {
15402 /* free the mem and return */
15403 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15404 }
15405
15406 if(NULL != pWdaParams)
15407 {
15408 if(pWdaParams->wdaMsgParam)
15409 vos_mem_free(pWdaParams->wdaMsgParam);
15410 if(pWdaParams->wdaWdiApiMsgParam)
15411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15412 vos_mem_free(pWdaParams);
15413 }
15414
15415 return;
15416}
15417
15418static VOS_STATUS
15419WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
15420 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
15421{
15422 WDI_Status status;
15423 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
15424 tWDA_ReqParams *pWdaParams;
15425
15426 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
15427 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
15428 if (NULL == wdiPeerInfoReq)
15429 {
15430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15431 "%s: VOS MEM Alloc Failure", __func__);
15432 VOS_ASSERT(0);
15433 vos_mem_free(ibssPeerInfoReqParams);
15434 return VOS_STATUS_E_NOMEM;
15435 }
15436
15437 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15438 if (NULL == pWdaParams)
15439 {
15440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15441 "%s: VOS MEM Alloc Failure", __func__);
15442 VOS_ASSERT(0);
15443 vos_mem_free(wdiPeerInfoReq);
15444 vos_mem_free(ibssPeerInfoReqParams);
15445 return VOS_STATUS_E_NOMEM;
15446 }
15447
15448 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
15449 /* Store param pointer as passed in by caller */
15450 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
15451 pWdaParams->pWdaContext = pWDA;
15452
15453 wdiPeerInfoReq->wdiAllPeerInfoReqd =
15454 ibssPeerInfoReqParams->allPeerInfoReqd;
15455 wdiPeerInfoReq->wdiStaIdx =
15456 ibssPeerInfoReqParams->staIdx;
15457
15458 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
15459 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
15460 (void *)pWdaParams);
15461 if (IS_WDI_STATUS_FAILURE(status))
15462 {
15463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15464 vos_mem_free(pWdaParams->wdaMsgParam);
15465 vos_mem_free(pWdaParams) ;
15466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15467 "IBSS Peer Info Request failed");
15468 }
15469 return CONVERT_WDI2VOS_STATUS(status) ;
15470
15471}
15472
Kapil Gupta3d923fb2016-12-20 18:59:27 +053015473#ifdef WLAN_FEATURE_APFIND
15474/*
15475 * FUNCTION: WDA_Process_apfind_set_cmd
15476 * Forward AP find config request to WDI
15477 */
15478VOS_STATUS WDA_Process_apfind_set_cmd(tWDA_CbContext *pWDA,
15479 struct hal_apfind_request *ap_find_req)
15480{
15481 WDI_Status status;
15482 struct WDI_APFind_cmd *wdi_ap_find_cmd;
15483
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15485 "------> %s " ,__func__);
15486 if (NULL == ap_find_req)
15487 {
15488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15489 "%s: apfind_req info received NULL", __func__);
15490 VOS_ASSERT(0) ;
15491 return VOS_STATUS_E_FAULT;
15492 }
15493
15494 wdi_ap_find_cmd = (struct WDI_APFind_cmd *)vos_mem_malloc(
15495 sizeof(struct hal_apfind_request) + ap_find_req->request_data_len);
15496
15497 wdi_ap_find_cmd->data_len = ap_find_req->request_data_len;
15498 vos_mem_copy(wdi_ap_find_cmd->data, ap_find_req->request_data,
15499 ap_find_req->request_data_len);
15500
15501 status = WDI_process_ap_find_cmd(wdi_ap_find_cmd);
15502 if (WDI_STATUS_PENDING == status) {
15503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15504 FL("pending status received"));
15505 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15506 (WDI_STATUS_SUCCESS != status)) {
15507
15508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15509 FL("Failure in process_sap_auth_offload API %d"), status);
15510
15511 }
15512 vos_mem_free(wdi_ap_find_cmd);
15513 return CONVERT_WDI2VOS_STATUS(status) ;
15514}
15515#endif
15516
Abhishek Singh00b71972016-01-07 10:51:04 +053015517/*
15518 * FUNCTION: WDA_ProcessTXFailMonitorInd
15519 * Forward TX Fail Monitor to WDI
15520 */
15521static VOS_STATUS WDA_ProcessTXFailMonitorInd(
15522 tWDA_CbContext *pWDA,
15523 tAniTXFailMonitorInd *txFailMonitorInd)
15524{
15525 WDI_Status status;
15526 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
15527 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
15528
15529 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15530 "<------ %s " ,__func__);
15531
15532 if (NULL == wdiTXFailMonitorInd)
15533 {
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15535 "%s: VOS MEM Alloc Failure", __func__);
15536 VOS_ASSERT(0);
15537 vos_mem_free(txFailMonitorInd);
15538 return VOS_STATUS_E_NOMEM;
15539 }
15540
15541 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
15542
15543 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
15544 wdiTXFailMonitorInd->pUserData = pWDA;
15545
15546 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
15547
15548 if (WDI_STATUS_PENDING == status)
15549 {
15550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15551 "TX Fail Monitor Indication Pending");
15552 }
15553 else if (WDI_STATUS_SUCCESS_SYNC == status)
15554 {
15555 if (0 == txFailMonitorInd->tx_fail_count)
15556 pWDA->txFailIndCallback = NULL;
15557 else
15558 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
15559 }
15560 else
15561 {
15562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15563 "TX Fail Monitor Indication Failed");
15564 }
15565
15566 vos_mem_free(wdiTXFailMonitorInd);
15567 vos_mem_free(txFailMonitorInd);
15568
15569 return CONVERT_WDI2VOS_STATUS(status) ;
15570}
15571#endif /* WLAN_FEATURE_RMC */
15572
Kapil Gupta04ab1992016-06-26 13:36:51 +053015573#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15574VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15575 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15576{
15577 WDI_Status status;
15578 tWDA_ReqParams *pWdaParams ;
15579 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15580 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15581 sizeof(WDI_PERRoamTriggerScanInfo));
15582
15583 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15584 "------> %s " ,__func__);
15585
15586 if (NULL == pwdiPERRoamTriggerScanInfo)
15587 {
15588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15589 "%s: VOS MEM Alloc Failure", __func__);
15590 VOS_ASSERT(0);
15591 return VOS_STATUS_E_NOMEM;
15592 }
15593
15594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15595 if (NULL == pWdaParams)
15596 {
15597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15598 "%s: VOS MEM Alloc Failure", __func__);
15599 VOS_ASSERT(0);
15600 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15601 return VOS_STATUS_E_NOMEM;
15602 }
15603
15604 pwdiPERRoamTriggerScanInfo->roamScanReq =
15605 pPERRoamTriggerScanReqParams->start;
15606
15607 /* Store Params pass it to WDI */
15608 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15609 pWdaParams->pWdaContext = pWDA;
15610
15611 /* Store param pointer as passed in by caller */
15612 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15613 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15614 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15615 pWdaParams);
15616
15617 if(IS_WDI_STATUS_FAILURE(status))
15618 {
15619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15620 "Failure in Start Roam Candidate trigger Req WDI API" );
15621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15622 vos_mem_free(pWdaParams->wdaMsgParam);
15623 pWdaParams->wdaWdiApiMsgParam = NULL;
15624 pWdaParams->wdaMsgParam = NULL;
15625 }
15626 return CONVERT_WDI2VOS_STATUS(status) ;
15627}
15628#endif
15629
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015630/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053015631 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15632 *
15633 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15634 *
15635 * PARAM:
15636 * pWDA: pointer to WDA context
15637 * pReq: pointer to stop batch scan request
15638 */
15639VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15640 tpSpoofMacAddrReqParams pReq)
15641{
15642 WDI_Status wdiStatus;
15643 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15644 tWDA_ReqParams *pWdaParams;
15645
15646 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15647 sizeof(WDI_SpoofMacAddrInfoType));
15648 if(NULL == WDI_SpoofMacAddrInfoParams) {
15649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15650 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15651 VOS_ASSERT(0);
15652 return VOS_STATUS_E_NOMEM;
15653 }
15654 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15655 if(NULL == pWdaParams) {
15656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15657 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053015658 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053015659 VOS_ASSERT(0);
15660 return VOS_STATUS_E_NOMEM;
15661 }
15662
15663 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15664 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15665
15666 pWdaParams->pWdaContext = pWDA;
15667 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053015668 pWdaParams->wdaMsgParam = (void *)pReq;
15669
15670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15671 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15672
Siddharth Bhal171788a2014-09-29 21:02:40 +053015673 /* store Params pass it to WDI */
15674 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15675
15676 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053015677 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15678 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053015679
15680 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15681 {
15682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15683 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15685 vos_mem_free(pWdaParams->wdaMsgParam);
15686 vos_mem_free(pWdaParams);
15687 }
15688
15689 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15690}
15691
c_manjeecfd1efb2015-09-25 19:32:34 +053015692
15693/*
15694 * FUNCTION: WDA_FwrMemDumpRespCallback
15695 * recieves Mgmt Logging init response from FW
15696 */
15697 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15698 void* pUserData)
15699{
15700 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15701 tAniFwrDumpReq *pFwrMemDumpReq;
15702 tAniFwrDumpRsp *pFwrMemDumpRsp;
15703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15704 "<------ %s " ,__func__);
15705
15706 if(NULL == pWdaParams)
15707 {
15708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15709 "%s: pWdaParams received NULL", __func__);
15710 VOS_ASSERT(0);
15711 return ;
15712 }
15713
15714 if(NULL == pWdaParams->wdaMsgParam)
15715 {
15716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15717 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15718 VOS_ASSERT(0);
15719 vos_mem_free(pWdaParams);
15720 return ;
15721 }
15722
15723 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15724 if(pFwrMemDumpRsp == NULL)
15725 {
15726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15727 "%s: pFwrMemDumpRsp is NULL", __func__);
15728 VOS_ASSERT(0);
15729 vos_mem_free(pWdaParams);
15730 return ;
15731 }
15732
15733 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15734 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15735
15736 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15737 {
15738 pFwrMemDumpReq->fwMemDumpReqCallback(
15739 pFwrMemDumpReq->fwMemDumpReqContext,
15740 pFwrMemDumpRsp);
15741 }
15742 else
15743 {
15744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15745 "%s: FwrMemDump callback is NULL", __func__);
15746 }
15747
15748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15749 vos_mem_free(pWdaParams->wdaMsgParam);
15750 vos_mem_free(pWdaParams);
15751 vos_mem_free(pFwrMemDumpRsp);
15752
15753 return ;
15754}
15755
15756VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15757 tAniFwrDumpReq* pFwrMemDumpReq)
15758{
15759 VOS_STATUS status = VOS_STATUS_SUCCESS;
15760 WDI_Status wstatus;
15761 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15762 tWDA_ReqParams *pWdaParams ;
15763
15764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15765 "------> %s " ,__func__);
15766 /* Sanity Check*/
15767 if(NULL == pFwrMemDumpReq)
15768 {
15769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15770 "%s: pFwrMemDumpReq received NULL", __func__);
15771 VOS_ASSERT(0) ;
15772 return VOS_STATUS_E_FAULT;
15773 }
15774
15775 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15776 if(NULL == pWdiFwrMemDumpReq)
15777 {
15778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15779 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15780 VOS_ASSERT(0);
15781 return VOS_STATUS_E_NOMEM;
15782 }
15783
15784 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15785 if(NULL == pWdaParams)
15786 {
15787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15788 "%s: pWdaParams Alloc Failure", __func__);
15789 VOS_ASSERT(0);
15790 vos_mem_free(pWdiFwrMemDumpReq);
15791 return VOS_STATUS_E_NOMEM;
15792 }
15793
15794 /* Store Params pass it to WDI */
15795 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15796 pWdaParams->pWdaContext = pWDA;
15797 /* Store param pointer as passed in by caller */
15798 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15799
15800 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15801 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15802 pWdaParams);
15803
15804 if(IS_WDI_STATUS_FAILURE(wstatus))
15805 {
15806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15807 FL("Fwr Mem Dump Req failed, free all the memory"));
15808 status = CONVERT_WDI2VOS_STATUS(wstatus);
15809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015810 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015811 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015812 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015813 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015814 }
15815
15816 return status;
15817
15818}
15819
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015820/**
15821 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15822 *
15823 * @pWDA: WDA Call back context
15824 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15825 * that holds allowed action frames bitmask
15826 *
15827 * This function sets the allowed action frames that the FW needs to
15828 * handover to host.The Action frames other than the requested ones
15829 * can be dropped in FW
15830 *
15831 * Return: VOS_STATUS enumeration
15832 */
15833VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15834 struct sir_allowed_action_frames *allowed_action_frames)
15835{
15836 WDI_Status status;
15837 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15839 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015840
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015841 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15842 vos_mem_malloc(sizeof
15843 (*wdi_allowed_action_frames));
15844 if (!wdi_allowed_action_frames) {
15845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15846 "%s: VOS MEM Alloc Failure", __func__);
15847 vos_mem_free(allowed_action_frames);
15848 return VOS_STATUS_E_NOMEM;
15849 }
15850
15851 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15852 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15853
15854 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15855 if (WDI_STATUS_PENDING == status) {
15856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15857 FL("pending status received"));
15858 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15859 (WDI_STATUS_SUCCESS != status)) {
15860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15861 FL("Failure in allowed_action_frames API %d"), status);
15862 }
15863
15864 vos_mem_free(wdi_allowed_action_frames);
15865 vos_mem_free(allowed_action_frames);
15866 return CONVERT_WDI2VOS_STATUS(status) ;
15867}
c_manjeecfd1efb2015-09-25 19:32:34 +053015868
Agrawal Ashish17ef5082016-10-17 18:33:21 +053015869#ifdef SAP_AUTH_OFFLOAD
15870VOS_STATUS wda_process_sap_auth_offload(tWDA_CbContext *pWDA,
15871 struct tSirSapOffloadInfo *sap_auth_offload_info)
15872{
15873 WDI_Status status = WDI_STATUS_SUCCESS;
15874 struct WDI_sap_ofl_enable_params *sap_ofl_enable_cmd;
15875 v_U16_t psk_len, psk_len_padded;
15876
15877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15878 "------> %s " ,__func__);
15879
15880 if(NULL == sap_auth_offload_info)
15881 {
15882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15883 "%s: sap_auth_offload_info received NULL", __func__);
15884 VOS_ASSERT(0) ;
15885 return VOS_STATUS_E_FAULT;
15886 }
15887 psk_len = sap_auth_offload_info->key_len;
15888 psk_len_padded = roundup(psk_len, sizeof(v_U32_t));
15889
15890 sap_ofl_enable_cmd = (struct WDI_sap_ofl_enable_params*)
15891 vos_mem_malloc(sizeof
15892 (*sap_ofl_enable_cmd));
15893 if (!sap_ofl_enable_cmd) {
15894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15895 "%s: VOS MEM Alloc Failure", __func__);
15896 vos_mem_free(sap_auth_offload_info);
15897 return VOS_STATUS_E_NOMEM;
15898 }
15899 vos_mem_zero(sap_ofl_enable_cmd, sizeof(*sap_ofl_enable_cmd));
15900 vos_mem_copy(sap_ofl_enable_cmd->macAddr,
15901 sap_auth_offload_info->macAddr, VOS_MAC_ADDRESS_LEN);
15902
15903 sap_ofl_enable_cmd->enable = sap_auth_offload_info->sap_auth_offload_enable;
15904 sap_ofl_enable_cmd->psk_len = psk_len;
15905 switch (sap_auth_offload_info->sap_auth_offload_sec_type) {
15906 case eSIR_OFFLOAD_WPA2PSK_CCMP:
15907 sap_ofl_enable_cmd->rsn_authmode = WDI_AUTH_TYPE_RSN_PSK;
15908 sap_ofl_enable_cmd->rsn_mcastcipherset = WDI_ED_CCMP;
15909 sap_ofl_enable_cmd->rsn_ucastcipherset = WDI_ED_CCMP;
15910 break;
15911 case eSIR_OFFLOAD_NONE:
15912 default:
15913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15914 "Set SAP AP Auth offload with none support security type\n");
15915 break;
15916 }
15917 vos_mem_copy(sap_ofl_enable_cmd->key, sap_auth_offload_info->key, psk_len);
15918
15919 status = WDI_process_sap_auth_offload(sap_ofl_enable_cmd);
15920
15921 if (WDI_STATUS_PENDING == status) {
15922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15923 FL("pending status received"));
15924 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15925 (WDI_STATUS_SUCCESS != status)) {
15926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15927 FL("Failure in process_sap_auth_offload API %d"), status);
15928 }
15929
15930 vos_mem_free(sap_ofl_enable_cmd);
15931 vos_mem_free(sap_auth_offload_info);
15932 return CONVERT_WDI2VOS_STATUS(status) ;
15933
15934}
15935#endif
15936
Siddharth Bhal171788a2014-09-29 21:02:40 +053015937/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015938 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15939 * Request to WDI.
15940 */
15941VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15942{
15943 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015944 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015945
15946 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15947
15948 staId = (v_U8_t)params;
15949
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015950 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15951 if ( NULL == pTLCb )
15952 {
15953 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15954 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15955 return VOS_STATUS_E_FAULT;
15956 }
15957
15958
15959 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015960 /* Pause TL for Sta ID */
15961 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15962}
15963
Anurag Chouhan83026002016-12-13 22:46:21 +053015964#ifdef DHCP_SERVER_OFFLOAD
15965/**
15966 * wda_process_dhcpserver_offload_req() - wda api to set dhcp server offload
15967 * @wda_handle: pointer to wda handle
15968 * @dhcp_server_offload_info: dhcp server offload info
15969 *
15970 * Return: status
15971 * 0 - success or else failure
15972 */
15973static int wda_process_dhcpserver_offload_req(tWDA_CbContext *wda_handle,
15974 sir_dhcp_srv_offload_info_t
15975 *dhcp_server_offload_info)
15976{
15977 wdi_set_dhcp_server_offload_t *dhcp_info;
15978 tWDA_ReqParams *wda_params;
15979 WDI_Status wstatus;
15980 VOS_STATUS status = VOS_STATUS_SUCCESS;
15981
15982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15983 FL("---> %s"), __func__);
15984
15985 if(NULL == dhcp_server_offload_info)
15986 {
15987 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15988 "%s: dhcp_server_offload_info received NULL",
15989 __func__);
15990 VOS_ASSERT(0) ;
15991 return VOS_STATUS_E_FAULT;
15992 }
15993
15994 dhcp_info = (wdi_set_dhcp_server_offload_t *)
15995 vos_mem_malloc(sizeof(*dhcp_info));
15996 if (!dhcp_info) {
15997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15998 "Failed to allocate buffer to send "
15999 "set_dhcp_server_offload cmd");
16000 vos_mem_free(dhcp_server_offload_info);
16001 return VOS_STATUS_E_NOMEM;
16002 }
16003
16004 vos_mem_zero(dhcp_info, sizeof(*dhcp_info));
16005
16006 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16007 if(NULL == wda_params)
16008 {
16009 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16010 "%s: VOS MEM Alloc Failure", __func__);
16011 VOS_ASSERT(0);
16012 vos_mem_free(dhcp_info);
16013 vos_mem_free(dhcp_server_offload_info);
16014 return VOS_STATUS_E_NOMEM;
16015 }
16016
16017 dhcp_info->bssidx = dhcp_server_offload_info->bssidx;
16018 dhcp_info->enable = dhcp_server_offload_info->dhcp_srv_offload_enabled;
16019 dhcp_info->num_client = dhcp_server_offload_info->dhcp_client_num;
16020 dhcp_info->srv_ipv4 = dhcp_server_offload_info->dhcp_srv_ip;
16021 dhcp_info->start_lsb = dhcp_server_offload_info->start_lsb;
16022
16023 wda_params->pWdaContext = wda_handle;
16024 wda_params->wdaMsgParam = dhcp_server_offload_info;
16025 wda_params->wdaWdiApiMsgParam = (void *)dhcp_info;
16026
16027 wstatus = wdi_process_dhcpserver_offload_req(dhcp_info,
16028 (wdi_dhcp_srv_offload_rsp_cb)
16029 wda_dhcp_server_offload_rsp_callback,
16030 wda_params);
16031 if(IS_WDI_STATUS_FAILURE(wstatus))
16032 {
16033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16034 "Failed to send set_dhcp_server_offload cmd" );
16035 status = CONVERT_WDI2VOS_STATUS(wstatus);
16036 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16037 vos_mem_free(wda_params->wdaMsgParam);
16038 vos_mem_free(wda_params);
16039 }
16040
16041 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16042 "Set dhcp server offload");
16043 return status;
16044}
16045#endif /* DHCP_SERVER_OFFLOAD */
16046
Anurag Chouhan0b29de02016-12-16 13:18:40 +053016047#ifdef MDNS_OFFLOAD
16048/**
16049 * wda_set_mdns_offload_req() - wda api to set mdns offload
16050 * @wda_handle: wda handle
16051 * @mdns_offload_info: mdns offload info
16052 *
16053 * Return - 0 for success or else failure
16054 */
16055static int
16056wda_set_mdns_offload_req(tWDA_CbContext *wda_handle,
16057 sir_mdns_offload_info_t *mdns_offload_info)
16058{
16059 wdi_mdns_enable_offload_cmd_req *mdns_info;
16060 tWDA_ReqParams *wda_params;
16061 WDI_Status wstatus;
16062 VOS_STATUS status = VOS_STATUS_SUCCESS;
16063
16064 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16065 FL("---> %s"), __func__);
16066
16067 if(NULL == mdns_offload_info)
16068 {
16069 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16070 "%s: set_mdns_offload received NULL",
16071 __func__);
16072 VOS_ASSERT(0) ;
16073 return VOS_STATUS_E_FAULT;
16074 }
16075
16076 mdns_info = (wdi_mdns_enable_offload_cmd_req *)
16077 vos_mem_malloc(sizeof(*mdns_info));
16078 if (!mdns_info) {
16079 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16080 "Failed to allocate buffer to send "
16081 "set_mdns_offload cmd");
16082 vos_mem_free(mdns_offload_info);
16083 return VOS_STATUS_E_NOMEM;
16084 }
16085
16086 vos_mem_zero(mdns_info, sizeof(*mdns_info));
16087
16088 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16089 if(NULL == wda_params)
16090 {
16091 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16092 "%s: VOS MEM Alloc Failure", __func__);
16093 VOS_ASSERT(0);
16094 vos_mem_free(mdns_info);
16095 vos_mem_free(mdns_offload_info);
16096 return VOS_STATUS_E_NOMEM;
16097 }
16098
16099 mdns_info->bss_idx = mdns_offload_info->bss_idx;
16100 mdns_info->enable = mdns_offload_info->enable;
16101
16102 wda_params->pWdaContext = wda_handle;
16103 wda_params->wdaMsgParam = mdns_offload_info;
16104 wda_params->wdaWdiApiMsgParam = (void *)mdns_info;
16105
16106 wstatus = wdi_set_mdns_offload_req(mdns_info,
16107 (wdi_mdns_enable_rsp_cb)
16108 wda_mdns_enable_rsp_callback,
16109 wda_params);
16110 if(IS_WDI_STATUS_FAILURE(wstatus))
16111 {
16112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16113 "Failed to send wdi_set_mdns_offload_req cmd" );
16114 status = CONVERT_WDI2VOS_STATUS(wstatus);
16115 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16116 vos_mem_free(wda_params->wdaMsgParam);
16117 vos_mem_free(wda_params);
16118 }
16119
16120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16121 "mdns enabled!");
16122 return status;
16123
16124}
16125
16126/**
16127 * wda_set_mdns_fqdn_req() - wda api to set mdns fqdn offload
16128 * @wda_handle: wda handle
16129 * @mdns_fqdn_info: mdns fqdn offload info
16130 *
16131 * Return - 0 for success or else failure
16132 */
16133static int
16134wda_set_mdns_fqdn_req(tWDA_CbContext *wda_handle,
16135 sir_mdns_fqdn_info_t *mdns_fqdn_info)
16136{
16137 wdi_mdns_set_fqdn_cmd_req *fqdn_info;
16138 tWDA_ReqParams *wda_params;
16139 WDI_Status wstatus;
16140 VOS_STATUS status = VOS_STATUS_SUCCESS;
16141
16142 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16143 FL("---> %s"), __func__);
16144
16145 if(NULL == mdns_fqdn_info)
16146 {
16147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16148 "%s: set_mdns_fqdn received NULL",
16149 __func__);
16150 VOS_ASSERT(0) ;
16151 return VOS_STATUS_E_FAULT;
16152 }
16153
16154 fqdn_info = (wdi_mdns_set_fqdn_cmd_req *)
16155 vos_mem_malloc(sizeof(*fqdn_info));
16156 if (!fqdn_info) {
16157 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16158 "Failed to allocate buffer to send "
16159 "set_mdns_fqdn cmd");
16160 vos_mem_free(mdns_fqdn_info);
16161 return VOS_STATUS_E_NOMEM;
16162 }
16163
16164 vos_mem_zero(fqdn_info, sizeof(*fqdn_info));
16165
16166 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16167 if(NULL == wda_params)
16168 {
16169 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16170 "%s: VOS MEM Alloc Failure", __func__);
16171 VOS_ASSERT(0);
16172 vos_mem_free(fqdn_info);
16173 vos_mem_free(mdns_fqdn_info);
16174 return VOS_STATUS_E_NOMEM;
16175 }
16176
16177 fqdn_info->bss_idx = mdns_fqdn_info->bss_idx;
16178 fqdn_info->type = mdns_fqdn_info->fqdn_type;
16179 fqdn_info->fqdn_len = mdns_fqdn_info->fqdn_len;
16180 vos_mem_copy(fqdn_info->fqdn_data, mdns_fqdn_info->fqdn_data,
16181 mdns_fqdn_info->fqdn_len);
16182 fqdn_info->fqdn_data[mdns_fqdn_info->fqdn_len] = '\0';
16183
16184 wda_params->pWdaContext = wda_handle;
16185 wda_params->wdaMsgParam = mdns_fqdn_info;
16186 wda_params->wdaWdiApiMsgParam = (void *)fqdn_info;
16187
16188 wstatus = wdi_set_mdns_fqdn_req(fqdn_info,
16189 (wdi_mdns_fqdn_rsp_cb)
16190 wda_mdns_fqdn_rsp_callback,
16191 wda_params);
16192 if(IS_WDI_STATUS_FAILURE(wstatus))
16193 {
16194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16195 "Failed to send wdi_set_mdns_fqdn_req cmd" );
16196 status = CONVERT_WDI2VOS_STATUS(wstatus);
16197 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16198 vos_mem_free(wda_params->wdaMsgParam);
16199 vos_mem_free(wda_params);
16200 }
16201
16202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16203 "mDNS FQDN set");
16204 return status;
16205}
16206
16207/**
16208 * wda_set_mdns_response_req() - wda api to set mdns resp offload
16209 * @wda_handle: wda handle
16210 * @mdns_rsp_info: mdns resp offload info
16211 *
16212 * Return - 0 for success or else failure
16213 */
16214static int
16215wda_set_mdns_response_req(tWDA_CbContext *wda_handle,
16216 sir_mdns_resp_info_t *mdns_rsp_info)
16217{
16218 wdi_mdns_set_resp_req *rsp_info;
16219 tWDA_ReqParams *wda_params;
16220 WDI_Status wstatus;
16221 VOS_STATUS status = VOS_STATUS_SUCCESS;
16222
16223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16224 FL("---> %s"), __func__);
16225
16226 if(NULL == mdns_rsp_info)
16227 {
16228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16229 "%s: dhcp_server_offload_info received NULL",
16230 __func__);
16231 VOS_ASSERT(0) ;
16232 return VOS_STATUS_E_FAULT;
16233 }
16234
16235 rsp_info = (wdi_mdns_set_resp_req *)
16236 vos_mem_malloc(sizeof(*rsp_info));
16237 if (!rsp_info) {
16238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16239 "Failed to allocate buffer to send "
16240 "wdi_set_mdns_response_req cmd");
16241 vos_mem_free(mdns_rsp_info);
16242 return VOS_STATUS_E_NOMEM;
16243 }
16244
16245 vos_mem_zero(rsp_info, sizeof(*rsp_info));
16246
16247 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16248 if(NULL == wda_params)
16249 {
16250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16251 "%s: VOS MEM Alloc Failure", __func__);
16252 VOS_ASSERT(0);
16253 vos_mem_free(rsp_info);
16254 vos_mem_free(mdns_rsp_info);
16255 return VOS_STATUS_E_NOMEM;
16256 }
16257
16258 rsp_info->bss_idx = mdns_rsp_info->bss_idx;
16259 rsp_info->ar_count = mdns_rsp_info->resourceRecord_count;
16260 rsp_info->resp_len = mdns_rsp_info->resp_len;
16261 vos_mem_copy(rsp_info->resp_data, mdns_rsp_info->resp_data,
16262 mdns_rsp_info->resp_len);
16263 rsp_info->resp_data[mdns_rsp_info->resp_len] = '\0';
16264
16265 wda_params->pWdaContext = wda_handle;
16266 wda_params->wdaMsgParam = mdns_rsp_info;
16267 wda_params->wdaWdiApiMsgParam = (void *)rsp_info;
16268
16269 wstatus = wdi_set_mdns_response_req(rsp_info,
16270 (wdi_mdns_resp_rsp_cb)
16271 wda_mdns_resp_rsp_callback,
16272 wda_params);
16273 if(IS_WDI_STATUS_FAILURE(wstatus))
16274 {
16275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16276 "Failed to send wdi_set_mdns_response_req cmd" );
16277 status = CONVERT_WDI2VOS_STATUS(wstatus);
16278 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16279 vos_mem_free(wda_params->wdaMsgParam);
16280 vos_mem_free(wda_params);
16281 }
16282
16283 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16284 "mDNS Response set!");
16285 return status;
16286}
16287
16288/**
16289 * wda_get_mdns_stats_req() - wda api to get mdns stats
16290 * @wda_handle: wda handle
16291 * @mdns_info: mdns info
16292 *
16293 * Return - 0 for success or else failure
16294 */
16295static int
16296wda_get_mdns_stats_req(tWDA_CbContext *wda_handle,
16297 sir_get_mdns_stats_info_t *mdns_info)
16298{
16299 wdi_mdns_get_stats_req *status_info;
16300 tWDA_ReqParams *wda_params;
16301 WDI_Status wstatus;
16302
16303 VOS_STATUS status = VOS_STATUS_SUCCESS;
16304
16305 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16306 FL("---> %s"), __func__);
16307
16308 if(NULL == mdns_info)
16309 {
16310 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16311 "%s: dhcp_server_offload_info received NULL",
16312 __func__);
16313 VOS_ASSERT(0) ;
16314 return VOS_STATUS_E_FAULT;
16315 }
16316
16317 status_info = (wdi_mdns_get_stats_req *)
16318 vos_mem_malloc(sizeof(*status_info));
16319 if (!status_info) {
16320 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16321 "Failed to allocate buffer to send "
16322 "wdi_set_mdns_response_req cmd");
16323 vos_mem_free(mdns_info);
16324 return VOS_STATUS_E_NOMEM;
16325 }
16326
16327 vos_mem_zero(status_info, sizeof(*status_info));
16328
16329 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16330 if(NULL == wda_params)
16331 {
16332 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16333 "%s: VOS MEM Alloc Failure", __func__);
16334 VOS_ASSERT(0);
16335 vos_mem_free(status_info);
16336 vos_mem_free(mdns_info);
16337 return VOS_STATUS_E_NOMEM;
16338 }
16339
16340 status_info->bss_idx = mdns_info->bss_idx;
16341
16342 wda_params->pWdaContext = wda_handle;
16343 wda_params->wdaMsgParam = mdns_info;
16344 wda_params->wdaWdiApiMsgParam = (void *)status_info;
16345
16346 wstatus = wdi_get_mdns_stats_req(status_info,
16347 (wdi_get_stats_rsp_cb)
16348 wda_get_stats_rsp_callback,
16349 wda_params);
16350 if(IS_WDI_STATUS_FAILURE(wstatus))
16351 {
16352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16353 "Failed to send wdi_set_mdns_response_req cmd" );
16354 status = CONVERT_WDI2VOS_STATUS(wstatus);
16355 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16356 vos_mem_free(wda_params->wdaMsgParam);
16357 vos_mem_free(wda_params);
16358 }
16359
16360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16361 "Get mDNS stats");
16362 return status;
16363}
16364#endif /* MDNS_OFFLOAD */
Anurag Chouhan83026002016-12-13 22:46:21 +053016365
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016366/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016367 * FUNCTION: WDA_McProcessMsg
16368 * Trigger DAL-AL to start CFG download
16369 */
16370VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
16371{
16372 VOS_STATUS status = VOS_STATUS_SUCCESS;
16373 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016374 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070016375 {
16376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016377 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016378 VOS_ASSERT(0);
16379 return VOS_STATUS_E_FAILURE;
16380 }
16381
16382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016383 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070016384
16385 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
16386 if(NULL == pWDA )
16387 {
16388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016389 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016390 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070016391 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016392 return VOS_STATUS_E_FAILURE;
16393 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016394 /* Process all the WDA messages.. */
16395 switch( pMsg->type )
16396 {
16397 case WNI_CFG_DNLD_REQ:
16398 {
16399 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070016400 /* call WDA complete event if config download success */
16401 if( VOS_IS_STATUS_SUCCESS(status) )
16402 {
16403 vos_WDAComplete_cback(pVosContext);
16404 }
16405 else
16406 {
16407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16408 "WDA Config Download failure" );
16409 }
16410 break ;
16411 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016412 /*
16413 * Init SCAN request from PE, convert it into DAL format
16414 * and send it to DAL
16415 */
16416 case WDA_INIT_SCAN_REQ:
16417 {
16418 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
16419 break ;
16420 }
16421 /* start SCAN request from PE */
16422 case WDA_START_SCAN_REQ:
16423 {
16424 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
16425 break ;
16426 }
16427 /* end SCAN request from PE */
16428 case WDA_END_SCAN_REQ:
16429 {
16430 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
16431 break ;
16432 }
16433 /* end SCAN request from PE */
16434 case WDA_FINISH_SCAN_REQ:
16435 {
16436 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
16437 break ;
16438 }
16439 /* join request from PE */
16440 case WDA_CHNL_SWITCH_REQ:
16441 {
16442 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
16443 {
16444 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
16445 }
16446 else
16447 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080016448 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
16449 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
16450 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
16451 {
16452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16453 "call ProcessChannelSwitchReq_V1" );
16454 WDA_ProcessChannelSwitchReq_V1(pWDA,
16455 (tSwitchChannelParams*)pMsg->bodyptr) ;
16456 }
16457 else
16458 {
16459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16460 "call ProcessChannelSwitchReq" );
16461 WDA_ProcessChannelSwitchReq(pWDA,
16462 (tSwitchChannelParams*)pMsg->bodyptr) ;
16463 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016464 }
16465 break ;
16466 }
16467 /* ADD BSS request from PE */
16468 case WDA_ADD_BSS_REQ:
16469 {
16470 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
16471 break ;
16472 }
16473 case WDA_ADD_STA_REQ:
16474 {
16475 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
16476 break ;
16477 }
16478 case WDA_DELETE_BSS_REQ:
16479 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016480 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
16481 break ;
16482 }
16483 case WDA_DELETE_STA_REQ:
16484 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016485 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
16486 break ;
16487 }
16488 case WDA_CONFIG_PARAM_UPDATE_REQ:
16489 {
16490 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
16491 break ;
16492 }
16493 case WDA_SET_BSSKEY_REQ:
16494 {
16495 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
16496 break ;
16497 }
16498 case WDA_SET_STAKEY_REQ:
16499 {
16500 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16501 break ;
16502 }
16503 case WDA_SET_STA_BCASTKEY_REQ:
16504 {
16505 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16506 break ;
16507 }
16508 case WDA_REMOVE_BSSKEY_REQ:
16509 {
16510 WDA_ProcessRemoveBssKeyReq(pWDA,
16511 (tRemoveBssKeyParams *)pMsg->bodyptr);
16512 break ;
16513 }
16514 case WDA_REMOVE_STAKEY_REQ:
16515 {
16516 WDA_ProcessRemoveStaKeyReq(pWDA,
16517 (tRemoveStaKeyParams *)pMsg->bodyptr);
16518 break ;
16519 }
16520 case WDA_REMOVE_STA_BCASTKEY_REQ:
16521 {
16522 /* TODO: currently UMAC is not sending this request, Add the code for
16523 handling this request when UMAC supports */
16524 break;
16525 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016526#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070016527 case WDA_TSM_STATS_REQ:
16528 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070016529 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016530 break;
16531 }
16532#endif
16533 case WDA_UPDATE_EDCA_PROFILE_IND:
16534 {
16535 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
16536 break;
16537 }
16538 case WDA_ADD_TS_REQ:
16539 {
16540 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
16541 break;
16542 }
16543 case WDA_DEL_TS_REQ:
16544 {
16545 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
16546 break;
16547 }
16548 case WDA_ADDBA_REQ:
16549 {
16550 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
16551 break;
16552 }
16553 case WDA_DELBA_IND:
16554 {
16555 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
16556 break;
16557 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080016558 case WDA_UPDATE_CHAN_LIST_REQ:
16559 {
16560 WDA_ProcessUpdateChannelList(pWDA,
16561 (tSirUpdateChanList *)pMsg->bodyptr);
16562 break;
16563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016564 case WDA_SET_LINK_STATE:
16565 {
16566 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
16567 break;
16568 }
16569 case WDA_GET_STATISTICS_REQ:
16570 {
16571 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
16572 break;
16573 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016574#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080016575 case WDA_GET_ROAM_RSSI_REQ:
16576 {
16577 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
16578 break;
16579 }
16580#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016581 case WDA_PWR_SAVE_CFG:
16582 {
16583 if(pWDA->wdaState == WDA_READY_STATE)
16584 {
16585 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
16586 }
16587 else
16588 {
16589 if(NULL != pMsg->bodyptr)
16590 {
16591 vos_mem_free(pMsg->bodyptr);
16592 }
16593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16594 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
16595 }
16596 break;
16597 }
mukul sharma6b53e202016-11-23 19:29:18 +053016598 case WDA_UPDATE_CFG_INT_PARAM:
16599 {
16600 if(pWDA->wdaState == WDA_READY_STATE)
16601 {
16602 WDA_UpdateCfgIntParam(pWDA, (tSirUpdateCfgIntParam *)pMsg->bodyptr);
16603 vos_mem_free(pMsg->bodyptr);
16604 }
16605 else
16606 {
16607 if(NULL != pMsg->bodyptr)
16608 {
16609 vos_mem_free(pMsg->bodyptr);
16610 }
16611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16612 " WDA_UPDATE_CFG_INT_PARAM req in wrong state %d",
16613 pWDA->wdaState );
16614 }
16615 break;
16616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016617 case WDA_ENTER_IMPS_REQ:
16618 {
16619 if(pWDA->wdaState == WDA_READY_STATE)
16620 {
16621 WDA_ProcessEnterImpsReq(pWDA);
16622 }
16623 else
16624 {
16625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16626 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16627 }
16628 break;
16629 }
16630 case WDA_EXIT_IMPS_REQ:
16631 {
16632 if(pWDA->wdaState == WDA_READY_STATE)
16633 {
16634 WDA_ProcessExitImpsReq(pWDA);
16635 }
16636 else
16637 {
16638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16639 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16640 }
16641 break;
16642 }
16643 case WDA_ENTER_BMPS_REQ:
16644 {
16645 if(pWDA->wdaState == WDA_READY_STATE)
16646 {
16647 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
16648 }
16649 else
16650 {
16651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16652 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16653 }
16654 break;
16655 }
16656 case WDA_EXIT_BMPS_REQ:
16657 {
16658 if(pWDA->wdaState == WDA_READY_STATE)
16659 {
16660 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
16661 }
16662 else
16663 {
16664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16665 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16666 }
16667 break;
16668 }
16669 case WDA_ENTER_UAPSD_REQ:
16670 {
16671 if(pWDA->wdaState == WDA_READY_STATE)
16672 {
16673 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
16674 }
16675 else
16676 {
16677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16678 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16679 }
16680 break;
16681 }
16682 case WDA_EXIT_UAPSD_REQ:
16683 {
16684 if(pWDA->wdaState == WDA_READY_STATE)
16685 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016686 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016687 }
16688 else
16689 {
16690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16691 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16692 }
16693 break;
16694 }
16695 case WDA_UPDATE_UAPSD_IND:
16696 {
16697 if(pWDA->wdaState == WDA_READY_STATE)
16698 {
16699 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
16700 }
16701 else
16702 {
16703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16704 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
16705 }
16706 break;
16707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016708 case WDA_REGISTER_PE_CALLBACK :
16709 {
16710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16711 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
16712 /*TODO: store the PE callback */
16713 /* Do Nothing? MSG Body should be freed at here */
16714 if(NULL != pMsg->bodyptr)
16715 {
16716 vos_mem_free(pMsg->bodyptr);
16717 }
16718 break;
16719 }
16720 case WDA_SYS_READY_IND :
16721 {
16722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16723 "Handling msg type WDA_SYS_READY_IND " );
16724 pWDA->wdaState = WDA_READY_STATE;
16725 if(NULL != pMsg->bodyptr)
16726 {
16727 vos_mem_free(pMsg->bodyptr);
16728 }
16729 break;
16730 }
16731 case WDA_BEACON_FILTER_IND :
16732 {
16733 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
16734 break;
16735 }
16736 case WDA_BTC_SET_CFG:
16737 {
16738 /*TODO: handle this while dealing with BTC */
16739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16740 "Handling msg type WDA_BTC_SET_CFG " );
16741 /* Do Nothing? MSG Body should be freed at here */
16742 if(NULL != pMsg->bodyptr)
16743 {
16744 vos_mem_free(pMsg->bodyptr);
16745 }
16746 break;
16747 }
16748 case WDA_SIGNAL_BT_EVENT:
16749 {
16750 /*TODO: handle this while dealing with BTC */
16751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16752 "Handling msg type WDA_SIGNAL_BT_EVENT " );
16753 /* Do Nothing? MSG Body should be freed at here */
16754 if(NULL != pMsg->bodyptr)
16755 {
16756 vos_mem_free(pMsg->bodyptr);
16757 }
16758 break;
16759 }
16760 case WDA_CFG_RXP_FILTER_REQ:
16761 {
16762 WDA_ProcessConfigureRxpFilterReq(pWDA,
16763 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
16764 break;
16765 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016766 case WDA_MGMT_LOGGING_INIT_REQ:
16767 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053016768 WDA_ProcessFWLoggingInitReq(pWDA,
16769 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016770 break;
16771 }
Siddharth Bhal64246172015-02-27 01:04:37 +053016772 case WDA_GET_FRAME_LOG_REQ:
16773 {
16774 WDA_ProcessGetFrameLogReq(pWDA,
16775 (tAniGetFrameLogReq *)pMsg->bodyptr);
16776 break;
16777 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016778 case WDA_START_RSSI_MONITOR_REQ:
16779 {
16780 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16781 break;
16782 }
16783 case WDA_STOP_RSSI_MONITOR_REQ:
16784 {
16785 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16786 break;
16787 }
Karthick Sa35b0692015-08-21 15:57:05 +053016788 case WDA_SEND_LOG_DONE_IND:
16789 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053016790 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053016791 break;
16792 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053016793 case WDA_FATAL_EVENT_LOGS_REQ:
16794 {
16795 WDA_ProcessFatalEventLogsReq(pWDA,
16796 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
16797 break;
16798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016799 case WDA_SET_HOST_OFFLOAD:
16800 {
16801 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16802 break;
16803 }
16804 case WDA_SET_KEEP_ALIVE:
16805 {
16806 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
16807 break;
16808 }
16809#ifdef WLAN_NS_OFFLOAD
16810 case WDA_SET_NS_OFFLOAD:
16811 {
16812 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16813 break;
16814 }
16815#endif //WLAN_NS_OFFLOAD
16816 case WDA_ADD_STA_SELF_REQ:
16817 {
16818 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
16819 break;
16820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016821 case WDA_DEL_STA_SELF_REQ:
16822 {
16823 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
16824 break;
16825 }
16826 case WDA_WOWL_ADD_BCAST_PTRN:
16827 {
16828 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
16829 break;
16830 }
16831 case WDA_WOWL_DEL_BCAST_PTRN:
16832 {
16833 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
16834 break;
16835 }
16836 case WDA_WOWL_ENTER_REQ:
16837 {
16838 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
16839 break;
16840 }
16841 case WDA_WOWL_EXIT_REQ:
16842 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016843 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016844 break;
16845 }
16846 case WDA_TL_FLUSH_AC_REQ:
16847 {
16848 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
16849 break;
16850 }
16851 case WDA_SIGNAL_BTAMP_EVENT:
16852 {
16853 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
16854 break;
16855 }
Abhishek Singh85b74712014-10-08 11:38:19 +053016856 case WDA_FW_STATS_GET_REQ:
16857 {
16858 WDA_ProcessFWStatsGetReq(pWDA,
16859 (tSirFWStatsGetReq *)pMsg->bodyptr);
16860 break;
16861 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053016862#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16863 case WDA_LINK_LAYER_STATS_SET_REQ:
16864 {
16865 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
16866 break;
16867 }
16868 case WDA_LINK_LAYER_STATS_GET_REQ:
16869 {
16870 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
16871 break;
16872 }
16873 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
16874 {
16875 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
16876 break;
16877 }
16878#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053016879#ifdef WLAN_FEATURE_EXTSCAN
16880 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
16881 {
16882 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
16883 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
16884 break;
16885 }
16886 case WDA_EXTSCAN_START_REQ:
16887 {
16888 WDA_ProcessEXTScanStartReq(pWDA,
16889 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
16890 break;
16891 }
16892 case WDA_EXTSCAN_STOP_REQ:
16893 {
16894 WDA_ProcessEXTScanStopReq(pWDA,
16895 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
16896 break;
16897 }
16898 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
16899 {
16900 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
16901 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
16902 break;
16903 }
16904 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
16905 {
16906 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
16907 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
16908 break;
16909 }
16910 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
16911 {
16912 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
16913 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
16914 break;
16915 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016916 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
16917 {
16918 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
16919 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
16920 break;
16921 }
16922 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
16923 {
16924 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
16925 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
16926 break;
16927 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053016928 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
16929 {
16930 WDA_ProcessHighPriorityDataInfoInd(pWDA,
16931 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
16932 break;
16933 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016934#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070016935#ifdef WDA_UT
16936 case WDA_WDI_EVENT_MSG:
16937 {
16938 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
16939 break ;
16940 }
16941#endif
16942 case WDA_UPDATE_BEACON_IND:
16943 {
16944 WDA_ProcessUpdateBeaconParams(pWDA,
16945 (tUpdateBeaconParams *)pMsg->bodyptr);
16946 break;
16947 }
16948 case WDA_SEND_BEACON_REQ:
16949 {
16950 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
16951 break;
16952 }
16953 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
16954 {
16955 WDA_ProcessUpdateProbeRspTemplate(pWDA,
16956 (tSendProbeRespParams *)pMsg->bodyptr);
16957 break;
16958 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016959#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070016960 case WDA_SET_MAX_TX_POWER_REQ:
16961 {
16962 WDA_ProcessSetMaxTxPowerReq(pWDA,
16963 (tMaxTxPowerParams *)pMsg->bodyptr);
16964 break;
16965 }
16966#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070016967 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
16968 {
16969 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
16970 pMsg->bodyptr);
16971 break;
16972 }
schang86c22c42013-03-13 18:41:24 -070016973 case WDA_SET_TX_POWER_REQ:
16974 {
16975 WDA_ProcessSetTxPowerReq(pWDA,
16976 (tSirSetTxPowerReq *)pMsg->bodyptr);
16977 break;
16978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 case WDA_SET_P2P_GO_NOA_REQ:
16980 {
16981 WDA_ProcessSetP2PGONOAReq(pWDA,
16982 (tP2pPsParams *)pMsg->bodyptr);
16983 break;
16984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016985 /* timer related messages */
16986 case WDA_TIMER_BA_ACTIVITY_REQ:
16987 {
16988 WDA_BaCheckActivity(pWDA) ;
16989 break ;
16990 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016991
16992 /* timer related messages */
16993 case WDA_TIMER_TRAFFIC_STATS_IND:
16994 {
16995 WDA_TimerTrafficStatsInd(pWDA);
16996 break;
16997 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016998#ifdef WLAN_FEATURE_VOWIFI_11R
16999 case WDA_AGGR_QOS_REQ:
17000 {
17001 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
17002 break;
17003 }
17004#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070017005 case WDA_FTM_CMD_REQ:
17006 {
17007 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
17008 break ;
17009 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017010#ifdef FEATURE_OEM_DATA_SUPPORT
17011 case WDA_START_OEM_DATA_REQ:
17012 {
17013 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
17014 break;
17015 }
17016#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070017017 /* Tx Complete Time out Indication */
17018 case WDA_TX_COMPLETE_TIMEOUT_IND:
17019 {
17020 WDA_ProcessTxCompleteTimeOutInd(pWDA);
17021 break;
17022 }
17023 case WDA_WLAN_SUSPEND_IND:
17024 {
17025 WDA_ProcessWlanSuspendInd(pWDA,
17026 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
17027 break;
17028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017029 case WDA_WLAN_RESUME_REQ:
17030 {
17031 WDA_ProcessWlanResumeReq(pWDA,
17032 (tSirWlanResumeParam *)pMsg->bodyptr) ;
17033 break;
17034 }
17035
17036 case WDA_UPDATE_CF_IND:
17037 {
17038 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
17039 pMsg->bodyptr = NULL;
17040 break;
17041 }
17042#ifdef FEATURE_WLAN_SCAN_PNO
17043 case WDA_SET_PNO_REQ:
17044 {
17045 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
17046 break;
17047 }
17048 case WDA_UPDATE_SCAN_PARAMS_REQ:
17049 {
17050 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
17051 break;
17052 }
17053 case WDA_SET_RSSI_FILTER_REQ:
17054 {
17055 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
17056 break;
17057 }
17058#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017059#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017060 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017061 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017062 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017063 break;
17064 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053017065 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
17066 {
17067 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
17068 break;
17069 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017070#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017071 case WDA_SET_TX_PER_TRACKING_REQ:
17072 {
17073 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
17074 break;
17075 }
17076
17077#ifdef WLAN_FEATURE_PACKET_FILTERING
17078 case WDA_8023_MULTICAST_LIST_REQ:
17079 {
17080 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
17081 break;
17082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017083 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
17084 {
17085 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
17086 break;
17087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017088 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
17089 {
17090 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
17091 break;
17092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017093 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
17094 {
17095 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
17096 break;
17097 }
17098#endif // WLAN_FEATURE_PACKET_FILTERING
17099
17100
17101 case WDA_TRANSMISSION_CONTROL_IND:
17102 {
17103 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
17104 break;
17105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017106 case WDA_SET_POWER_PARAMS_REQ:
17107 {
17108 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
17109 break;
17110 }
c_manjeecfd1efb2015-09-25 19:32:34 +053017111 case WDA_FW_MEM_DUMP_REQ:
17112 {
17113 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
17114 break;
17115 }
17116
Jeff Johnson295189b2012-06-20 16:38:30 -070017117#ifdef WLAN_FEATURE_GTK_OFFLOAD
17118 case WDA_GTK_OFFLOAD_REQ:
17119 {
17120 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
17121 break;
17122 }
17123
17124 case WDA_GTK_OFFLOAD_GETINFO_REQ:
17125 {
17126 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
17127 break;
17128 }
17129#endif //WLAN_FEATURE_GTK_OFFLOAD
17130
17131 case WDA_SET_TM_LEVEL_REQ:
17132 {
17133 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
17134 break;
17135 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053017136
Mohit Khanna4a70d262012-09-11 16:30:12 -070017137 case WDA_UPDATE_OP_MODE:
17138 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053017139 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
17140 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
17141 {
17142 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17143 }
17144 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070017145 {
17146 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
17147 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17148 else
17149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017150 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017151 }
17152 else
17153 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017154 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017155 break;
17156 }
Chet Lanctot186b5732013-03-18 10:26:30 -070017157#ifdef WLAN_FEATURE_11W
17158 case WDA_EXCLUDE_UNENCRYPTED_IND:
17159 {
17160 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
17161 break;
17162 }
17163#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017164#ifdef FEATURE_WLAN_TDLS
17165 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
17166 {
17167 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
17168 break;
17169 }
17170#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017171 case WDA_DHCP_START_IND:
17172 {
17173 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17174 break;
17175 }
17176 case WDA_DHCP_STOP_IND:
17177 {
17178 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17179 break;
17180 }
Leo Chang9056f462013-08-01 19:21:11 -070017181#ifdef FEATURE_WLAN_LPHB
17182 case WDA_LPHB_CONF_REQ:
17183 {
17184 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
17185 break;
17186 }
17187#endif
Yue Mab9c86f42013-08-14 15:59:08 -070017188 case WDA_ADD_PERIODIC_TX_PTRN_IND:
17189 {
17190 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
17191 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
17192 break;
17193 }
17194 case WDA_DEL_PERIODIC_TX_PTRN_IND:
17195 {
17196 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
17197 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
17198 break;
17199 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017200 case WDA_RATE_UPDATE_IND:
17201 {
17202 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
17203 break;
17204 }
17205#ifdef WLAN_FEATURE_RMC
17206 case WDA_RMC_RULER_REQ:
17207 {
17208 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
17209 break;
17210 }
17211 case WDA_RMC_UPDATE_IND:
17212 {
17213 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
17214 break;
17215 }
17216 case WDA_GET_IBSS_PEER_INFO_REQ:
17217 {
17218 WDA_ProcessIbssPeerInfoReq(pWDA,
17219 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
17220 break;
17221 }
17222 case WDA_TX_FAIL_MONITOR_IND:
17223 {
17224 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
17225 break;
17226 }
17227#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053017228#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17229 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
17230 {
17231 WDA_ProcessPERRoamScanTriggerReq(pWDA,
17232 (tPERRoamScanStart *)pMsg->bodyptr);
17233 break;
17234 }
17235#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053017236#ifdef FEATURE_WLAN_BATCH_SCAN
17237 case WDA_SET_BATCH_SCAN_REQ:
17238 {
17239 WDA_ProcessSetBatchScanReq(pWDA,
17240 (tSirSetBatchScanReq *)pMsg->bodyptr);
17241 break;
17242 }
17243 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
17244 {
17245 WDA_ProcessTriggerBatchScanResultInd(pWDA,
17246 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
17247 break;
17248 }
17249 case WDA_STOP_BATCH_SCAN_IND:
17250 {
17251 WDA_ProcessStopBatchScanInd(pWDA,
17252 (tSirStopBatchScanInd *)pMsg->bodyptr);
17253 break;
17254 }
c_hpothu92367912014-05-01 15:18:17 +053017255 case WDA_GET_BCN_MISS_RATE_REQ:
17256 WDA_ProcessGetBcnMissRateReq(pWDA,
17257 (tSirBcnMissRateReq *)pMsg->bodyptr);
17258 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053017259#endif
17260
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053017261 case WDA_HT40_OBSS_SCAN_IND:
17262 {
17263 WDA_ProcessHT40OBSSScanInd(pWDA,
17264 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
17265 break;
17266 }
17267 case WDA_HT40_OBSS_STOP_SCAN_IND:
17268 {
17269 WDA_ProcessHT40OBSSStopScanInd(pWDA,
17270 (tANI_U8*)pMsg->bodyptr);
17271 break;
17272 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053017273// tdlsoffchan
17274#ifdef FEATURE_WLAN_TDLS
17275 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
17276 {
17277 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
17278 break;
17279 }
17280#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053017281 case WDA_SPOOF_MAC_ADDR_REQ:
17282 {
17283 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
17284 break;
17285 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053017286 case WDA_ENCRYPT_MSG_REQ:
17287 {
17288 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
17289 break;
17290 }
Anurag Chouhan83026002016-12-13 22:46:21 +053017291#ifdef DHCP_SERVER_OFFLOAD
17292 case WDA_SET_DHCP_SERVER_OFFLOAD_REQ:
17293 {
17294 wda_process_dhcpserver_offload_req(pWDA,
17295 (sir_dhcp_srv_offload_info_t *)pMsg->bodyptr);
17296 break;
17297 }
17298#endif /* DHCP_SERVER_OFFLOAD */
Anurag Chouhan0b29de02016-12-16 13:18:40 +053017299#ifdef MDNS_OFFLOAD
17300 case WDA_SET_MDNS_OFFLOAD_CMD:
17301 wda_set_mdns_offload_req(pWDA,
17302 (sir_mdns_offload_info_t *)pMsg->bodyptr);
17303 break;
17304 case WDA_SET_MDNS_FQDN_CMD:
17305 wda_set_mdns_fqdn_req(pWDA,
17306 (sir_mdns_fqdn_info_t *)pMsg->bodyptr);
17307 break;
17308 case WDA_SET_MDNS_RESPONSE_CMD:
17309 wda_set_mdns_response_req(pWDA,
17310 (sir_mdns_resp_info_t *)pMsg->bodyptr);
17311 break;
17312 case WDA_GET_MDNS_STATUS_CMD:
17313 wda_get_mdns_stats_req(pWDA,
17314 (sir_get_mdns_stats_info_t *) pMsg->bodyptr);
17315 break;
17316#endif /* MDNS_OFFLOAD */
Srinivas Dasari32a79262015-02-19 13:04:49 +053017317 case WDA_NAN_REQUEST:
17318 {
17319 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
17320 break;
17321 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053017322 case WDA_SET_RTS_CTS_HTVHT:
17323 {
17324 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
17325 break;
17326 }
Katya Nigamf0511f62015-05-05 16:40:57 +053017327
17328 case WDA_MON_START_REQ:
17329 {
17330 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
17331 break;
17332 }
17333 case WDA_MON_STOP_REQ:
17334 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053017335 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053017336 break;
17337 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053017338 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
17339 {
17340 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
17341 break;
17342 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053017343 case WDA_WIFI_CONFIG_REQ:
17344 {
17345 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
17346 break;
17347 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017348#ifdef FEATURE_OEM_DATA_SUPPORT
17349 case WDA_START_OEM_DATA_REQ_IND_NEW:
17350 {
17351 WDA_ProcessStartOemDataReqIndNew(pWDA,
17352 (tOemDataReqNewConfig *)pMsg->bodyptr);
17353 break;
17354 }
17355#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053017356 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
17357 {
17358 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
17359 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
17360 break;
17361 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053017362 case WDA_MODIFY_ROAM_PARAMS_IND:
17363 {
17364 WDA_ProcessBcnMissPenaltyCount(pWDA,
17365 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
17366 break;
17367 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053017368
17369 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
17370 wda_process_set_allowed_action_frames_ind(pWDA,
17371 (struct sir_allowed_action_frames*)pMsg->bodyptr);
17372 break;
17373
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053017374 case WDA_PAUSE_TL_IND:
17375 {
17376 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
17377 break;
17378 }
Kapil Gupta3d923fb2016-12-20 18:59:27 +053017379#ifdef WLAN_FEATURE_APFIND
17380 case WDA_APFIND_SET_CMD:
17381 {
17382 WDA_Process_apfind_set_cmd(pWDA,
17383 (struct hal_apfind_request *)pMsg->bodyptr);
17384 }
17385#endif
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017386#ifdef SAP_AUTH_OFFLOAD
17387 case WDA_SET_SAP_AUTH_OFL:
17388 {
17389 wda_process_sap_auth_offload(pWDA,
17390 (struct tSirSapOffloadInfo*)pMsg->bodyptr);
17391 break;
17392 }
Agrawal Ashisha8e8a722016-10-18 19:07:45 +053017393 case WDA_SAP_OFL_ADD_STA:
17394 {
17395 WDA_ProcessSapAuthOffloadAddStaReq(pWDA,
17396 (tAddStaParams *)pMsg->bodyptr);
17397 break;
17398 }
17399 case WDA_SAP_OFL_DEL_STA:
17400 {
17401 WDA_ProcessSapAuthOffloadDelStaReq(pWDA,
17402 (tDeleteStaParams *)pMsg->bodyptr);
17403 break;
17404 }
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017405#endif
Manjeet Singh3ed79242017-01-11 19:04:32 +053017406 case WDA_CAP_TSF_REQ:
17407 {
17408 WDA_ProcessCapTsfReq(pWDA, (tSirCapTsfParams *)
17409 pMsg->bodyptr);
17410 break;
17411 }
17412 case WDA_GET_TSF_REQ:
17413 {
17414 WDA_ProcessGetTsfReq(pWDA, (tSirCapTsfParams *)pMsg->bodyptr);
17415 break;
17416 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017417 default:
17418 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053017419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017420 "No Handling for msg type %x in WDA "
17421 ,pMsg->type);
17422 /* Do Nothing? MSG Body should be freed at here */
17423 if(NULL != pMsg->bodyptr)
17424 {
17425 vos_mem_free(pMsg->bodyptr);
17426 }
17427 //WDA_VOS_ASSERT(0) ;
17428 }
17429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017430 return status ;
17431}
17432
Jeff Johnson295189b2012-06-20 16:38:30 -070017433/*
17434 * FUNCTION: WDA_LowLevelIndCallback
17435 * IND API callback from WDI, send Ind to PE
17436 */
17437void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
17438 void* pUserData )
17439{
17440 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
17441#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17442 tSirRSSINotification rssiNotification;
17443#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017444 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017445 {
17446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017447 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017448 VOS_ASSERT(0);
17449 return ;
17450 }
17451
17452 switch(wdiLowLevelInd->wdiIndicationType)
17453 {
17454 case WDI_RSSI_NOTIFICATION_IND:
17455 {
17456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17457 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017458#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17459 rssiNotification.bReserved =
17460 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
17461 rssiNotification.bRssiThres1NegCross =
17462 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
17463 rssiNotification.bRssiThres1PosCross =
17464 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
17465 rssiNotification.bRssiThres2NegCross =
17466 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
17467 rssiNotification.bRssiThres2PosCross =
17468 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
17469 rssiNotification.bRssiThres3NegCross =
17470 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
17471 rssiNotification.bRssiThres3PosCross =
17472 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080017473 rssiNotification.avgRssi = (v_S7_t)
17474 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070017475 WLANTL_BMPSRSSIRegionChangedNotification(
17476 pWDA->pVosContext,
17477 &rssiNotification);
17478#endif
17479 break ;
17480 }
17481 case WDI_MISSED_BEACON_IND:
17482 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017483 tpSirSmeMissedBeaconInd pMissBeacInd =
17484 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17486 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017487 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017488 if(NULL == pMissBeacInd)
17489 {
17490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17491 "%s: VOS MEM Alloc Failure", __func__);
17492 break;
17493 }
17494 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
17495 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
17496 pMissBeacInd->bssIdx =
17497 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
17498 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017499 break ;
17500 }
Kapil Gupta7a3d9b12016-12-20 20:36:38 +053017501#ifdef WLAN_FEATURE_APFIND
17502 case WDI_AP_FOUND_IND:
17503 {
17504 WDA_SendMsg(pWDA, WDA_AP_FIND_IND, NULL, 0) ;
17505 break ;
17506 }
17507#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017508 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
17509 {
17510 /* TODO: Decode Ind and send Ind to PE */
17511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17512 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
17513 break ;
17514 }
17515
17516 case WDI_MIC_FAILURE_IND:
17517 {
17518 tpSirSmeMicFailureInd pMicInd =
17519 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
17520
17521 if(NULL == pMicInd)
17522 {
17523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017525 break;
17526 }
17527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17528 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017529 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
17530 pMicInd->length = sizeof(tSirSmeMicFailureInd);
17531 vos_mem_copy(pMicInd->bssId,
17532 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
17533 sizeof(tSirMacAddr));
17534 vos_mem_copy(pMicInd->info.srcMacAddr,
17535 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
17536 sizeof(tSirMacAddr));
17537 vos_mem_copy(pMicInd->info.taMacAddr,
17538 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
17539 sizeof(tSirMacAddr));
17540 vos_mem_copy(pMicInd->info.dstMacAddr,
17541 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
17542 sizeof(tSirMacAddr));
17543 vos_mem_copy(pMicInd->info.rxMacAddr,
17544 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
17545 sizeof(tSirMacAddr));
17546 pMicInd->info.multicast =
17547 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
17548 pMicInd->info.keyId=
17549 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
17550 pMicInd->info.IV1=
17551 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
17552 vos_mem_copy(pMicInd->info.TSC,
17553 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070017554 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
17555 (void *)pMicInd , 0) ;
17556 break ;
17557 }
17558 case WDI_FATAL_ERROR_IND:
17559 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070017560 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070017561 /* TODO: Decode Ind and send Ind to PE */
17562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17563 "Received WDI_FATAL_ERROR_IND from WDI ");
17564 break ;
17565 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017566 case WDI_DEL_STA_IND:
17567 {
Jeff Johnson295189b2012-06-20 16:38:30 -070017568 tpDeleteStaContext pDelSTACtx =
17569 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
17570
17571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17572 "Received WDI_DEL_STA_IND from WDI ");
17573 if(NULL == pDelSTACtx)
17574 {
17575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017576 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017577 break;
17578 }
17579 vos_mem_copy(pDelSTACtx->addr2,
17580 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
17581 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017582 vos_mem_copy(pDelSTACtx->bssId,
17583 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
17584 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017585 pDelSTACtx->assocId =
17586 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
17587 pDelSTACtx->reasonCode =
17588 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
17589 pDelSTACtx->staId =
17590 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070017591 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
17592 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017593 break ;
17594 }
17595 case WDI_COEX_IND:
17596 {
17597 tANI_U32 index;
17598 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053017599 tSirSmeCoexInd *pSmeCoexInd;
17600
17601 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
17602 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
17603 {
17604 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
17605 {
17606 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17607 FL("Coex state: 0x%x coex feature: 0x%x"),
17608 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
17609 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
17610
17611 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
17612 {
17613 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
17614 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
17615 }
17616 }
17617 break;
17618 }
17619
17620 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017621 if(NULL == pSmeCoexInd)
17622 {
17623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017624 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017625 break;
17626 }
17627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17628 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017629 /* Message Header */
17630 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
17631 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017632 /* Info from WDI Indication */
17633 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
17634 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
17635 {
17636 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
17637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017638 /* VOS message wrapper */
17639 vosMsg.type = eWNI_SME_COEX_IND;
17640 vosMsg.bodyptr = (void *)pSmeCoexInd;
17641 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017642 /* Send message to SME */
17643 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17644 {
17645 /* free the mem and return */
17646 vos_mem_free((v_VOID_t *)pSmeCoexInd);
17647 }
17648 else
17649 {
17650 /* DEBUG */
17651 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17652 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
17653 pSmeCoexInd->coexIndType,
17654 pSmeCoexInd->coexIndData[0],
17655 pSmeCoexInd->coexIndData[1],
17656 pSmeCoexInd->coexIndData[2],
17657 pSmeCoexInd->coexIndData[3]);
17658 }
17659 break;
17660 }
17661 case WDI_TX_COMPLETE_IND:
17662 {
17663 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
17664 /* Calling TxCompleteAck Indication from wda context*/
17665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17666 "Complete Indication received from HAL");
17667 if( pWDA->pAckTxCbFunc )
17668 {
17669 if( VOS_STATUS_SUCCESS !=
17670 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
17671 {
17672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17673 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017674 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053017675 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017676 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
17677 else
17678 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017679 pWDA->pAckTxCbFunc = NULL;
17680 }
17681 else
17682 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053017683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017684 "Tx Complete Indication is received after timeout ");
17685 }
17686 break;
17687 }
Viral Modid86bde22012-12-10 13:09:21 -080017688 case WDI_P2P_NOA_START_IND :
17689 {
17690 tSirP2PNoaStart *pP2pNoaStart =
17691 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
17692
17693 if (NULL == pP2pNoaStart)
17694 {
17695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17696 "Memory allocation failure, "
17697 "WDI_P2P_NOA_START_IND not forwarded");
17698 break;
17699 }
17700 pP2pNoaStart->status =
17701 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
17702 pP2pNoaStart->bssIdx =
17703 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
17704 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
17705 (void *)pP2pNoaStart , 0) ;
17706 break;
17707 }
17708
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017709#ifdef FEATURE_WLAN_TDLS
17710 case WDI_TDLS_IND :
17711 {
17712 tSirTdlsInd *pTdlsInd =
17713 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
17714
17715 if (NULL == pTdlsInd)
17716 {
17717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17718 "Memory allocation failure, "
17719 "WDI_TDLS_IND not forwarded");
17720 break;
17721 }
17722 pTdlsInd->status =
17723 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
17724 pTdlsInd->assocId =
17725 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
17726 pTdlsInd->staIdx =
17727 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
17728 pTdlsInd->reasonCode =
17729 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
17730 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
17731 (void *)pTdlsInd , 0) ;
17732 break;
17733 }
17734#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017735 case WDI_P2P_NOA_ATTR_IND :
17736 {
17737 tSirP2PNoaAttr *pP2pNoaAttr =
17738 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17740 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070017741 if (NULL == pP2pNoaAttr)
17742 {
17743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17744 "Memory allocation failure, "
17745 "WDI_P2P_NOA_ATTR_IND not forwarded");
17746 break;
17747 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017748 pP2pNoaAttr->index =
17749 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
17750 pP2pNoaAttr->oppPsFlag =
17751 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
17752 pP2pNoaAttr->ctWin =
17753 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
17754
17755 pP2pNoaAttr->uNoa1IntervalCnt =
17756 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
17757 pP2pNoaAttr->uNoa1Duration =
17758 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
17759 pP2pNoaAttr->uNoa1Interval =
17760 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
17761 pP2pNoaAttr->uNoa1StartTime =
17762 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017763 pP2pNoaAttr->uNoa2IntervalCnt =
17764 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
17765 pP2pNoaAttr->uNoa2Duration =
17766 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
17767 pP2pNoaAttr->uNoa2Interval =
17768 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
17769 pP2pNoaAttr->uNoa2StartTime =
17770 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017771 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
17772 (void *)pP2pNoaAttr , 0) ;
17773 break;
17774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017775#ifdef FEATURE_WLAN_SCAN_PNO
17776 case WDI_PREF_NETWORK_FOUND_IND:
17777 {
17778 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017779 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
17780 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17781 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
17782 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
17783
Jeff Johnson295189b2012-06-20 16:38:30 -070017784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17785 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070017786 if (NULL == pPrefNetworkFoundInd)
17787 {
17788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17789 "Memory allocation failure, "
17790 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053017791 if (NULL !=
17792 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17793 {
17794 wpalMemoryFree(
17795 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
17796 );
17797 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017799 break;
17800 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017801 /* Message Header */
17802 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017803 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070017804
17805 /* Info from WDI Indication */
17806 pPrefNetworkFoundInd->ssId.length =
17807 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070017808 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070017809 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
17810 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
17811 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070017812 if (NULL !=
17813 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17814 {
17815 pPrefNetworkFoundInd->frameLength =
17816 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17817 vos_mem_copy( pPrefNetworkFoundInd->data,
17818 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
17819 pPrefNetworkFoundInd->frameLength);
17820 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
17821 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17822 }
17823 else
17824 {
17825 pPrefNetworkFoundInd->frameLength = 0;
17826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017827 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070017828 /* VOS message wrapper */
17829 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
17830 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
17831 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017832 /* Send message to SME */
17833 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17834 {
17835 /* free the mem and return */
17836 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
17837 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017838 break;
17839 }
17840#endif // FEATURE_WLAN_SCAN_PNO
17841
17842#ifdef WLAN_WAKEUP_EVENTS
17843 case WDI_WAKE_REASON_IND:
17844 {
17845 vos_msg_t vosMsg;
17846 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
17847 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
17848 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
17849
17850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053017851 "[WAKE_REASON WDI] WAKE_REASON_IND Type (%d) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
Jeff Johnson295189b2012-06-20 16:38:30 -070017852 wdiLowLevelInd->wdiIndicationType,
17853 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
17854 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
17855 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17856
17857 if (NULL == pWakeReasonInd)
17858 {
17859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17860 "Memory allocation failure, "
17861 "WDI_WAKE_REASON_IND not forwarded");
17862 break;
17863 }
17864
17865 vos_mem_zero(pWakeReasonInd, allocSize);
17866
17867 /* Message Header */
17868 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
17869 pWakeReasonInd->mesgLen = allocSize;
17870
17871 /* Info from WDI Indication */
17872 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
17873 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
17874 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
17875 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
17876 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
17877 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
17878 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
17879 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17880
17881 /* VOS message wrapper */
17882 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
17883 vosMsg.bodyptr = (void *) pWakeReasonInd;
17884 vosMsg.bodyval = 0;
17885
17886 /* Send message to SME */
17887 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17888 {
17889 /* free the mem and return */
17890 vos_mem_free((v_VOID_t *) pWakeReasonInd);
17891 }
17892
17893 break;
17894 }
17895#endif // WLAN_WAKEUP_EVENTS
17896
17897 case WDI_TX_PER_HIT_IND:
17898 {
17899 vos_msg_t vosMsg;
17900 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
17901 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
17902 /* VOS message wrapper */
17903 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
17904 vosMsg.bodyptr = NULL;
17905 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017906 /* Send message to SME */
17907 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17908 {
17909 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
17910 }
17911 break;
17912 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017913#ifdef WLAN_FEATURE_RMC
17914 case WDI_TX_FAIL_IND:
17915 {
17916 if (pWDA->txFailIndCallback)
17917 {
17918 pWDA->txFailIndCallback(
17919 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
17920 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
17921 }
17922 break;
17923 }
17924#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070017925
Leo Chang9056f462013-08-01 19:21:11 -070017926#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070017927 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070017928 {
Leo Changd9df8aa2013-09-26 13:32:26 -070017929 vos_msg_t vosMsg;
17930 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017931
Leo Changd9df8aa2013-09-26 13:32:26 -070017932 lphbInd =
17933 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
17934 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070017935 {
17936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17937 "%s: LPHB IND buffer alloc Fail", __func__);
17938 return ;
17939 }
17940
Leo Changd9df8aa2013-09-26 13:32:26 -070017941 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070017942 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070017943 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070017944 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070017945 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070017946 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
17947
17948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070017949 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070017950 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
17951
Leo Changd9df8aa2013-09-26 13:32:26 -070017952 vosMsg.type = eWNI_SME_LPHB_IND;
17953 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017954 vosMsg.bodyval = 0;
17955 /* Send message to SME */
17956 if (VOS_STATUS_SUCCESS !=
17957 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17958 {
17959 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17960 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070017961 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070017962 }
17963 break;
17964 }
17965#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070017966 case WDI_PERIODIC_TX_PTRN_FW_IND:
17967 {
17968 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17969 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
17970 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
17971 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
17972 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
17973 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
17974 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
17975
17976 break;
17977 }
Leo Chang9056f462013-08-01 19:21:11 -070017978
Ravi Joshid2ca7c42013-07-23 08:37:49 -070017979 case WDI_IBSS_PEER_INACTIVITY_IND:
17980 {
17981 tSirIbssPeerInactivityInd *pIbssInd =
17982 (tSirIbssPeerInactivityInd *)
17983 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
17984
17985 if (NULL == pIbssInd)
17986 {
17987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17988 "Memory allocation failure, "
17989 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
17990 break;
17991 }
17992
17993 pIbssInd->bssIdx =
17994 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
17995 pIbssInd->staIdx =
17996 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
17997 vos_mem_copy(pIbssInd->peerAddr,
17998 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
17999 sizeof(tSirMacAddr));
18000 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
18001 break;
18002 }
18003
Abhishek Singh00b71972016-01-07 10:51:04 +053018004#ifdef WLAN_FEATURE_RMC
18005 case WDI_RMC_RULER_PICK_NEW :
18006 {
18007 tSirRmcUpdateInd *pRmcUpdateInd =
18008 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
18009
18010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18011 "Received WDI_RMC_UPDATE_IND from WDI");
18012 if (NULL == pRmcUpdateInd)
18013 {
18014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18015 "Memory allocation failure, "
18016 "WDI_RMC_UPDATE_IND not forwarded");
18017 break;
18018 }
18019
18020 pRmcUpdateInd->indication =
18021 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
18022 pRmcUpdateInd->role =
18023 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
18024
18025 /* Copy the mcast transmitter which should be us */
18026 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
18027 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
18028 mcastTransmitter,
18029 sizeof(tSirMacAddr));
18030 /* Copy the mcast group address */
18031 vos_mem_copy(pRmcUpdateInd->mcastGroup,
18032 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
18033 sizeof(tSirMacAddr));
18034 vos_mem_copy(pRmcUpdateInd->mcastRuler,
18035 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
18036 sizeof(tSirMacAddr));
18037 vos_mem_copy(pRmcUpdateInd->ruler,
18038 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
18039 sizeof(pRmcUpdateInd->ruler));
18040
18041 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
18042 break;
18043 }
18044#endif /* WLAN_FEATURE_RMC */
18045
Rajeev79dbe4c2013-10-05 11:03:42 +053018046#ifdef FEATURE_WLAN_BATCH_SCAN
18047 case WDI_BATCH_SCAN_RESULT_IND:
18048 {
18049 void *pBatchScanResult;
18050 void *pCallbackContext;
18051 tpAniSirGlobal pMac;
18052
18053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
18054 "Received WDI_BATCHSCAN_RESULT_IND from FW");
18055
18056 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053018057 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053018058 {
18059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18060 "%s:pWDA is NULL", __func__);
18061 VOS_ASSERT(0);
18062 return;
18063 }
18064
18065 pBatchScanResult =
18066 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
18067 if (NULL == pBatchScanResult)
18068 {
18069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18070 "%s:Batch scan result from FW is null can't invoke HDD callback",
18071 __func__);
18072 VOS_ASSERT(0);
18073 return;
18074 }
18075
18076 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18077 if (NULL == pMac)
18078 {
18079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18080 "%s:pMac is NULL", __func__);
18081 VOS_ASSERT(0);
18082 return;
18083 }
18084
18085 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
18086 /*call hdd callback with set batch scan response data*/
18087 if(pMac->pmc.batchScanResultCallback)
18088 {
18089 pMac->pmc.batchScanResultCallback(pCallbackContext,
18090 pBatchScanResult);
18091 }
18092 else
18093 {
18094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18095 "%s:HDD callback is null", __func__);
18096 VOS_ASSERT(0);
18097 }
18098 break;
18099 }
18100#endif
18101
Leo Chang0b0e45a2013-12-15 15:18:55 -080018102#ifdef FEATURE_WLAN_CH_AVOID
18103 case WDI_CH_AVOID_IND:
18104 {
18105 vos_msg_t vosMsg;
18106 tSirChAvoidIndType *chAvoidInd;
18107
18108 chAvoidInd =
18109 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
18110 if (NULL == chAvoidInd)
18111 {
18112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18113 "%s: CH_AVOID IND buffer alloc Fail", __func__);
18114 return ;
18115 }
18116
18117 chAvoidInd->avoidRangeCount =
18118 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
18119 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
18120 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
18121 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
18122
18123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18124 "%s : WDA CH avoid notification", __func__);
18125
18126 vosMsg.type = eWNI_SME_CH_AVOID_IND;
18127 vosMsg.bodyptr = chAvoidInd;
18128 vosMsg.bodyval = 0;
18129 /* Send message to SME */
18130 if (VOS_STATUS_SUCCESS !=
18131 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18132 {
18133 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18134 "post eWNI_SME_CH_AVOID_IND to SME Failed");
18135 vos_mem_free(chAvoidInd);
18136 }
18137 break;
18138 }
18139#endif /* FEATURE_WLAN_CH_AVOID */
18140
Sunil Duttbd736ed2014-05-26 21:19:41 +053018141#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18142 case WDI_LL_STATS_RESULTS_IND:
18143 {
18144 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018145 tpAniSirGlobal pMac;
18146
18147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18148 "Received WDI_LL_STATS_RESULTS_IND from FW");
18149
18150 /*sanity check*/
18151 if (NULL == pWDA)
18152 {
18153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18154 "%s:pWDA is NULL", __func__);
18155 VOS_ASSERT(0);
18156 return;
18157 }
18158
18159 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053018160 (void *)wdiLowLevelInd->
18161 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018162 if (NULL == pLinkLayerStatsInd)
18163 {
18164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18165 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
18166 __func__);
18167 VOS_ASSERT(0);
18168 return;
18169 }
18170
18171 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18172 if (NULL == pMac)
18173 {
18174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18175 "%s:pMac is NULL", __func__);
18176 VOS_ASSERT(0);
18177 return;
18178 }
18179
Dino Mycled3d50022014-07-07 12:58:25 +053018180 /* call hdd callback with Link Layer Statistics.
18181 * vdev_id/ifacId in link_stats_results will be
18182 * used to retrieve the correct HDD context
18183 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053018184 if (pMac->sme.pLinkLayerStatsIndCallback)
18185 {
Dino Mycled3d50022014-07-07 12:58:25 +053018186 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053018187 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053018188 pLinkLayerStatsInd,
18189 wdiLowLevelInd->
18190 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053018191 }
18192 else
18193 {
18194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18195 "%s:HDD callback is null", __func__);
18196 }
18197 break;
18198 }
18199#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
18200
Dino Mycle41bdc942014-06-10 11:30:24 +053018201#ifdef WLAN_FEATURE_EXTSCAN
18202 case WDI_EXTSCAN_PROGRESS_IND:
18203 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
18204 case WDI_EXTSCAN_SCAN_RESULT_IND:
18205 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018206 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053018207 {
18208 void *pEXTScanData;
18209 void *pCallbackContext;
18210 tpAniSirGlobal pMac;
18211 tANI_U16 indType;
18212
18213 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18214 "Received WDI_EXTSCAN Indications from FW");
18215 /*sanity check*/
18216 if (NULL == pWDA)
18217 {
18218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18219 "%s:pWDA is NULL", __func__);
18220 VOS_ASSERT(0);
18221 return;
18222 }
18223 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
18224 {
18225 indType = WDA_EXTSCAN_PROGRESS_IND;
18226
18227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18228 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
18229 }
18230 if (wdiLowLevelInd->wdiIndicationType ==
18231 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
18232 {
18233 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
18234
18235 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18236 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
18237 }
18238 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
18239 {
18240 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
18241
18242 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18243 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
18244 }
18245 if (wdiLowLevelInd->wdiIndicationType ==
18246 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
18247 {
18248 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
18249
18250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18251 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
18252 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018253 if (wdiLowLevelInd->wdiIndicationType ==
18254 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
18255 {
18256 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
18257
18258 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18259 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
18260 }
Dino Mycle41bdc942014-06-10 11:30:24 +053018261
18262 pEXTScanData =
18263 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
18264 if (NULL == pEXTScanData)
18265 {
18266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18267 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
18268 __func__);
18269 VOS_ASSERT(0);
18270 return;
18271 }
18272
18273 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18274 if (NULL == pMac)
18275 {
18276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18277 "%s:pMac is NULL", __func__);
18278 VOS_ASSERT(0);
18279 return;
18280 }
18281
18282 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18283
18284 if(pMac->sme.pEXTScanIndCb)
18285 {
18286 pMac->sme.pEXTScanIndCb(pCallbackContext,
18287 indType,
18288 pEXTScanData);
18289 }
18290 else
18291 {
18292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18293 "%s:HDD callback is null", __func__);
18294 }
18295 break;
18296 }
18297#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053018298 case WDI_DEL_BA_IND:
18299 {
18300 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053018301 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053018302
18303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18304 "Received WDI_DEL_BA_IND from WDI ");
18305 if(NULL == pDelBAInd)
18306 {
18307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18308 "%s: VOS MEM Alloc Failure", __func__);
18309 break;
18310 }
18311 vos_mem_copy(pDelBAInd->peerMacAddr,
18312 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
18313 sizeof(tSirMacAddr));
18314 vos_mem_copy(pDelBAInd->bssId,
18315 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
18316 sizeof(tSirMacAddr));
18317 pDelBAInd->staIdx =
18318 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
18319 pDelBAInd->baTID =
18320 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
18321 pDelBAInd->baDirection =
18322 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
18323 pDelBAInd->reasonCode =
18324 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
18325
18326 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
18327 (void *)pDelBAInd , 0) ;
18328 break;
18329 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053018330 case WDI_NAN_EVENT_IND:
18331 {
18332 vos_msg_t vosMsg;
18333 tpSirNanEvent pSirNanEvent = NULL;
18334
18335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18336 "Received WDI_NAN_EVENT");
18337
18338 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
18339 - sizeof( pSirNanEvent->event_data)
18340 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18341
18342 if (NULL == pSirNanEvent)
18343 {
18344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18345 "%s: VOS MEM Alloc Failure", __func__);
18346 VOS_ASSERT(0) ;
18347 break;
18348 }
18349
18350 pSirNanEvent->event_data_len =
18351 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
18352
18353 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
18354 {
18355 vos_mem_copy( pSirNanEvent->event_data,
18356 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
18357 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18358 }
18359
18360 /* VOS message wrapper */
18361 vosMsg.type = eWNI_SME_NAN_EVENT;
18362 vosMsg.bodyptr = pSirNanEvent;
18363 vosMsg.bodyval = 0;
18364
18365 /* Send message to SME */
18366 if (VOS_STATUS_SUCCESS
18367 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18368 {
18369 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18370 "post eWNI_SME_NAN_EVENT to SME Failed");
18371 vos_mem_free(pSirNanEvent);
18372 }
18373 break;
18374 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018375 case WDI_LOST_LINK_PARAMS_IND:
18376 {
18377 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
18378 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053018379
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018380 if (NULL == pLostLinkParamInd)
18381 {
18382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18383 "%s: VOS MEM Alloc Failure", __func__);
18384 break;
18385 }
18386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18387 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
18388
18389 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
18390 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
18391 pLostLinkParamInd->info.bssIdx =
18392 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
18393 pLostLinkParamInd->info.rssi =
18394 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
18395 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
18396 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
18397 sizeof(tSirMacAddr));
18398 pLostLinkParamInd->info.linkFlCnt =
18399 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
18400 pLostLinkParamInd->info.linkFlTx =
18401 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
18402 pLostLinkParamInd->info.lastDataRate =
18403 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
18404 pLostLinkParamInd->info.rsvd1 =
18405 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
18406 pLostLinkParamInd->info.rsvd2 =
18407 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
18408 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
18409 (void *)pLostLinkParamInd , 0) ;
18410 break;
18411 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053018412 case WDI_RSSI_BREACHED_IND:
18413 {
18414 WDI_RssiBreachedIndType *pRssiBreachedInd;
18415 tpAniSirGlobal pMac;
18416
18417 pRssiBreachedInd =
18418 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
18419 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18420 "Received WDI_RSSI_BREACHED_IND from FW");
18421
18422 vos_mem_copy(pRssiBreachedInd,
18423 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
18424 sizeof(WDI_RssiBreachedIndType));
18425
18426 /*sanity check*/
18427 if (NULL == pWDA)
18428 {
18429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18430 "%s:pWDA is NULL", __func__);
18431 vos_mem_free(pRssiBreachedInd);
18432 VOS_ASSERT(0);
18433 return;
18434 }
18435
18436 if (NULL == pRssiBreachedInd)
18437 {
18438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18439 "%s:Breach indication from FW is null can't invoke HDD callback",
18440 __func__);
18441 VOS_ASSERT(0);
18442 return;
18443 }
18444
18445 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18446 if (NULL == pMac)
18447 {
18448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18449 "%s:pMac is NULL", __func__);
18450 VOS_ASSERT(0);
18451 vos_mem_free(pRssiBreachedInd);
18452 return;
18453 }
18454
18455 if (pMac->sme.rssiThresholdBreachedCb)
18456 {
18457 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
18458 }
18459 else
18460 {
18461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18462 "%s:HDD callback is null", __func__);
18463 }
18464 vos_mem_free(pRssiBreachedInd);
18465 break;
18466 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018467#ifdef FEATURE_OEM_DATA_SUPPORT
18468 case WDI_START_OEM_DATA_RSP_IND_NEW:
18469 {
18470 void *pCallbackContext;
18471 tpAniSirGlobal pMac;
18472 tANI_U16 indType;
18473 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018474 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018475
18476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18477 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
18478
18479 /*sanity check*/
18480 if (NULL == pWDA)
18481 {
18482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18483 "%s:pWDA is NULL", __func__);
18484 VOS_ASSERT(0);
18485 return;
18486 }
18487
18488 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
18489 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018490 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18491 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018492 if (NULL == pOemRspNewIndData)
18493 {
18494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18495 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
18496 __func__);
18497 VOS_ASSERT(0);
18498 return;
18499 }
18500
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018501 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18502 OemRspNewLen;
18503
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018504 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18505 if (NULL == pMac)
18506 {
18507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18508 "%s:pMac is NULL", __func__);
18509 VOS_ASSERT(0);
18510 return;
18511 }
18512
18513 pCallbackContext = pMac->sme.pOemDataCallbackContext;
18514
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18516 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
18517
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018518 if(pMac->sme.pOemDataIndCb)
18519 {
18520 pMac->sme.pOemDataIndCb(pCallbackContext,
18521 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018522 pOemRspNewIndData,
18523 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018524 }
18525 else
18526 {
18527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18528 "%s:HDD callback is null", __func__);
18529 }
18530 break;
18531 }
18532#endif /* FEATURE_OEM_DATA_SUPPORT */
18533
Jeff Johnson295189b2012-06-20 16:38:30 -070018534 default:
18535 {
18536 /* TODO error */
18537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18538 "Received UNKNOWN Indication from WDI ");
18539 }
18540 }
18541 return ;
18542}
18543
Jeff Johnson295189b2012-06-20 16:38:30 -070018544/*
18545 * BA related processing in WDA.
18546 */
Jeff Johnson295189b2012-06-20 16:38:30 -070018547void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
18548 void* pUserData)
18549{
18550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18551 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070018552 if(NULL == pWdaParams)
18553 {
18554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018556 VOS_ASSERT(0) ;
18557 return ;
18558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018559 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070018560 vos_mem_free(pWdaParams->wdaMsgParam) ;
18561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18562 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018564 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018565 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
18566 {
18567 tANI_U8 i = 0 ;
18568 tBaActivityInd *baActivityInd = NULL ;
18569 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
18570 tANI_U8 allocSize = sizeof(tBaActivityInd)
18571 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
18572 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
18573 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018574 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018575 if(NULL == baActivityInd)
18576 {
18577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018579 VOS_ASSERT(0) ;
18580 return;
18581 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018582 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
18583 sizeof(tSirMacAddr)) ;
18584 baActivityInd->baCandidateCnt = baCandidateCount ;
18585
18586 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
18587 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
18588
18589 for(i = 0 ; i < baCandidateCount ; i++)
18590 {
18591 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018592 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
18593 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018594 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
18595 {
18596 baCandidate->baInfo[tid].fBaEnable =
18597 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
18598 baCandidate->baInfo[tid].startingSeqNum =
18599 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
18600 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018601 wdiBaCandidate++ ;
18602 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018603 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018604 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
18605 }
18606 else
18607 {
18608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18609 "BA Trigger RSP with Failure received ");
18610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018611 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018612}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018613
18614
18615/*
18616 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
18617 * during MCC
18618 */
18619void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
18620{
18621 wpt_uint32 enabled;
18622 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
18623 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
18624 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
18625
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018626 if (NULL == pMac )
18627 {
18628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18629 "%s: Invoked with invalid MAC context ", __func__ );
18630 VOS_ASSERT(0);
18631 return;
18632 }
18633
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018634 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18635 != eSIR_SUCCESS)
18636 {
18637 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18638 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18639 return;
18640 }
18641
18642 if(!enabled)
18643 {
18644 return;
18645 }
18646
18647 if(NULL == pWDA)
18648 {
18649 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18650 "%s:WDA context is NULL", __func__);
18651 VOS_ASSERT(0);
18652 return;
18653 }
18654
18655 if(activate)
18656 {
18657 if( VOS_STATUS_SUCCESS !=
18658 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18659 {
18660 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18661 "Traffic Stats Timer Start Failed ");
18662 return;
18663 }
18664 WDI_DS_ActivateTrafficStats();
18665 }
18666 else
18667 {
18668 WDI_DS_DeactivateTrafficStats();
18669 WDI_DS_ClearTrafficStats();
18670
18671 if( VOS_STATUS_SUCCESS !=
18672 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18673 {
18674 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18675 "Traffic Stats Timer Stop Failed ");
18676 return;
18677 }
18678 }
18679}
18680
18681/*
18682 * Traffic Stats Timer handler
18683 */
18684void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
18685{
18686 WDI_Status wdiStatus;
18687 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
18688 WDI_TrafficStatsIndType trafficStatsIndParams;
18689 wpt_uint32 length, enabled;
18690 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18691
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018692 if (NULL == pMac )
18693 {
18694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18695 "%s: Invoked with invalid MAC context ", __func__ );
18696 VOS_ASSERT(0);
18697 return;
18698 }
18699
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018700 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18701 != eSIR_SUCCESS)
18702 {
18703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18704 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18705 return;
18706 }
18707
18708 if(!enabled)
18709 {
18710 WDI_DS_DeactivateTrafficStats();
18711 return;
18712 }
18713
18714 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
18715
18716 if(pWdiTrafficStats != NULL)
18717 {
18718 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
18719 trafficStatsIndParams.length = length;
18720 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080018721 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018722 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
18723 trafficStatsIndParams.pUserData = pWDA;
18724
18725 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
18726
18727 if(WDI_STATUS_PENDING == wdiStatus)
18728 {
18729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18730 "Pending received for %s:%d ",__func__,__LINE__ );
18731 }
18732 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
18733 {
18734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18735 "Failure in %s:%d ",__func__,__LINE__ );
18736 }
18737
18738 WDI_DS_ClearTrafficStats();
18739 }
18740 else
18741 {
18742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18743 "pWdiTrafficStats is Null");
18744 }
18745
18746 if( VOS_STATUS_SUCCESS !=
18747 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18748 {
18749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18750 "Traffic Stats Timer Start Failed ");
18751 return;
18752 }
18753}
18754
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018755bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
18756{
18757 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
18758 return true;
18759 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
18760 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
18761 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
18762 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
18763 jiffies_to_msecs(jiffies)))
18764 {
18765 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18766 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
18767 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
18768 return false;
18769 }
18770 return true;
18771}
18772
Jeff Johnson295189b2012-06-20 16:38:30 -070018773/*
18774 * BA Activity check timer handler
18775 */
18776void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
18777{
18778 tANI_U8 curSta = 0 ;
18779 tANI_U8 tid = 0 ;
18780 tANI_U8 size = 0 ;
18781 tANI_U8 baCandidateCount = 0 ;
18782 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018783 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070018784 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018785 tpAniSirGlobal pMac;
18786
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018787 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070018788 {
18789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018790 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018791 VOS_ASSERT(0);
18792 return ;
18793 }
18794 if(WDA_MAX_STA < pWDA->wdaMaxSta)
18795 {
18796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18797 "Inconsistent STA entries in WDA");
18798 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018799 }
18800 if(NULL == pWDA->pVosContext)
18801 {
18802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18803 "%s: pVosContext is NULL",__func__);
18804 VOS_ASSERT(0);
18805 return ;
18806 }
18807 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053018808 if(NULL == pMac)
18809 {
18810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18811 "%s: pMac is NULL",__func__);
18812 VOS_ASSERT(0);
18813 return ;
18814 }
18815
Abhishek Singh0644e482014-10-06 18:38:23 +053018816 if (wlan_cfgGetInt(pMac,
18817 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
18818 eSIR_SUCCESS)
18819 {
18820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18821 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
18822 val = 0;
18823 }
18824
Jeff Johnson295189b2012-06-20 16:38:30 -070018825 /* walk through all STA entries and find out TX packet count */
18826 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
18827 {
Abhishek Singh0644e482014-10-06 18:38:23 +053018828 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018829#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018830 // We can only do BA on "hard" STAs.
18831 if (!(IS_HWSTA_IDX(curSta)))
18832 {
18833 continue;
18834 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018835#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018836 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
18837 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018838 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018839 tANI_U32 txPktCount = 0 ;
18840 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018841 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018842 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
18843 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070018844 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
18845 curSta, tid, &txPktCount)))
18846 {
18847#if 0
18848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18849 "************* %d:%d, %d ",curSta, txPktCount,
18850 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
18851#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053018852 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
18853 (currentOperChan <= SIR_11B_CHANNEL_END)))
18854 {
18855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18856 "%s: BTC disabled aggregation - dont start "
18857 "TX ADDBA req",__func__);
18858 }
18859 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018860 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018861 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053018862 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
18863 pWDA->wdaGlobalSystemRole) && txPktCount )
18864 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
18865 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070018866 {
18867 /* get prepare for sending message to HAL */
18868 //baCandidate[baCandidateCount].staIdx = curSta ;
18869 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
18870 newBaCandidate = WDA_ENABLE_BA ;
18871 }
18872 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
18873 }
18874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018875 /* fill the entry for all the sta with given TID's */
18876 if(WDA_ENABLE_BA == newBaCandidate)
18877 {
18878 /* move to next BA candidate */
18879 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
18880 size += sizeof(WDI_TriggerBAReqCandidateType) ;
18881 baCandidateCount++ ;
18882 newBaCandidate = WDA_DISABLE_BA ;
18883 }
18884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018885 /* prepare and send message to hal */
18886 if( 0 < baCandidateCount)
18887 {
18888 WDI_Status status = WDI_STATUS_SUCCESS ;
18889 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
18890 tWDA_ReqParams *pWdaParams =
18891 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018892 if(NULL == pWdaParams)
18893 {
18894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018896 VOS_ASSERT(0) ;
18897 return;
18898 }
18899 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
18900 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
18901 if(NULL == wdiTriggerBaReq)
18902 {
18903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018905 VOS_ASSERT(0) ;
18906 vos_mem_free(pWdaParams);
18907 return;
18908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018909 do
18910 {
18911 WDI_TriggerBAReqinfoType *triggerBaInfo =
18912 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
18913 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
18914 /* TEMP_FIX: Need to see if WDI need check for assoc session for
18915 * for each request */
18916 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
18917 triggerBaInfo->ucBASessionID = 0;
18918 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
18919 } while(0) ;
18920 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
18921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018922 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018923 pWdaParams->pWdaContext = pWDA;
18924 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
18925 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053018926 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070018927 WDA_TriggerBaReqCallback, pWdaParams) ;
18928 if(IS_WDI_STATUS_FAILURE(status))
18929 {
18930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18931 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
18932 vos_mem_free(pWdaParams->wdaMsgParam) ;
18933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18934 vos_mem_free(pWdaParams) ;
18935 }
18936 }
18937 else
18938 {
18939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18940 "There is no TID for initiating BA");
18941 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018942 if( VOS_STATUS_SUCCESS !=
18943 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18944 {
18945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18946 "BA Activity Timer Stop Failed ");
18947 return ;
18948 }
18949 if( VOS_STATUS_SUCCESS !=
18950 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18951 {
18952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18953 "BA Activity Timer Start Failed ");
18954 return;
18955 }
18956 return ;
18957}
Jeff Johnson295189b2012-06-20 16:38:30 -070018958/*
18959 * WDA common routine to create timer used by WDA.
18960 */
18961static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
18962{
Jeff Johnson295189b2012-06-20 16:38:30 -070018963 VOS_STATUS status = VOS_STATUS_SUCCESS ;
18964 tANI_U32 val = 0 ;
18965 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18966
18967 if(NULL == pMac)
18968 {
18969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018970 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018971 VOS_ASSERT(0);
18972 return VOS_STATUS_E_FAILURE;
18973 }
18974 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
18975 != eSIR_SUCCESS)
18976 {
18977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18978 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
18979 return VOS_STATUS_E_FAILURE;
18980 }
18981 val = SYS_MS_TO_TICKS(val) ;
18982
18983 /* BA activity check timer */
18984 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
18985 "BA Activity Check timer", WDA_TimerHandler,
18986 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
18987 if(status != TX_SUCCESS)
18988 {
18989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18990 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018991 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018992 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018993 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018994 /* Tx Complete Timeout timer */
18995 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
18996 "Tx Complete Check timer", WDA_TimerHandler,
18997 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018998 if(status != TX_SUCCESS)
18999 {
19000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19001 "Unable to create Tx Complete Timeout timer");
19002 /* Destroy timer of BA activity check timer */
19003 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19004 if(status != TX_SUCCESS)
19005 {
19006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19007 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019008 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019009 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019010 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019011 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019012
19013 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
19014
19015 /* Traffic Stats timer */
19016 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
19017 "Traffic Stats timer", WDA_TimerHandler,
19018 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
19019 if(status != TX_SUCCESS)
19020 {
19021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19022 "Unable to create traffic stats timer");
19023 /* Destroy timer of BA activity check timer */
19024 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19025 if(status != TX_SUCCESS)
19026 {
19027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19028 "Unable to Destroy BA activity timer");
19029 }
19030 /* Destroy timer of tx complete timer */
19031 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19032 if(status != TX_SUCCESS)
19033 {
19034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19035 "Unable to Tx complete timer");
19036 }
19037 return VOS_STATUS_E_FAILURE ;
19038 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019039 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019040}
Jeff Johnson295189b2012-06-20 16:38:30 -070019041/*
19042 * WDA common routine to destroy timer used by WDA.
19043 */
19044static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
19045{
19046 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019047 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19048 if(status != TX_SUCCESS)
19049 {
19050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19051 "Unable to Destroy Tx Complete Timeout timer");
19052 return eSIR_FAILURE ;
19053 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019054 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19055 if(status != TX_SUCCESS)
19056 {
19057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19058 "Unable to Destroy BA activity timer");
19059 return eSIR_FAILURE ;
19060 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019061 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
19062 if(status != TX_SUCCESS)
19063 {
19064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19065 "Unable to Destroy traffic stats timer");
19066 return eSIR_FAILURE ;
19067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019068 return eSIR_SUCCESS ;
19069}
Jeff Johnson295189b2012-06-20 16:38:30 -070019070/*
19071 * WDA timer handler.
19072 */
19073void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
19074{
19075 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
19076 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019077 /*
19078 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
19079 */
19080 wdaMsg.type = timerInfo ;
19081 wdaMsg.bodyptr = NULL;
19082 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070019083 /* post the message.. */
19084 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
19085 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
19086 {
19087 vosStatus = VOS_STATUS_E_BADMSG;
19088 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019089}
Jeff Johnson295189b2012-06-20 16:38:30 -070019090/*
19091 * WDA Tx Complete timeout Indication.
19092 */
19093void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
19094{
19095 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019096 tpSirTxBdStatus txBdStatus = {0};
19097
Jeff Johnson295189b2012-06-20 16:38:30 -070019098 if( pWDA->pAckTxCbFunc )
19099 {
19100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019101 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019102 /*Indicate failure*/
19103 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070019104 pWDA->pAckTxCbFunc = NULL;
19105 }
19106 else
19107 {
19108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019109 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070019110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019111}
Jeff Johnson295189b2012-06-20 16:38:30 -070019112/*
19113 * WDA Set REG Domain to VOS NV
19114 */
Abhishek Singha306a442013-11-07 18:39:01 +053019115eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
19116 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070019117{
Abhishek Singha306a442013-11-07 18:39:01 +053019118 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070019119 {
19120 return eHAL_STATUS_INVALID_PARAMETER;
19121 }
19122 return eHAL_STATUS_SUCCESS;
19123}
Jeff Johnson295189b2012-06-20 16:38:30 -070019124
Jeff Johnson295189b2012-06-20 16:38:30 -070019125#ifdef FEATURE_WLAN_SCAN_PNO
19126/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019127 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019128 *
19129 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019130void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019131{
19132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019133 tSirPNOScanReq *pPNOScanReqParams;
19134
Jeff Johnson295189b2012-06-20 16:38:30 -070019135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019136 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019137 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019138 {
19139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019140 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019141 VOS_ASSERT(0) ;
19142 return ;
19143 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019144
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019145 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19146 if(pPNOScanReqParams->statusCallback)
19147 {
19148 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19149 (status == WDI_STATUS_SUCCESS) ?
19150 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
19151 }
19152
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019153 if (pPNOScanReqParams->enable == 1)
19154 {
19155 if (pPNOScanReqParams->aNetworks)
19156 vos_mem_free(pPNOScanReqParams->aNetworks);
19157 if (pPNOScanReqParams->p24GProbeTemplate)
19158 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19159 if (pPNOScanReqParams->p5GProbeTemplate)
19160 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19161 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19163 vos_mem_free(pWdaParams->wdaMsgParam);
19164 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019165
19166 return ;
19167}
Jeff Johnson295189b2012-06-20 16:38:30 -070019168/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019169 * FUNCTION: WDA_PNOScanReqCallback
19170 * Free memory.
19171 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
19172 */
19173void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019174{
Yue Ma7f44bbe2013-04-12 11:47:39 -070019175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019176 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019177
19178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19179 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19180
19181 if(NULL == pWdaParams)
19182 {
19183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19184 "%s: pWdaParams received NULL", __func__);
19185 VOS_ASSERT(0);
19186 return;
19187 }
19188
19189 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19190 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019191 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19192 if(pPNOScanReqParams->statusCallback)
19193 {
19194 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19195 VOS_STATUS_E_FAILURE);
19196 }
19197
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053019198 if (pPNOScanReqParams->enable == 1)
19199 {
19200 if (pPNOScanReqParams->aNetworks)
19201 vos_mem_free(pPNOScanReqParams->aNetworks);
19202 if (pPNOScanReqParams->p24GProbeTemplate)
19203 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19204 if (pPNOScanReqParams->p5GProbeTemplate)
19205 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19206 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19208 vos_mem_free(pWdaParams->wdaMsgParam);
19209 vos_mem_free(pWdaParams);
19210 }
19211
19212 return;
19213}
19214/*
19215 * FUNCTION: WDA_UpdateScanParamsRespCallback
19216 *
19217 */
19218void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
19219{
19220 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019222 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019223 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019224 {
19225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019226 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019227 VOS_ASSERT(0) ;
19228 return ;
19229 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019230
19231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19232 vos_mem_free(pWdaParams->wdaMsgParam);
19233 vos_mem_free(pWdaParams);
19234
Jeff Johnson295189b2012-06-20 16:38:30 -070019235 return ;
19236}
Jeff Johnson295189b2012-06-20 16:38:30 -070019237/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019238 * FUNCTION: WDA_UpdateScanParamsReqCallback
19239 * Free memory.
19240 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
19241 */
19242void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19243{
19244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19245
19246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19247 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19248
19249 if(NULL == pWdaParams)
19250 {
19251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19252 "%s: pWdaParams received NULL", __func__);
19253 VOS_ASSERT(0);
19254 return;
19255 }
19256
19257 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19258 {
19259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19260 vos_mem_free(pWdaParams->wdaMsgParam);
19261 vos_mem_free(pWdaParams);
19262 }
19263
19264 return;
19265}
19266/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019267 * FUNCTION: WDA_ProcessSetPreferredNetworkList
19268 * Request to WDI to set Preferred Network List.Offload
19269 */
19270VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
19271 tSirPNOScanReq *pPNOScanReqParams)
19272{
Jeff Johnson43971f52012-07-17 12:26:56 -070019273 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019274 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
19275 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
19276 tWDA_ReqParams *pWdaParams ;
19277 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019280 if(NULL == pwdiPNOScanReqInfo)
19281 {
19282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019284 VOS_ASSERT(0);
19285 return VOS_STATUS_E_NOMEM;
19286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19288 if(NULL == pWdaParams)
19289 {
19290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019292 VOS_ASSERT(0);
19293 vos_mem_free(pwdiPNOScanReqInfo);
19294 return VOS_STATUS_E_NOMEM;
19295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019296 //
19297 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
19298 //
19299 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
19300 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070019301 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
19302 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
19303 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019304 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
19305 {
19306 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
19307 &pPNOScanReqParams->aNetworks[i],
19308 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
19309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019310 /*Scan timer intervals*/
19311 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
19312 &pPNOScanReqParams->scanTimers,
19313 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070019314 /*Probe template for 2.4GHz band*/
19315 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
19316 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19317 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019318 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
19319 pPNOScanReqParams->p24GProbeTemplate,
19320 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070019321 /*Probe template for 5GHz band*/
19322 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
19323 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19324 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019325 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
19326 pPNOScanReqParams->p5GProbeTemplate,
19327 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019328 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
19329 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019330
Jeff Johnson295189b2012-06-20 16:38:30 -070019331 /* Store Params pass it to WDI */
19332 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
19333 pWdaParams->pWdaContext = pWDA;
19334 /* Store param pointer as passed in by caller */
19335 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019336 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019337 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019338 if(IS_WDI_STATUS_FAILURE(status))
19339 {
19340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19341 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019342 if(pPNOScanReqParams->statusCallback)
19343 {
19344 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19345 VOS_STATUS_E_FAILURE);
19346 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019347 if (pPNOScanReqParams->enable == 1)
19348 {
19349 if (pPNOScanReqParams->aNetworks)
19350 vos_mem_free(pPNOScanReqParams->aNetworks);
19351 if (pPNOScanReqParams->p24GProbeTemplate)
19352 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19353 if (pPNOScanReqParams->p5GProbeTemplate)
19354 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19357 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019358
Jeff Johnson295189b2012-06-20 16:38:30 -070019359 pWdaParams->wdaWdiApiMsgParam = NULL;
19360 pWdaParams->wdaMsgParam = NULL;
19361 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019362 return CONVERT_WDI2VOS_STATUS(status) ;
19363}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019364
19365#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19366
19367void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
19368{
19369 /*Convert the CSR Auth types to WDI Auth types */
19370 switch (csrAuthType)
19371 {
19372 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
19373 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19374 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019375#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019376 case eCSR_AUTH_TYPE_CCKM_WPA:
19377 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
19378 break;
19379#endif
19380 case eCSR_AUTH_TYPE_WPA:
19381 *AuthType = eWDA_AUTH_TYPE_WPA;
19382 break;
19383 case eCSR_AUTH_TYPE_WPA_PSK:
19384 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
19385 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019386#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019387 case eCSR_AUTH_TYPE_CCKM_RSN:
19388 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
19389 break;
19390#endif
19391 case eCSR_AUTH_TYPE_RSN:
19392 *AuthType = eWDA_AUTH_TYPE_RSN;
19393 break;
19394 case eCSR_AUTH_TYPE_RSN_PSK:
19395 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
19396 break;
19397#if defined WLAN_FEATURE_VOWIFI_11R
19398 case eCSR_AUTH_TYPE_FT_RSN:
19399 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
19400 break;
19401 case eCSR_AUTH_TYPE_FT_RSN_PSK:
19402 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
19403 break;
19404#endif
19405#ifdef FEATURE_WLAN_WAPI
19406 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
19407 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
19408 break;
19409 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
19410 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
19411 break;
19412#endif /* FEATURE_WLAN_WAPI */
19413 case eCSR_AUTH_TYPE_SHARED_KEY:
19414 case eCSR_AUTH_TYPE_AUTOSWITCH:
19415 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19416 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019417#ifdef WLAN_FEATURE_11W
19418 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
19419 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019420 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019421 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
19422 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
19423 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019424#endif
19425 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053019426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019427 "%s: Unknown Auth Type", __func__);
19428 break;
19429 }
19430}
19431void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
19432{
19433 switch (csrEncrType)
19434 {
19435 case eCSR_ENCRYPT_TYPE_NONE:
19436 *EncrType = WDI_ED_NONE;
19437 break;
19438 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
19439 case eCSR_ENCRYPT_TYPE_WEP40:
19440 *EncrType = WDI_ED_WEP40;
19441 break;
19442 case eCSR_ENCRYPT_TYPE_WEP104:
19443 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
19444 *EncrType = WDI_ED_WEP104;
19445 break;
19446 case eCSR_ENCRYPT_TYPE_TKIP:
19447 *EncrType = WDI_ED_TKIP;
19448 break;
19449 case eCSR_ENCRYPT_TYPE_AES:
19450 *EncrType = WDI_ED_CCMP;
19451 break;
19452#ifdef WLAN_FEATURE_11W
19453 case eCSR_ENCRYPT_TYPE_AES_CMAC:
19454 *EncrType = WDI_ED_AES_128_CMAC;
19455 break;
19456#endif
19457#ifdef FEATURE_WLAN_WAPI
19458 case eCSR_ENCRYPT_TYPE_WPI:
19459 *EncrType = WDI_ED_WPI;
19460 break;
19461#endif
19462 case eCSR_ENCRYPT_TYPE_ANY:
19463 *EncrType = WDI_ED_ANY;
19464 break;
19465
19466 default:
19467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19468 "%s: Unknown Encryption Type", __func__);
19469 break;
19470 }
19471}
19472
Kapil Gupta04ab1992016-06-26 13:36:51 +053019473#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19474VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
19475 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
19476{
19477 WDI_Status status;
19478 tWDA_ReqParams *pWdaParams ;
19479 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
19480
19481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19482 "------> %s " ,__func__);
19483
19484 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
19485 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
19486 if (NULL == pwdiPERRoamOffloadScanInfo) {
19487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19488 "%s: VOS MEM Alloc Failure", __func__);
19489 VOS_ASSERT(0);
19490 return VOS_STATUS_E_NOMEM;
19491 }
19492
19493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19494 if (NULL == pWdaParams) {
19495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19496 "%s: VOS MEM Alloc Failure", __func__);
19497 VOS_ASSERT(0);
19498 vos_mem_free(pwdiPERRoamOffloadScanInfo);
19499 return VOS_STATUS_E_NOMEM;
19500 }
19501
19502 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
19503 pPERRoamOffloadScanReqParams->rateUpThreshold;
19504 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
19505 pPERRoamOffloadScanReqParams->rateDownThreshold;
19506 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
19507 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
19508 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
19509 pPERRoamOffloadScanReqParams->PERtimerThreshold;
19510 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
19511 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053019512 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
19513 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053019514 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
19515 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
19516
19517 /* Store Params pass it to WDI */
19518 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
19519 pWdaParams->pWdaContext = pWDA;
19520
19521 /* Store param pointer as passed in by caller */
19522 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
19523 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
19524 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
19525 pWdaParams);
19526
19527 if(IS_WDI_STATUS_FAILURE(status)) {
19528 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19529 "Failure in Send config PER roam params");
19530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19531 vos_mem_free(pWdaParams->wdaMsgParam);
19532 vos_mem_free(pWdaParams);
19533 }
19534 return CONVERT_WDI2VOS_STATUS(status) ;
19535}
19536#endif
19537
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019538/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019539 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019540 * Request to WDI to set Roam Offload Scan
19541 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019542VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019543 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
19544{
19545 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019546 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
19547 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019548 tWDA_ReqParams *pWdaParams ;
19549 v_U8_t csrAuthType;
19550 WDI_RoamNetworkType *pwdiRoamNetworkType;
19551 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
19552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19553 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019554 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019555 {
19556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19557 "%s: VOS MEM Alloc Failure", __func__);
19558 VOS_ASSERT(0);
19559 return VOS_STATUS_E_NOMEM;
19560 }
19561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19562 if (NULL == pWdaParams)
19563 {
19564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19565 "%s: VOS MEM Alloc Failure", __func__);
19566 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019567 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019568 return VOS_STATUS_E_NOMEM;
19569 }
19570
19571 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019572 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019573 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019574 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
19575 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019576 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
19577 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
19578 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
19579 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
19580 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
19581 sizeof(pwdiRoamNetworkType->currAPbssid));
19582 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
19583 csrAuthType);
19584 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
19585 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
19586 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
19587 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
19588 pwdiRoamOffloadScanInfo->LookupThreshold =
19589 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080019590 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
19591 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019592 pwdiRoamOffloadScanInfo->RoamRssiDiff =
19593 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080019594 pwdiRoamOffloadScanInfo->MAWCEnabled =
19595 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019596 pwdiRoamOffloadScanInfo->Command =
19597 pRoamOffloadScanReqParams->Command ;
19598 pwdiRoamOffloadScanInfo->StartScanReason =
19599 pRoamOffloadScanReqParams->StartScanReason ;
19600 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
19601 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
19602 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
19603 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
19604 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
19605 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
19606 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
19607 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
19608 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
19609 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019610 pwdiRoamOffloadScanInfo->IsESEEnabled =
19611 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019612 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
19613 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
19614 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
19615 pwdiRoamNetworkType->ssId.ucLength =
19616 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
19617 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
19618 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
19619 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
19620 pwdiRoamNetworkType->ChannelCount =
19621 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
19622 pwdiRoamOffloadScanInfo->ChannelCacheType =
19623 pRoamOffloadScanReqParams->ChannelCacheType;
19624 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
19625 pRoamOffloadScanReqParams->ValidChannelList,
19626 pRoamOffloadScanReqParams->ValidChannelCount);
19627 pwdiRoamOffloadScanInfo->ValidChannelCount =
19628 pRoamOffloadScanReqParams->ValidChannelCount;
19629 pwdiRoamOffloadScanInfo->us24GProbeSize =
19630 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19631 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19632 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
19633 pRoamOffloadScanReqParams->p24GProbeTemplate,
19634 pwdiRoamOffloadScanInfo->us24GProbeSize);
19635 pwdiRoamOffloadScanInfo->us5GProbeSize =
19636 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19637 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19638 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
19639 pRoamOffloadScanReqParams->p5GProbeTemplate,
19640 pwdiRoamOffloadScanInfo->us5GProbeSize);
19641 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
19642 pRoamOffloadScanReqParams->MDID.mdiePresent;
19643 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
19644 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019645 pwdiRoamOffloadScanInfo->nProbes =
19646 pRoamOffloadScanReqParams->nProbes;
19647 pwdiRoamOffloadScanInfo->HomeAwayTime =
19648 pRoamOffloadScanReqParams->HomeAwayTime;
19649 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019650 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019651 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019652 pWdaParams->pWdaContext = pWDA;
19653 /* Store param pointer as passed in by caller */
19654 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019655 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019656 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
19657 if(IS_WDI_STATUS_FAILURE(status))
19658 {
19659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19660 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
19661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19662 vos_mem_free(pWdaParams->wdaMsgParam);
19663 pWdaParams->wdaWdiApiMsgParam = NULL;
19664 pWdaParams->wdaMsgParam = NULL;
19665 }
19666 return CONVERT_WDI2VOS_STATUS(status) ;
19667}
19668#endif
19669
Jeff Johnson295189b2012-06-20 16:38:30 -070019670/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019671 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019672 *
19673 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019674void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019675{
19676 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19677
19678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019679 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019680
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019681 if(NULL == pWdaParams)
19682 {
19683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019684 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019685 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019686 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019687 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019688
Jeff Johnson295189b2012-06-20 16:38:30 -070019689 vos_mem_free(pWdaParams->wdaMsgParam) ;
19690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19691 vos_mem_free(pWdaParams) ;
19692
19693 return ;
19694}
19695/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019696 * FUNCTION: WDA_RssiFilterReqCallback
19697 * Free memory.
19698 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
19699 */
19700void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19701{
19702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19703
19704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19705 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19706
19707 if(NULL == pWdaParams)
19708 {
19709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19710 "%s: pWdaParams received NULL", __func__);
19711 VOS_ASSERT(0);
19712 return;
19713 }
19714
19715 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19716 {
19717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19718 vos_mem_free(pWdaParams->wdaMsgParam);
19719 vos_mem_free(pWdaParams);
19720 }
19721
19722 return;
19723}
19724/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053019725 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070019726 * Request to WDI to set Preferred Network List.Offload
19727 */
19728VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
19729 tSirSetRSSIFilterReq* pRssiFilterParams)
19730{
Jeff Johnson43971f52012-07-17 12:26:56 -070019731 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019732 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
19733 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
19734 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019736 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019737 if(NULL == pwdiSetRssiFilterReqInfo)
19738 {
19739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019741 VOS_ASSERT(0);
19742 return VOS_STATUS_E_NOMEM;
19743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19745 if(NULL == pWdaParams)
19746 {
19747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019748 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019749 VOS_ASSERT(0);
19750 vos_mem_free(pwdiSetRssiFilterReqInfo);
19751 return VOS_STATUS_E_NOMEM;
19752 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019753 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019754 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
19755 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019756
Jeff Johnson295189b2012-06-20 16:38:30 -070019757 /* Store Params pass it to WDI */
19758 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
19759 pWdaParams->pWdaContext = pWDA;
19760 /* Store param pointer as passed in by caller */
19761 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019762 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019763 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019764 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019765 if(IS_WDI_STATUS_FAILURE(status))
19766 {
19767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19768 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
19769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19770 vos_mem_free(pWdaParams->wdaMsgParam);
19771 pWdaParams->wdaWdiApiMsgParam = NULL;
19772 pWdaParams->wdaMsgParam = NULL;
19773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019774 return CONVERT_WDI2VOS_STATUS(status) ;
19775}
19776
Jeff Johnson295189b2012-06-20 16:38:30 -070019777/*
19778 * FUNCTION: WDA_ProcessUpdateScanParams
19779 * Request to WDI to update Scan Parameters
19780 */
19781VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
19782 tSirUpdateScanParams *pUpdateScanParams)
19783{
Jeff Johnson43971f52012-07-17 12:26:56 -070019784 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019785 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
19786 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
19787 sizeof(WDI_UpdateScanParamsInfoType)) ;
19788 tWDA_ReqParams *pWdaParams ;
19789 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019791 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019792 if(NULL == wdiUpdateScanParamsInfoType)
19793 {
19794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019796 VOS_ASSERT(0);
19797 return VOS_STATUS_E_NOMEM;
19798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19800 if ( NULL == pWdaParams )
19801 {
19802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019804 VOS_ASSERT(0);
19805 vos_mem_free(wdiUpdateScanParamsInfoType);
19806 return VOS_STATUS_E_NOMEM;
19807 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019808 //
19809 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
19810 //
Jeff Johnson295189b2012-06-20 16:38:30 -070019811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19812 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
19813 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
19814 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080019815 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070019816 pUpdateScanParams->b11dEnabled,
19817 pUpdateScanParams->b11dResolved,
19818 pUpdateScanParams->ucChannelCount,
19819 pUpdateScanParams->usPassiveMinChTime,
19820 pUpdateScanParams->usPassiveMaxChTime,
19821 pUpdateScanParams->usActiveMinChTime,
19822 pUpdateScanParams->usActiveMaxChTime,
19823 sizeof(tSirUpdateScanParams),
19824 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
19825
Jeff Johnson295189b2012-06-20 16:38:30 -070019826 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
19827 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070019828 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
19829 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070019830 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
19831 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070019832 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
19833 pUpdateScanParams->usActiveMaxChTime;
19834 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
19835 pUpdateScanParams->usActiveMinChTime;
19836 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
19837 pUpdateScanParams->usPassiveMaxChTime;
19838 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
19839 pUpdateScanParams->usPassiveMinChTime;
19840
Jeff Johnson295189b2012-06-20 16:38:30 -070019841 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053019842 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
19843 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070019844
Jeff Johnson295189b2012-06-20 16:38:30 -070019845 for ( i = 0; i <
19846 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
19847 i++)
19848 {
19849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19850 "Update Scan Parameters channel: %d",
19851 pUpdateScanParams->aChannels[i]);
19852
19853 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
19854 pUpdateScanParams->aChannels[i];
19855 }
19856
Yue Ma7f44bbe2013-04-12 11:47:39 -070019857 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
19858 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019859
Jeff Johnson295189b2012-06-20 16:38:30 -070019860 /* Store Params pass it to WDI */
19861 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
19862 pWdaParams->pWdaContext = pWDA;
19863 /* Store param pointer as passed in by caller */
19864 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070019865
Jeff Johnson295189b2012-06-20 16:38:30 -070019866
19867
19868 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019869 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019870 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019871 if(IS_WDI_STATUS_FAILURE(status))
19872 {
19873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19874 "Failure in Update Scan Params EQ WDI API, free all the memory " );
19875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19876 vos_mem_free(pWdaParams->wdaMsgParam);
19877 vos_mem_free(pWdaParams);
19878 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019879 return CONVERT_WDI2VOS_STATUS(status) ;
19880}
19881#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019882
19883#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19884/*
19885 * FUNCTION: WDA_RoamOffloadScanReqCallback
19886 *
19887 */
19888void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19889{
19890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019891 vos_msg_t vosMsg;
19892 wpt_uint8 reason = 0;
19893
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070019894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019895 "<------ %s " ,__func__);
19896 if (NULL == pWdaParams)
19897 {
19898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19899 "%s: pWdaParams received NULL", __func__);
19900 VOS_ASSERT(0) ;
19901 return ;
19902 }
19903 if ( pWdaParams != NULL )
19904 {
19905 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
19906 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019907 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19909 }
19910 if ( pWdaParams->wdaMsgParam != NULL)
19911 {
19912 vos_mem_free(pWdaParams->wdaMsgParam);
19913 }
19914
19915 vos_mem_free(pWdaParams) ;
19916 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019917 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19918 vosMsg.bodyptr = NULL;
19919 if (WDI_STATUS_SUCCESS != status)
19920 {
19921 reason = 0;
19922 }
19923 vosMsg.bodyval = reason;
19924 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19925 {
19926 /* free the mem and return */
19927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070019928 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019929 }
19930
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019931 return ;
19932}
Kapil Gupta04ab1992016-06-26 13:36:51 +053019933
19934void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
19935{
19936 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19937 vos_msg_t vosMsg;
19938 wpt_uint8 reason = 0;
19939
19940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19941 "<------ %s " ,__func__);
19942 if (NULL == pWdaParams) {
19943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19944 "%s: pWdaParams received NULL", __func__);
19945 VOS_ASSERT(0) ;
19946 return ;
19947 }
19948 if ( pWdaParams->wdaMsgParam != NULL)
19949 vos_mem_free(pWdaParams->wdaMsgParam);
19950
19951 vos_mem_free(pWdaParams) ;
19952 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
19953 vosMsg.bodyptr = NULL;
19954 if (WDI_STATUS_SUCCESS != status)
19955 reason = 0;
19956
19957 vosMsg.bodyval = reason;
19958 if (VOS_STATUS_SUCCESS !=
19959 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19960 /* free the mem and return */
19961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19962 "%s: Failed to post the rsp to UMAC", __func__);
19963 }
19964
19965 return ;
19966}
19967
19968
19969void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19970{
19971 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19972 vos_msg_t vosMsg;
19973 wpt_uint8 reason = 0;
19974
19975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19976 "<------ %s " ,__func__);
19977 if (NULL == pWdaParams) {
19978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19979 "%s: pWdaParams received NULL", __func__);
19980 VOS_ASSERT(0) ;
19981 return ;
19982 }
19983 if ( pWdaParams->wdaMsgParam != NULL)
19984 vos_mem_free(pWdaParams->wdaMsgParam);
19985
19986 vos_mem_free(pWdaParams) ;
19987 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19988 vosMsg.bodyptr = NULL;
19989 if (WDI_STATUS_SUCCESS != status)
19990 reason = 0;
19991
19992 vosMsg.bodyval = reason;
19993 if (VOS_STATUS_SUCCESS !=
19994 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19995 /* free the mem and return */
19996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19997 "%s: Failed to post the rsp to UMAC", __func__);
19998 }
19999
20000 return ;
20001}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020002#endif
20003
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020004/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020005 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020006 *
20007 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020008void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020009{
20010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20011
20012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20013 "<------ %s " ,__func__);
20014
20015 if(NULL == pWdaParams)
20016 {
20017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20018 "%s: pWdaParams received NULL", __func__);
20019 VOS_ASSERT(0);
20020 return;
20021 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020022
20023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20024 vos_mem_free(pWdaParams->wdaMsgParam);
20025 vos_mem_free(pWdaParams);
20026
20027 return;
20028}
20029/*
20030 * FUNCTION: WDA_SetPowerParamsReqCallback
20031 * Free memory.
20032 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
20033 */
20034void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
20035{
20036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20037
20038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20039 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20040
20041 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020042 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070020043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20044 "%s: pWdaParams received NULL", __func__);
20045 VOS_ASSERT(0);
20046 return;
20047 }
20048
20049 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20050 {
20051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20052 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020053 vos_mem_free(pWdaParams);
20054 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020055
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020056 return;
20057}
20058
Jeff Johnson295189b2012-06-20 16:38:30 -070020059#ifdef WLAN_FEATURE_PACKET_FILTERING
20060/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020061 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020062 *
20063 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020064void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020065 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
20066 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020067{
20068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020070 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020071 if(NULL == pWdaParams)
20072 {
20073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020074 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020075 VOS_ASSERT(0) ;
20076 return ;
20077 }
20078
20079 vos_mem_free(pWdaParams->wdaMsgParam) ;
20080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20081 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020082 //print a msg, nothing else to do
20083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020084 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020085 return ;
20086}
Jeff Johnson295189b2012-06-20 16:38:30 -070020087/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020088 * FUNCTION: WDA_8023MulticastListReqCallback
20089 * Free memory.
20090 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
20091 */
20092void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
20093{
20094 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20095
20096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20097 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20098
20099 if(NULL == pWdaParams)
20100 {
20101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20102 "%s: pWdaParams received NULL", __func__);
20103 VOS_ASSERT(0);
20104 return;
20105 }
20106
20107 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20108 {
20109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20110 vos_mem_free(pWdaParams->wdaMsgParam);
20111 vos_mem_free(pWdaParams);
20112 }
20113
20114 return;
20115}
20116/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020117 * FUNCTION: WDA_Process8023MulticastListReq
20118 * Request to WDI to add 8023 Multicast List
20119 */
20120VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
20121 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
20122{
Jeff Johnson43971f52012-07-17 12:26:56 -070020123 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020124 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
20125 tWDA_ReqParams *pWdaParams ;
20126 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020129 pwdiFltPktSetMcListReqParamsType =
20130 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
20131 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
20132 ) ;
20133 if(NULL == pwdiFltPktSetMcListReqParamsType)
20134 {
20135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020137 return VOS_STATUS_E_NOMEM;
20138 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20140 if(NULL == pWdaParams)
20141 {
20142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020144 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
20145 return VOS_STATUS_E_NOMEM;
20146 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020147
Jeff Johnson295189b2012-06-20 16:38:30 -070020148 //
20149 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
20150 //
20151 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070020152 pRcvFltMcAddrList->ulMulticastAddrCnt;
20153
20154 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
20155 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
20156 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
20157 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
20158
Jeff Johnson295189b2012-06-20 16:38:30 -070020159 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
20160 {
20161 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
20162 &(pRcvFltMcAddrList->multicastAddr[i]),
20163 sizeof(tSirMacAddr));
20164 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020165 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
20166 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020167
Jeff Johnson295189b2012-06-20 16:38:30 -070020168 /* Store Params pass it to WDI */
20169 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
20170 pWdaParams->pWdaContext = pWDA;
20171 /* Store param pointer as passed in by caller */
20172 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070020173 status = WDI_8023MulticastListReq(
20174 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020175 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020176 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020177 if(IS_WDI_STATUS_FAILURE(status))
20178 {
20179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20180 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
20181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20182 vos_mem_free(pWdaParams->wdaMsgParam);
20183 vos_mem_free(pWdaParams);
20184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020185 return CONVERT_WDI2VOS_STATUS(status) ;
20186}
Jeff Johnson295189b2012-06-20 16:38:30 -070020187/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020188 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020189 *
20190 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020191void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020192 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
20193 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020194{
20195 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020197 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020198 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070020199 if(NULL == pWdaParams)
20200 {
20201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020202 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020203 VOS_ASSERT(0) ;
20204 return ;
20205 }
20206
20207 vos_mem_free(pWdaParams->wdaMsgParam) ;
20208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20209 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020210 //print a msg, nothing else to do
20211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020212 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020213 return ;
20214}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020215
20216/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020217 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
20218 * Free memory.
20219 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020220 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020221void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020222 void* pUserData)
20223{
20224 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20225
20226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20227 "<------ %s, wdiStatus: %d",
20228 __func__, wdiStatus);
20229
20230 if (NULL == pWdaParams)
20231 {
20232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20233 "%s: Invalid pWdaParams pointer", __func__);
20234 VOS_ASSERT(0);
20235 return;
20236 }
20237
20238 if (IS_WDI_STATUS_FAILURE(wdiStatus))
20239 {
20240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20241 vos_mem_free(pWdaParams->wdaMsgParam);
20242 vos_mem_free(pWdaParams);
20243 }
20244
20245 return;
20246}
20247
Jeff Johnson295189b2012-06-20 16:38:30 -070020248/*
20249 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
20250 * Request to WDI to set Receive Filters
20251 */
20252VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
20253 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
20254{
Jeff Johnson43971f52012-07-17 12:26:56 -070020255 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020256 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
20257 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
20258 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
20259 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
20260 tWDA_ReqParams *pWdaParams ;
20261 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020263 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020264 if(NULL == pwdiSetRcvPktFilterReqParamsType)
20265 {
20266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020268 VOS_ASSERT(0);
20269 return VOS_STATUS_E_NOMEM;
20270 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20272 if(NULL == pWdaParams)
20273 {
20274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020275 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020276 VOS_ASSERT(0);
20277 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
20278 return VOS_STATUS_E_NOMEM;
20279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020280 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
20281 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
20282 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
20283 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070020284 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
20285 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
20286
20287 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
20288 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020289
20290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20291 "FID %d FT %d NParams %d CT %d",
20292 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
20293 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
20294 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
20295 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070020296 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
20297 {
20298 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
20299 &pRcvPktFilterCfg->paramsData[i],
20300 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070020301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020302 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020303 pwdiSetRcvPktFilterReqParamsType->
20304 wdiPktFilterCfg.paramsData[i].protocolLayer,
20305 pwdiSetRcvPktFilterReqParamsType->
20306 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070020307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020308 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020309 pwdiSetRcvPktFilterReqParamsType->
20310 wdiPktFilterCfg.paramsData[i].dataOffset,
20311 pwdiSetRcvPktFilterReqParamsType->
20312 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070020313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020314 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020315 pwdiSetRcvPktFilterReqParamsType->
20316 wdiPktFilterCfg.paramsData[i].compareData[0],
20317 pwdiSetRcvPktFilterReqParamsType->
20318 wdiPktFilterCfg.paramsData[i].compareData[1],
20319 pwdiSetRcvPktFilterReqParamsType->
20320 wdiPktFilterCfg.paramsData[i].compareData[2],
20321 pwdiSetRcvPktFilterReqParamsType->
20322 wdiPktFilterCfg.paramsData[i].compareData[3],
20323 pwdiSetRcvPktFilterReqParamsType->
20324 wdiPktFilterCfg.paramsData[i].compareData[4],
20325 pwdiSetRcvPktFilterReqParamsType->
20326 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020328 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020329 pwdiSetRcvPktFilterReqParamsType->
20330 wdiPktFilterCfg.paramsData[i].dataMask[0],
20331 pwdiSetRcvPktFilterReqParamsType->
20332 wdiPktFilterCfg.paramsData[i].dataMask[1],
20333 pwdiSetRcvPktFilterReqParamsType->
20334 wdiPktFilterCfg.paramsData[i].dataMask[2],
20335 pwdiSetRcvPktFilterReqParamsType->
20336 wdiPktFilterCfg.paramsData[i].dataMask[3],
20337 pwdiSetRcvPktFilterReqParamsType->
20338 wdiPktFilterCfg.paramsData[i].dataMask[4],
20339 pwdiSetRcvPktFilterReqParamsType->
20340 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020341 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020342 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020343 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020344 /* Store Params pass it to WDI */
20345 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
20346 pWdaParams->pWdaContext = pWDA;
20347 /* Store param pointer as passed in by caller */
20348 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070020349 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020350 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020351 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020352 if(IS_WDI_STATUS_FAILURE(status))
20353 {
20354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20355 "Failure in SetFilter(),free all the memory,status %d ",status);
20356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20357 vos_mem_free(pWdaParams->wdaMsgParam);
20358 vos_mem_free(pWdaParams);
20359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020360 return CONVERT_WDI2VOS_STATUS(status) ;
20361}
Jeff Johnson295189b2012-06-20 16:38:30 -070020362/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020363 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020364 *
20365 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020366void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020367 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
20368 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020369{
20370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20371 tWDA_CbContext *pWDA;
20372 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
20373 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
20374 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
20375 tANI_U8 i;
20376 vos_msg_t vosMsg;
20377
20378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020379 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020380 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
20381
Jeff Johnsone7245742012-09-05 17:12:55 -070020382 if(NULL == pRcvFltPktMatchCntRsp)
20383 {
20384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020385 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020386 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020387 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070020388 return ;
20389 }
20390
Jeff Johnson295189b2012-06-20 16:38:30 -070020391 if(NULL == pWdaParams)
20392 {
20393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020394 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020395 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020396 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070020397 return ;
20398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020399 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
20400 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020401 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
20402 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
20403
20404 /* Message Header */
20405 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20406 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
20407
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020408 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070020409
20410 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
20411 {
20412 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
20413 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
20414 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020415 /* VOS message wrapper */
20416 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20417 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
20418 vosMsg.bodyval = 0;
20419 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20420 {
20421 /* free the mem and return */
20422 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
20423 }
20424
20425 vos_mem_free(pWdaParams->wdaMsgParam) ;
20426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20427 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020428
20429 return;
20430}
20431/*
20432 * FUNCTION: WDA_FilterMatchCountReqCallback
20433 * Free memory and send RSP back to SME.
20434 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
20435 */
20436void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
20437{
20438 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20439 vos_msg_t vosMsg;
20440
20441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20442 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20443
20444 if(NULL == pWdaParams)
20445 {
20446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20447 "%s: pWdaParams received NULL", __func__);
20448 VOS_ASSERT(0);
20449 return;
20450 }
20451
20452 /* VOS message wrapper */
20453 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20454 vosMsg.bodyptr = NULL;
20455 vosMsg.bodyval = 0;
20456
20457 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20458 {
20459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20460 vos_mem_free(pWdaParams->wdaMsgParam);
20461 vos_mem_free(pWdaParams);
20462 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
20463 }
20464
20465 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070020466}
Jeff Johnson295189b2012-06-20 16:38:30 -070020467/*
20468 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
20469 * Request to WDI to get PC Filter Match Count
20470 */
20471VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
20472{
Jeff Johnson43971f52012-07-17 12:26:56 -070020473 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020474 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
20475 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
20476 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020478 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020479 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
20480 {
20481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020483 VOS_ASSERT(0);
20484 return VOS_STATUS_E_NOMEM;
20485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020486 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20487 if(NULL == pWdaParams)
20488 {
20489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020491 VOS_ASSERT(0);
20492 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
20493 return VOS_STATUS_E_NOMEM;
20494 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020495
Yue Ma7f44bbe2013-04-12 11:47:39 -070020496 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
20497 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020498
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020499 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
20500 pRcvFltPktMatchRsp->bssId,
20501 sizeof(wpt_macAddr));
20502
Jeff Johnson295189b2012-06-20 16:38:30 -070020503 /* Store Params pass it to WDI */
20504 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
20505 pWdaParams->pWdaContext = pWDA;
20506 /* Store param pointer as passed in by caller */
20507 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070020508 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020509 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020510 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020511 if(IS_WDI_STATUS_FAILURE(status))
20512 {
20513 /* failure returned by WDI API */
20514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20515 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
20516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20517 vos_mem_free(pWdaParams) ;
20518 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
20519 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
20520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020521 return CONVERT_WDI2VOS_STATUS(status) ;
20522}
Jeff Johnson295189b2012-06-20 16:38:30 -070020523/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020524 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020525 *
20526 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020527void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020528 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
20529 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020530{
20531 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020532 tSirRcvFltPktClearParam *pktClearParam;
20533
Jeff Johnson295189b2012-06-20 16:38:30 -070020534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020535 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020536/* WDA_VOS_ASSERT(NULL != pWdaParams); */
20537 if(NULL == pWdaParams)
20538 {
20539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020540 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020541 VOS_ASSERT(0) ;
20542 return ;
20543 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020544
20545 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20546 if(pktClearParam->pktFilterCallback)
20547 {
20548 pktClearParam->pktFilterCallback(
20549 pktClearParam->cbCtx,
20550 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
20551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020552 vos_mem_free(pWdaParams->wdaMsgParam) ;
20553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20554 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020555 //print a msg, nothing else to do
20556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020557 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020558 return ;
20559}
Jeff Johnson295189b2012-06-20 16:38:30 -070020560/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020561 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
20562 * Free memory.
20563 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
20564 */
20565void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
20566{
20567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020568 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020569
20570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20571 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20572
20573 if(NULL == pWdaParams)
20574 {
20575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20576 "%s: Invalid pWdaParams pointer", __func__);
20577 VOS_ASSERT(0);
20578 return;
20579 }
20580
20581 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20582 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020583 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20584 if(pktClearParam->pktFilterCallback)
20585 {
20586 pktClearParam->pktFilterCallback(
20587 pktClearParam->cbCtx,
20588 CONVERT_WDI2SIR_STATUS(wdiStatus));
20589 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20591 vos_mem_free(pWdaParams->wdaMsgParam);
20592 vos_mem_free(pWdaParams);
20593 }
20594
20595 return;
20596}
20597/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020598 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
20599 * Request to WDI to clear Receive Filters
20600 */
20601VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
20602 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
20603{
Jeff Johnson43971f52012-07-17 12:26:56 -070020604 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020605 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
20606 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
20607 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020610 if(NULL == pwdiRcvFltPktClearReqParamsType)
20611 {
20612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020614 VOS_ASSERT(0);
20615 return VOS_STATUS_E_NOMEM;
20616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20618 if(NULL == pWdaParams)
20619 {
20620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020622 VOS_ASSERT(0);
20623 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
20624 return VOS_STATUS_E_NOMEM;
20625 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020626 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
20627 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070020628 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
20629 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
20630 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
20631 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020632
Yue Ma7f44bbe2013-04-12 11:47:39 -070020633 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020634 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020635 /* Store Params pass it to WDI */
20636 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
20637 pWdaParams->pWdaContext = pWDA;
20638 /* Store param pointer as passed in by caller */
20639 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020640 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020641 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020642 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020643 if(IS_WDI_STATUS_FAILURE(status))
20644 {
20645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20646 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020647 if(pRcvFltPktClearParam->pktFilterCallback)
20648 {
20649 pRcvFltPktClearParam->pktFilterCallback(
20650 pRcvFltPktClearParam->cbCtx,
20651 CONVERT_WDI2SIR_STATUS(status));
20652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080020654 vos_mem_free(pWdaParams->wdaMsgParam);
20655 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020657 return CONVERT_WDI2VOS_STATUS(status) ;
20658}
20659#endif // WLAN_FEATURE_PACKET_FILTERING
20660
Jeff Johnson295189b2012-06-20 16:38:30 -070020661/*
20662 * FUNCTION: WDA_ProcessSetPowerParamsReq
20663 * Request to WDI to set power params
20664 */
20665VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
20666 tSirSetPowerParamsReq *pPowerParams)
20667{
Jeff Johnson43971f52012-07-17 12:26:56 -070020668 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020669 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
20670 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020671 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020673 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020674 if(NULL == pwdiSetPowerParamsReqInfo)
20675 {
20676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020678 VOS_ASSERT(0);
20679 return VOS_STATUS_E_NOMEM;
20680 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020681 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20682 if(NULL == pWdaParams)
20683 {
20684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020685 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020686 VOS_ASSERT(0);
20687 vos_mem_free(pwdiSetPowerParamsReqInfo);
20688 return VOS_STATUS_E_NOMEM;
20689 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020690
Jeff Johnson295189b2012-06-20 16:38:30 -070020691
20692 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
20693 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070020694 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
20695 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070020696 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
20697 pPowerParams->uListenInterval;
20698 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
20699 pPowerParams->uBcastMcastFilter;
20700 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
20701 pPowerParams->uEnableBET;
20702 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
20703 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070020704 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
20705 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020706 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
20707 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020708
Jeff Johnson295189b2012-06-20 16:38:30 -070020709 /* Store Params pass it to WDI */
20710 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
20711 pWdaParams->pWdaContext = pWDA;
20712 /* Store param pointer as passed in by caller */
20713 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020714 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020715 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020716 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020717 if(IS_WDI_STATUS_FAILURE(status))
20718 {
20719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20720 "Failure in Set power params REQ WDI API, free all the memory " );
20721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20722 vos_mem_free(pWdaParams->wdaMsgParam);
20723 pWdaParams->wdaWdiApiMsgParam = NULL;
20724 pWdaParams->wdaMsgParam = NULL;
20725 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020726 return CONVERT_WDI2VOS_STATUS(status) ;
20727}
20728
20729/*
20730 * FUNCTION: WDA_SetTmLevelRspCallback
20731 * Set TM Level response
20732 */
20733void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
20734{
20735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20736
20737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020738 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020739
20740 if(NULL == pWdaParams)
20741 {
20742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020743 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020744 VOS_ASSERT(0) ;
20745 return ;
20746 }
20747
20748 /* Dose not need to send notification to upper layer
20749 * Just free allocated resources */
20750 if( pWdaParams != NULL )
20751 {
20752 if( pWdaParams->wdaWdiApiMsgParam != NULL )
20753 {
20754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20755 }
20756 vos_mem_free(pWdaParams->wdaMsgParam) ;
20757 vos_mem_free(pWdaParams) ;
20758 }
20759}
20760
20761/*
20762 * FUNCTION: WDA_ProcessSetTmLevelReq
20763 * Set TM Level request
20764 */
20765VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
20766 tAniSetTmLevelReq *setTmLevelReq)
20767{
20768 WDI_Status status = WDI_STATUS_SUCCESS ;
20769 tWDA_ReqParams *pWdaParams ;
20770 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
20771 (WDI_SetTmLevelReqType *)vos_mem_malloc(
20772 sizeof(WDI_SetTmLevelReqType)) ;
20773 if(NULL == wdiSetTmLevelReq)
20774 {
20775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020776 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020777 VOS_ASSERT(0);
20778 return VOS_STATUS_E_NOMEM;
20779 }
20780
20781 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20782 if(NULL == pWdaParams)
20783 {
20784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020785 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020786 VOS_ASSERT(0);
20787 vos_mem_free(wdiSetTmLevelReq);
20788 return VOS_STATUS_E_NOMEM;
20789 }
20790
20791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020792 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020793
20794 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
20795 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
20796
20797 pWdaParams->pWdaContext = pWDA;
20798 pWdaParams->wdaMsgParam = setTmLevelReq;
20799 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
20800
20801 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
20802 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
20803
20804 if(IS_WDI_STATUS_FAILURE(status))
20805 {
20806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080020807 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070020808 vos_mem_free(pWdaParams->wdaMsgParam) ;
20809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20810 vos_mem_free(pWdaParams) ;
20811 }
20812
20813 return CONVERT_WDI2VOS_STATUS(status) ;
20814}
20815
20816VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
20817 tpTxControlParams pTxCtrlParam)
20818{
20819 VOS_STATUS wdaStatus;
20820
20821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020822 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020823 if( pTxCtrlParam == NULL )
20824 {
20825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020826 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020827 return VOS_STATUS_E_FAILURE;
20828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020829 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
20830 {
20831 wdaStatus = WDA_SuspendDataTx(pWDA);
20832 }
20833 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
20834 {
20835 wdaStatus = WDA_ResumeDataTx(pWDA);
20836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020837 return wdaStatus;
20838}
20839
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020840void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053020841{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020842 WDI_Status status;
20843 status = WDI_FWLoggingDXEdoneInd(logType);
20844
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053020845 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020846 {
20847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20848 FL("Failure status %d"), status);
20849 }
Mihir Shete5affadc2015-05-29 20:54:57 +053020850}
20851
Jeff Johnson295189b2012-06-20 16:38:30 -070020852 /* FUNCTION WDA_featureCapsExchange
20853 * WDA API to invoke capability exchange between host and FW.
20854 */
20855void WDA_featureCapsExchange(v_PVOID_t pVosContext)
20856{
20857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020858 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020859 WDI_featureCapsExchangeReq( NULL, pVosContext);
20860}
20861
Yathish9f22e662012-12-10 14:21:35 -080020862/* FUNCTION WDA_disableCapablityFeature
20863 * WDA API to diable Active mode offload in host.
20864 */
20865void WDA_disableCapablityFeature(tANI_U8 feature_index)
20866{
20867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20868 "%s:enter", __func__ );
20869 WDI_disableCapablityFeature(feature_index);
20870}
20871
Jeff Johnson295189b2012-06-20 16:38:30 -070020872 /* FUNCTION WDA_getHostWlanFeatCaps
20873 * Wrapper for WDI API, that will return if the feature (enum value).passed
20874 * to this API is supported or not in Host
20875 * return value
20876 * 0 - implies feature is NOT Supported
20877 * any non zero value - implies feature is SUPPORTED
20878 */
20879tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
20880{
20881 return WDI_getHostWlanFeatCaps(featEnumValue);
20882}
20883
20884 /* FUNCTION WDA_getFwWlanFeatCaps
20885 * Wrapper for WDI API, that will return if the feature (enum value).passed
20886 * to this API is supported or not in FW
20887 * return value
20888 * 0 - implies feature is NOT Supported
20889 * any non zero value - implies feature is SUPPORTED
20890 */
20891tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
20892{
20893 return WDI_getFwWlanFeatCaps(featEnumValue);
20894}
20895
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053020896
Jeff Johnson295189b2012-06-20 16:38:30 -070020897/*
20898 * FUNCTION: WDA_shutdown
20899 * Shutdown WDA/WDI without handshaking with Riva.
20900 * Synchronous function.
20901 */
20902VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
20903{
20904 WDI_Status wdiStatus;
20905 //tANI_U8 eventIdx = 0;
20906 VOS_STATUS status = VOS_STATUS_SUCCESS;
20907 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070020908 if (NULL == pWDA)
20909 {
20910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020911 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020912 VOS_ASSERT(0);
20913 return VOS_STATUS_E_FAILURE;
20914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020915 /* FTM mode stay START_STATE */
20916 if( (WDA_READY_STATE != pWDA->wdaState) &&
20917 (WDA_INIT_STATE != pWDA->wdaState) &&
20918 (WDA_START_STATE != pWDA->wdaState) )
20919 {
20920 VOS_ASSERT(0);
20921 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020922
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020923 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070020924 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020925 if(VOS_TRUE == pWDA->wdaTimersCreated)
20926 {
20927 wdaDestroyTimers(pWDA);
20928 pWDA->wdaTimersCreated = VOS_FALSE;
20929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020930 }
Leo Chang9d76f622013-08-23 16:34:52 -070020931 else
20932 {
20933 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020934 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020935
Jeff Johnson295189b2012-06-20 16:38:30 -070020936 /* call WDI shutdown */
20937 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070020938 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
20939 {
20940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20941 "error in WDA Stop" );
20942 status = VOS_STATUS_E_FAILURE;
20943 }
20944 /* WDI stop is synchrnous, shutdown is complete when it returns */
20945 pWDA->wdaState = WDA_STOP_STATE;
20946
Jeff Johnson295189b2012-06-20 16:38:30 -070020947 /* shutdown should perform the stop & close actions. */
20948 /* Destroy the event */
20949 status = vos_event_destroy(&pWDA->txFrameEvent);
20950 if(!VOS_IS_STATUS_SUCCESS(status))
20951 {
20952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020953 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020954 status = VOS_STATUS_E_FAILURE;
20955 }
20956 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
20957 if(!VOS_IS_STATUS_SUCCESS(status))
20958 {
20959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020960 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020961 status = VOS_STATUS_E_FAILURE;
20962 }
20963 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
20964 if(!VOS_IS_STATUS_SUCCESS(status))
20965 {
20966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020967 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020968 status = VOS_STATUS_E_FAILURE;
20969 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020970 /* free WDA context */
20971 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
20972 if ( !VOS_IS_STATUS_SUCCESS(status) )
20973 {
20974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20975 "error in WDA close " );
20976 status = VOS_STATUS_E_FAILURE;
20977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020978 return status;
20979}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020980
Jeff Johnsone7245742012-09-05 17:12:55 -070020981/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020982 * FUNCTION: WDA_setNeedShutdown
20983 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070020984 */
20985
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020986void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070020987{
20988 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020989 if(pWDA == NULL)
20990 {
20991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20992 "Could not get the WDA Context pointer" );
20993 return;
20994 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020995 pWDA->needShutdown = TRUE;
20996}
20997/*
20998 * FUNCTION: WDA_needShutdown
20999 * WDA needs a shutdown
21000 */
21001
21002v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
21003{
21004 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070021005 if(pWDA == NULL)
21006 {
21007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21008 "Could not get the WDA Context pointer" );
21009 return 0;
21010 }
21011 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070021012}
21013
Mohit Khanna4a70d262012-09-11 16:30:12 -070021014#ifdef WLAN_FEATURE_11AC
21015/*
21016 * FUNCTION: WDA_SetBeaconFilterReqCallback
21017 *
21018 */
21019void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
21020{
21021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021023 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021024 if(NULL == pWdaParams)
21025 {
21026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021027 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021028 VOS_ASSERT(0) ;
21029 return ;
21030 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021031
Mohit Khanna4a70d262012-09-11 16:30:12 -070021032 vos_mem_free(pWdaParams->wdaMsgParam) ;
21033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21034 vos_mem_free(pWdaParams) ;
21035 /*
21036 * No respone required for SetBeaconFilter req so just free the request
21037 * param here
21038 */
21039
21040 return ;
21041}
21042
21043VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
21044 tUpdateVHTOpMode *pData)
21045{
21046 WDI_Status status = WDI_STATUS_SUCCESS ;
21047 tWDA_ReqParams *pWdaParams ;
21048 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
21049 sizeof(WDI_UpdateVHTOpMode)) ;
21050 if(NULL == wdiTemp)
21051 {
21052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021053 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021054 VOS_ASSERT(0);
21055 return VOS_STATUS_E_NOMEM;
21056 }
21057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21058 if(NULL == pWdaParams)
21059 {
21060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021061 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021062 VOS_ASSERT(0);
21063 vos_mem_free(wdiTemp);
21064 return VOS_STATUS_E_NOMEM;
21065 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053021066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21067 "------> %s Opmode = %d and staid = %d" ,
21068 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021069 wdiTemp->opMode = pData->opMode;
21070 wdiTemp->staId = pData->staId;
21071
21072 pWdaParams->pWdaContext = pWDA;
21073 /* Store Req pointer, as this will be used for response */
21074 pWdaParams->wdaMsgParam = (void *)pData;
21075 /* store Params pass it to WDI */
21076 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
21077
21078 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
21079
21080 if(IS_WDI_STATUS_FAILURE(status))
21081 {
21082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21083 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
21084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21085 vos_mem_free(pWdaParams->wdaMsgParam);
21086 vos_mem_free(pWdaParams);
21087 }
21088 return CONVERT_WDI2VOS_STATUS(status) ;
21089}
21090#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021091
21092/*==========================================================================
21093 FUNCTION WDA_TransportChannelDebug
21094
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070021095 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021096 Display Transport Channel debugging information
21097 User may request to display DXE channel snapshot
21098 Or if host driver detects any abnormal stcuk may display
21099
21100 PARAMETERS
schang6295e542013-03-12 15:31:23 -070021101 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080021102 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053021103 debugFlags : Enable stall detect features
21104 defined by WPAL_DeviceDebugFlags
21105 These features may effect
21106 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021107
21108 RETURN VALUE
21109 NONE
21110
21111===========================================================================*/
21112void WDA_TransportChannelDebug
21113(
schang6295e542013-03-12 15:31:23 -070021114 tpAniSirGlobal pMac,
21115 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053021116 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021117)
21118{
Mihir Shete40a55652014-03-02 14:14:47 +053021119 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021120 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070021121}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021122
21123/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053021124 FUNCTION WDA_TransportKickDxe
21125
21126 DESCRIPTION
21127 Request Kick Dxe when first hdd TX time out
21128 happens
21129
21130 PARAMETERS
21131 NONE
21132
21133 RETURN VALUE
21134 NONE
21135
21136===========================================================================*/
21137void WDA_TransportKickDxe()
21138{
21139 WDI_TransportKickDxe();
21140 return;
21141}
21142
21143
21144/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021145 FUNCTION WDA_SetEnableSSR
21146
21147 DESCRIPTION
21148 API to enable/disable SSR on WDI timeout
21149
21150 PARAMETERS
21151 enableSSR : enable/disable SSR
21152
21153 RETURN VALUE
21154 NONE
21155
21156===========================================================================*/
21157void WDA_SetEnableSSR(v_BOOL_t enableSSR)
21158{
21159 WDI_SetEnableSSR(enableSSR);
21160}
Leo Chang9056f462013-08-01 19:21:11 -070021161
Agrawal Ashish0552be02016-03-02 18:03:43 +053021162/**
21163 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
21164 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
21165 *
21166 * Return: void
21167 */
21168void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
21169{
21170 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
21171}
21172
Leo Chang9056f462013-08-01 19:21:11 -070021173#ifdef FEATURE_WLAN_LPHB
21174/*
21175 * FUNCTION: WDA_LPHBconfRspCallback
21176 *
21177 */
21178void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
21179{
21180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21181
21182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21183 "<------ %s " ,__func__);
21184 if (NULL == pWdaParams)
21185 {
21186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21187 "%s: pWdaParams received NULL", __func__);
21188 VOS_ASSERT(0) ;
21189 return ;
21190 }
21191
21192 /* Do not need to send notification to upper layer
21193 * Just free allocated resources */
21194 if (pWdaParams != NULL)
21195 {
21196 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21197 {
21198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21199 }
21200 vos_mem_free(pWdaParams->wdaMsgParam) ;
21201 vos_mem_free(pWdaParams) ;
21202 }
21203
21204 return;
21205}
21206
21207/*
21208 * FUNCTION: WDA_ProcessLPHBConfReq
21209 *
21210 */
21211VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
21212 tSirLPHBReq *pData)
21213{
21214 WDI_Status wdiStatus;
21215 tWDA_ReqParams *pWdaParams ;
21216
21217 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21218 "------> %s " , __func__);
21219
21220 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21221 if (NULL == pWdaParams)
21222 {
21223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21224 "%s: VOS MEM Alloc Failure", __func__);
21225 VOS_ASSERT(0);
21226 vos_mem_free(pData);
21227 return VOS_STATUS_E_NOMEM;
21228 }
21229
21230 pWdaParams->pWdaContext = pWDA;
21231 pWdaParams->wdaMsgParam = (void *)pData;
21232 pWdaParams->wdaWdiApiMsgParam = NULL;
21233
21234 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
21235 if (WDI_STATUS_PENDING == wdiStatus)
21236 {
21237 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21238 "Pending received for %s:%d ", __func__, __LINE__);
21239 }
21240 else if (WDI_STATUS_SUCCESS != wdiStatus)
21241 {
21242 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21243 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
21244 vos_mem_free(pWdaParams->wdaMsgParam);
21245 vos_mem_free(pWdaParams);
21246 }
21247
21248 return CONVERT_WDI2VOS_STATUS(wdiStatus);
21249}
21250#endif /* FEATURE_WLAN_LPHB */
21251
c_hpothu92367912014-05-01 15:18:17 +053021252void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
21253 void* pUserData)
21254{
21255 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
21256
21257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21258 "<------ %s " ,__func__);
21259 if (NULL == pBcnMissRateInfo)
21260 {
21261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21262 "%s: pWdaParams received NULL", __func__);
21263 VOS_ASSERT(0) ;
21264 return ;
21265 }
21266 if (pBcnMissRateInfo->callback)
21267 {
21268 pBcnMissRateInfo->callback(status, bcnMissRate,
21269 pBcnMissRateInfo->data);
21270 }
21271 vos_mem_free(pUserData);
21272
21273 return;
21274}
21275
21276v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
21277 tSirBcnMissRateReq *pData)
21278{
21279 WDI_Status wdiStatus;
21280 tSirBcnMissRateInfo *pBcnMissRateInfo;
21281
21282 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21283 "------> %s " , __func__);
21284
21285 pBcnMissRateInfo =
21286 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
21287 if (NULL == pBcnMissRateInfo)
21288 {
21289 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21290 "%s: VOS MEM Alloc Failure", __func__);
21291 VOS_ASSERT(0);
21292 vos_mem_free(pData);
21293 return;
21294 }
21295
21296 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
21297 pBcnMissRateInfo->data = pData->data;
21298
21299 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
21300 WDA_GetBcnMissRateCallback,
21301 pData->bssid);
21302 if (WDI_STATUS_PENDING == wdiStatus)
21303 {
21304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21305 "Pending received for %s:%d ", __func__, __LINE__);
21306 }
21307 else if (WDI_STATUS_SUCCESS != wdiStatus)
21308 {
21309 if (pBcnMissRateInfo->callback)
21310 {
21311 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
21312 -1, pBcnMissRateInfo->data);
21313 }
21314 }
21315 vos_mem_free(pData);
21316}
Dino Mycle41bdc942014-06-10 11:30:24 +053021317
21318#ifdef WLAN_FEATURE_EXTSCAN
21319
21320/*==========================================================================
21321 FUNCTION WDA_EXTScanStartRspCallback
21322
21323 DESCRIPTION
21324 API to send EXTScan Start Response to HDD
21325
21326 PARAMETERS
21327 pEventData: Response from FW
21328 pUserData:
21329===========================================================================*/
21330void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
21331{
21332 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21333 tWDA_CbContext *pWDA = NULL;
21334 void *pCallbackContext;
21335 tpAniSirGlobal pMac;
21336
21337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21338 "%s:", __func__);
21339 if (NULL == pWdaParams)
21340 {
21341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21342 "%s: pWdaParams received NULL", __func__);
21343 VOS_ASSERT(0);
21344 return;
21345 }
21346
21347 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21348
21349 if (NULL == pWDA)
21350 {
21351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21352 "%s: pWDA received NULL", __func__);
21353 VOS_ASSERT(0);
21354 goto error;
21355 }
21356
21357 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21358 if (NULL == pMac)
21359 {
21360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21361 "%s:pMac is NULL", __func__);
21362 VOS_ASSERT(0);
21363 goto error;
21364 }
21365
21366 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21367
21368 if (pMac->sme.pEXTScanIndCb)
21369 {
21370 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
21371 pEventData);
21372 }
21373 else
21374 {
21375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21376 "%s:HDD callback is null", __func__);
21377 VOS_ASSERT(0);
21378 }
21379
21380error:
21381
21382 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21383 {
21384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21385 }
21386 if (pWdaParams->wdaMsgParam != NULL)
21387 {
21388 vos_mem_free(pWdaParams->wdaMsgParam);
21389 }
21390 vos_mem_free(pWdaParams) ;
21391
21392 return;
21393}
21394
21395/*==========================================================================
21396 FUNCTION WDA_EXTScanStopRspCallback
21397
21398 DESCRIPTION
21399 API to send EXTScan Stop Response to HDD
21400
21401 PARAMETERS
21402 pEventData: Response from FW
21403 pUserData:
21404===========================================================================*/
21405void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
21406{
21407 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21408 tWDA_CbContext *pWDA = NULL;
21409 void *pCallbackContext;
21410 tpAniSirGlobal pMac;
21411
21412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21413 "%s:", __func__);
21414 if (NULL == pWdaParams)
21415 {
21416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21417 "%s: pWdaParams received NULL", __func__);
21418 VOS_ASSERT(0);
21419 return;
21420 }
21421
21422 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21423
21424 if (NULL == pWDA)
21425 {
21426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21427 "%s: pWDA received NULL", __func__);
21428 VOS_ASSERT(0);
21429 goto error;
21430 }
21431
21432 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21433 if (NULL == pMac)
21434 {
21435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21436 "%s:pMac is NULL", __func__);
21437 VOS_ASSERT(0);
21438 goto error;
21439 }
21440 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21441
21442 if (pMac->sme.pEXTScanIndCb)
21443 {
21444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21445 "%s:HDD call back function called", __func__);
21446 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
21447 pEventData);
21448 }
21449 else
21450 {
21451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21452 "%s:HDD callback is null", __func__);
21453 VOS_ASSERT(0);
21454 }
21455
21456error:
21457
21458 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21459 {
21460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21461 }
21462 if (pWdaParams->wdaMsgParam != NULL)
21463 {
21464 vos_mem_free(pWdaParams->wdaMsgParam);
21465 }
21466 vos_mem_free(pWdaParams) ;
21467
21468
21469 return;
21470}
21471
21472/*==========================================================================
21473 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
21474
21475 DESCRIPTION
21476 API to send EXTScan Get Cached Results Response to HDD
21477
21478 PARAMETERS
21479 pEventData: Response from FW
21480 pUserData:
21481===========================================================================*/
21482void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
21483{
21484 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21485 tWDA_CbContext *pWDA = NULL;
21486 void *pCallbackContext;
21487 tpAniSirGlobal pMac;
21488
21489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21490 "%s: ", __func__);
21491 if (NULL == pWdaParams)
21492 {
21493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21494 "%s: pWdaParams received NULL", __func__);
21495 VOS_ASSERT(0);
21496 return;
21497 }
21498
21499 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21500
21501 if (NULL == pWDA)
21502 {
21503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21504 "%s: pWDA received NULL", __func__);
21505 VOS_ASSERT(0);
21506 goto error;
21507 }
21508
21509 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21510 if (NULL == pMac)
21511 {
21512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21513 "%s:pMac is NULL", __func__);
21514 VOS_ASSERT(0);
21515 goto error;
21516 }
21517
21518 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21519
21520 if (pMac->sme.pEXTScanIndCb)
21521 {
21522 pMac->sme.pEXTScanIndCb(pCallbackContext,
21523 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
21524 pEventData);
21525 }
21526 else
21527 {
21528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21529 "%s:HDD callback is null", __func__);
21530 VOS_ASSERT(0);
21531 }
21532
21533
21534error:
21535
21536 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21537 {
21538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21539 }
21540 if (pWdaParams->wdaMsgParam != NULL)
21541 {
21542 vos_mem_free(pWdaParams->wdaMsgParam);
21543 }
21544 vos_mem_free(pWdaParams) ;
21545
21546 return;
21547}
21548
21549/*==========================================================================
21550 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
21551
21552 DESCRIPTION
21553 API to send EXTScan Get Capabilities Response to HDD
21554
21555 PARAMETERS
21556 pEventData: Response from FW
21557 pUserData:
21558===========================================================================*/
21559void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
21560{
21561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21562 tWDA_CbContext *pWDA = NULL;
21563 void *pCallbackContext;
21564 tpAniSirGlobal pMac;
21565
21566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21567 "%s:", __func__);
21568 if (NULL == pWdaParams)
21569 {
21570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21571 "%s: pWdaParams received NULL", __func__);
21572 VOS_ASSERT(0);
21573 return;
21574 }
21575
21576 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21577
21578 if (NULL == pWDA)
21579 {
21580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21581 "%s: pWDA received NULL", __func__);
21582 VOS_ASSERT(0);
21583 goto error;
21584 }
21585
21586 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21587 if (NULL == pMac)
21588 {
21589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21590 "%s:pMac is NULL", __func__);
21591 VOS_ASSERT(0);
21592 goto error;
21593 }
21594
21595 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21596
21597 if (pMac->sme.pEXTScanIndCb)
21598 {
21599 pMac->sme.pEXTScanIndCb(pCallbackContext,
21600 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
21601 pEventData);
21602 }
21603 else
21604 {
21605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21606 "%s:HDD callback is null", __func__);
21607 VOS_ASSERT(0);
21608 }
21609
21610
21611error:
21612
21613 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21614 {
21615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21616 }
21617 if (pWdaParams->wdaMsgParam != NULL)
21618 {
21619 vos_mem_free(pWdaParams->wdaMsgParam);
21620 }
21621 vos_mem_free(pWdaParams) ;
21622
21623 return;
21624}
21625
21626/*==========================================================================
21627 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
21628
21629 DESCRIPTION
21630 API to send EXTScan Set BSSID Hotlist Response to HDD
21631
21632 PARAMETERS
21633 pEventData: Response from FW
21634 pUserData:
21635===========================================================================*/
21636void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21637{
21638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21639 tWDA_CbContext *pWDA = NULL;
21640 void *pCallbackContext;
21641 tpAniSirGlobal pMac;
21642
21643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21644 "%s: ", __func__);
21645 if (NULL == pWdaParams)
21646 {
21647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21648 "%s: pWdaParams received NULL", __func__);
21649 VOS_ASSERT(0) ;
21650 return;
21651 }
21652
21653 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21654
21655 if (NULL == pWDA)
21656 {
21657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21658 "%s: pWDA received NULL", __func__);
21659 VOS_ASSERT(0);
21660 goto error;
21661 }
21662
21663 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21664 if (NULL == pMac)
21665 {
21666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21667 "%s:pMac is NULL", __func__);
21668 VOS_ASSERT(0);
21669 goto error;
21670 }
21671
21672 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21673
21674 if (pMac->sme.pEXTScanIndCb)
21675 {
21676 pMac->sme.pEXTScanIndCb(pCallbackContext,
21677 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
21678 pEventData);
21679 }
21680 else
21681 {
21682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21683 "%s:HDD callback is null", __func__);
21684 VOS_ASSERT(0);
21685 }
21686
21687
21688error:
21689
21690 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21691 {
21692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21693 }
21694 if (pWdaParams->wdaMsgParam != NULL)
21695 {
21696 vos_mem_free(pWdaParams->wdaMsgParam);
21697 }
21698 vos_mem_free(pWdaParams) ;
21699
21700 return;
21701}
21702
21703/*==========================================================================
21704 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
21705
21706 DESCRIPTION
21707 API to send EXTScan ReSet BSSID Hotlist Response to HDD
21708
21709 PARAMETERS
21710 pEventData: Response from FW
21711 pUserData:
21712===========================================================================*/
21713void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21714{
21715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21716 tWDA_CbContext *pWDA = NULL;
21717 void *pCallbackContext;
21718 tpAniSirGlobal pMac;
21719
21720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21721 "%s:", __func__);
21722 if (NULL == pWdaParams)
21723 {
21724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21725 "%s: pWdaParams received NULL", __func__);
21726 VOS_ASSERT(0) ;
21727 return;
21728 }
21729
21730 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21731
21732 if (NULL == pWDA)
21733 {
21734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21735 "%s: pWDA received NULL", __func__);
21736 VOS_ASSERT(0);
21737 goto error;
21738 }
21739
21740 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21741 if (NULL == pMac)
21742 {
21743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21744 "%s:pMac is NULL", __func__);
21745 VOS_ASSERT(0);
21746 goto error;
21747 }
21748
21749 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21750
21751 if (pMac->sme.pEXTScanIndCb)
21752 {
21753 pMac->sme.pEXTScanIndCb(pCallbackContext,
21754 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
21755 pEventData);
21756 }
21757 else
21758 {
21759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21760 "%s:HDD callback is null", __func__);
21761 VOS_ASSERT(0);
21762 }
21763
21764
21765error:
21766
21767 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21768 {
21769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21770 }
21771 if (pWdaParams->wdaMsgParam != NULL)
21772 {
21773 vos_mem_free(pWdaParams->wdaMsgParam);
21774 }
21775 vos_mem_free(pWdaParams) ;
21776
21777 return;
21778}
21779
21780/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021781 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
21782
21783 DESCRIPTION
21784 API to send EXTScan Set SSID Hotlist Response to HDD
21785
21786 PARAMETERS
21787 pEventData: Response from FW
21788 pUserData:
21789===========================================================================*/
21790void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21791{
21792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21793 tWDA_CbContext *pWDA = NULL;
21794 void *pCallbackContext;
21795 tpAniSirGlobal pMac;
21796
21797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21798 "%s: ", __func__);
21799 if (NULL == pWdaParams)
21800 {
21801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21802 "%s: pWdaParams received NULL", __func__);
21803 VOS_ASSERT(0) ;
21804 return;
21805 }
21806
21807 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21808
21809 if (NULL == pWDA)
21810 {
21811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21812 "%s: pWDA received NULL", __func__);
21813 VOS_ASSERT(0);
21814 goto error;
21815 }
21816
21817 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21818 if (NULL == pMac)
21819 {
21820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21821 "%s:pMac is NULL", __func__);
21822 VOS_ASSERT(0);
21823 goto error;
21824 }
21825
21826 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21827
21828 if (pMac->sme.pEXTScanIndCb)
21829 {
21830 pMac->sme.pEXTScanIndCb(pCallbackContext,
21831 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
21832 pEventData);
21833 }
21834 else
21835 {
21836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21837 "%s:HDD callback is null", __func__);
21838 VOS_ASSERT(0);
21839 }
21840
21841
21842error:
21843
21844 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21845 {
21846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21847 }
21848 if (pWdaParams->wdaMsgParam != NULL)
21849 {
21850 vos_mem_free(pWdaParams->wdaMsgParam);
21851 }
21852 vos_mem_free(pWdaParams) ;
21853
21854 return;
21855}
21856
21857/*==========================================================================
21858 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
21859
21860 DESCRIPTION
21861 API to send EXTScan ReSet SSID Hotlist Response to HDD
21862
21863 PARAMETERS
21864 pEventData: Response from FW
21865 pUserData:
21866===========================================================================*/
21867void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21868{
21869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21870 tWDA_CbContext *pWDA = NULL;
21871 void *pCallbackContext;
21872 tpAniSirGlobal pMac;
21873
21874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21875 "%s:", __func__);
21876 if (NULL == pWdaParams)
21877 {
21878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21879 "%s: pWdaParams received NULL", __func__);
21880 VOS_ASSERT(0) ;
21881 return;
21882 }
21883
21884 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21885
21886 if (NULL == pWDA)
21887 {
21888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21889 "%s: pWDA received NULL", __func__);
21890 VOS_ASSERT(0);
21891 goto error;
21892 }
21893
21894 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21895 if (NULL == pMac)
21896 {
21897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21898 "%s:pMac is NULL", __func__);
21899 VOS_ASSERT(0);
21900 goto error;
21901 }
21902
21903 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21904
21905 if (pMac->sme.pEXTScanIndCb)
21906 {
21907 pMac->sme.pEXTScanIndCb(pCallbackContext,
21908 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
21909 pEventData);
21910 }
21911 else
21912 {
21913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21914 "%s:HDD callback is null", __func__);
21915 VOS_ASSERT(0);
21916 }
21917
21918
21919error:
21920
21921 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21922 {
21923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21924 }
21925 if (pWdaParams->wdaMsgParam != NULL)
21926 {
21927 vos_mem_free(pWdaParams->wdaMsgParam);
21928 }
21929 vos_mem_free(pWdaParams) ;
21930
21931 return;
21932}
21933
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021934/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053021935 FUNCTION WDA_ProcessEXTScanStartReq
21936
21937 DESCRIPTION
21938 API to send EXTScan Start Request to WDI
21939
21940 PARAMETERS
21941 pWDA: Pointer to WDA context
21942 wdaRequest: Pointer to EXTScan req parameters
21943===========================================================================*/
21944VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
21945 tSirEXTScanStartReqParams *wdaRequest)
21946{
21947 WDI_Status status = WDI_STATUS_SUCCESS;
21948 tWDA_ReqParams *pWdaParams;
21949
21950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21951 "%s: ", __func__);
21952 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21953 if (NULL == pWdaParams)
21954 {
21955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21956 "%s: VOS MEM Alloc Failure", __func__);
21957 VOS_ASSERT(0);
21958 return VOS_STATUS_E_NOMEM;
21959 }
21960 pWdaParams->pWdaContext = pWDA;
21961 pWdaParams->wdaMsgParam = wdaRequest;
21962 pWdaParams->wdaWdiApiMsgParam = NULL;
21963
21964 status = WDI_EXTScanStartReq((void *)wdaRequest,
21965 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
21966 (void *)pWdaParams);
21967 if (IS_WDI_STATUS_FAILURE(status))
21968 {
21969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21970 "Failure to request. Free all the memory " );
21971 vos_mem_free(pWdaParams->wdaMsgParam);
21972 vos_mem_free(pWdaParams);
21973 }
21974 return CONVERT_WDI2VOS_STATUS(status);
21975}
21976
21977/*==========================================================================
21978 FUNCTION WDA_ProcessEXTScanStopReq
21979
21980 DESCRIPTION
21981 API to send EXTScan Start Request to WDI
21982
21983 PARAMETERS
21984 pWDA: Pointer to WDA context
21985 wdaRequest: Pointer to EXTScan req parameters
21986===========================================================================*/
21987VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
21988 tSirEXTScanStopReqParams *wdaRequest)
21989{
21990 WDI_Status status = WDI_STATUS_SUCCESS;
21991 tWDA_ReqParams *pWdaParams;
21992
21993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21994 "%s:", __func__);
21995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21996 if (NULL == pWdaParams)
21997 {
21998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21999 "%s: VOS MEM Alloc Failure", __func__);
22000 VOS_ASSERT(0);
22001 return VOS_STATUS_E_NOMEM;
22002 }
22003 pWdaParams->pWdaContext = pWDA;
22004 pWdaParams->wdaMsgParam = wdaRequest;
22005 pWdaParams->wdaWdiApiMsgParam = NULL;
22006
22007 status = WDI_EXTScanStopReq((void *)wdaRequest,
22008 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
22009 (void *)pWdaParams);
22010 if (IS_WDI_STATUS_FAILURE(status))
22011 {
22012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22013 "Failure to request. Free all the memory " );
22014 vos_mem_free(pWdaParams->wdaMsgParam);
22015 vos_mem_free(pWdaParams);
22016 }
22017 return CONVERT_WDI2VOS_STATUS(status);
22018}
22019
22020/*==========================================================================
22021 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
22022
22023 DESCRIPTION
22024 API to send EXTScan Get Cached Results Request to WDI
22025
22026 PARAMETERS
22027 pWDA: Pointer to WDA context
22028 wdaRequest: Pointer to EXTScan req parameters
22029===========================================================================*/
22030VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
22031 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
22032{
22033 WDI_Status status = WDI_STATUS_SUCCESS;
22034 tWDA_ReqParams *pWdaParams;
22035
22036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22037 "%s: ", __func__);
22038 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22039 if (NULL == pWdaParams)
22040 {
22041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22042 "%s: VOS MEM Alloc Failure", __func__);
22043 VOS_ASSERT(0);
22044 return VOS_STATUS_E_NOMEM;
22045 }
22046 pWdaParams->pWdaContext = pWDA;
22047 pWdaParams->wdaMsgParam = wdaRequest;
22048 pWdaParams->wdaWdiApiMsgParam = NULL;
22049
22050 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
22051 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
22052 (void *)pWdaParams);
22053 if (IS_WDI_STATUS_FAILURE(status))
22054 {
22055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22056 "Failure to request. Free all the memory " );
22057 vos_mem_free(pWdaParams->wdaMsgParam);
22058 vos_mem_free(pWdaParams);
22059 }
22060 return CONVERT_WDI2VOS_STATUS(status);
22061}
22062
22063/*==========================================================================
22064 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
22065
22066 DESCRIPTION
22067 API to send EXTScan Get Capabilities Request to WDI
22068
22069 PARAMETERS
22070 pWDA: Pointer to WDA context
22071 wdaRequest: Pointer to EXTScan req parameters
22072===========================================================================*/
22073VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
22074 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
22075{
22076 WDI_Status status = WDI_STATUS_SUCCESS;
22077 tWDA_ReqParams *pWdaParams;
22078
22079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22080 "%s:", __func__);
22081 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22082 if (NULL == pWdaParams)
22083 {
22084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22085 "%s: VOS MEM Alloc Failure", __func__);
22086 VOS_ASSERT(0);
22087 return VOS_STATUS_E_NOMEM;
22088 }
22089 pWdaParams->pWdaContext = pWDA;
22090 pWdaParams->wdaMsgParam = wdaRequest;
22091 pWdaParams->wdaWdiApiMsgParam = NULL;
22092
22093 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
22094 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
22095 (void *)pWdaParams);
22096 if (IS_WDI_STATUS_FAILURE(status))
22097 {
22098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22099 "Failure to request. Free all the memory " );
22100 vos_mem_free(pWdaParams->wdaMsgParam);
22101 vos_mem_free(pWdaParams);
22102 }
22103 return CONVERT_WDI2VOS_STATUS(status);
22104}
22105
22106/*==========================================================================
22107 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
22108
22109 DESCRIPTION
22110 API to send Set BSSID Hotlist Request to WDI
22111
22112 PARAMETERS
22113 pWDA: Pointer to WDA context
22114 wdaRequest: Pointer to EXTScan req parameters
22115===========================================================================*/
22116VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22117 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
22118{
22119 WDI_Status status = WDI_STATUS_SUCCESS;
22120 tWDA_ReqParams *pWdaParams;
22121
22122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22123 "%s: ", __func__);
22124 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22125 if (NULL == pWdaParams)
22126 {
22127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22128 "%s: VOS MEM Alloc Failure", __func__);
22129 VOS_ASSERT(0);
22130 return VOS_STATUS_E_NOMEM;
22131 }
22132 pWdaParams->pWdaContext = pWDA;
22133 pWdaParams->wdaMsgParam = wdaRequest;
22134 pWdaParams->wdaWdiApiMsgParam = NULL;
22135
22136 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
22137 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
22138 (void *)pWdaParams);
22139 if (IS_WDI_STATUS_FAILURE(status))
22140 {
22141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22142 "Failure to request. Free all the memory " );
22143 vos_mem_free(pWdaParams->wdaMsgParam);
22144 vos_mem_free(pWdaParams);
22145 }
22146 return CONVERT_WDI2VOS_STATUS(status);
22147}
22148
22149/*==========================================================================
22150 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
22151
22152 DESCRIPTION
22153 API to send Reset BSSID Hotlist Request to WDI
22154
22155 PARAMETERS
22156 pWDA: Pointer to WDA context
22157 wdaRequest: Pointer to EXTScan req parameters
22158===========================================================================*/
22159VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22160 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
22161{
22162 WDI_Status status = WDI_STATUS_SUCCESS;
22163 tWDA_ReqParams *pWdaParams;
22164
22165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22166 "%s:", __func__);
22167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22168 if (NULL == pWdaParams)
22169 {
22170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22171 "%s: VOS MEM Alloc Failure", __func__);
22172 VOS_ASSERT(0);
22173 return VOS_STATUS_E_NOMEM;
22174 }
22175 pWdaParams->pWdaContext = pWDA;
22176 pWdaParams->wdaMsgParam = wdaRequest;
22177 pWdaParams->wdaWdiApiMsgParam = NULL;
22178
22179 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
22180 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
22181 (void *)pWdaParams);
22182 if (IS_WDI_STATUS_FAILURE(status))
22183 {
22184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22185 "Failure to request. Free all the memory " );
22186 vos_mem_free(pWdaParams->wdaMsgParam);
22187 vos_mem_free(pWdaParams);
22188 }
22189 return CONVERT_WDI2VOS_STATUS(status);
22190}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022191
22192/*==========================================================================
22193 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
22194
22195 DESCRIPTION
22196 API to send Set SSID Hotlist Request to WDI
22197
22198 PARAMETERS
22199 pWDA: Pointer to WDA context
22200 wdaRequest: Pointer to EXTScan req parameters
22201===========================================================================*/
22202VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
22203 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
22204{
22205 WDI_Status status = WDI_STATUS_SUCCESS;
22206 tWDA_ReqParams *pWdaParams;
22207
22208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22209 "%s: ", __func__);
22210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22211 if (NULL == pWdaParams)
22212 {
22213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22214 "%s: VOS MEM Alloc Failure", __func__);
22215 VOS_ASSERT(0);
22216 return VOS_STATUS_E_NOMEM;
22217 }
22218 pWdaParams->pWdaContext = pWDA;
22219 pWdaParams->wdaMsgParam = wdaRequest;
22220 pWdaParams->wdaWdiApiMsgParam = NULL;
22221
22222 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
22223 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
22224 (void *)pWdaParams);
22225 if (IS_WDI_STATUS_FAILURE(status))
22226 {
22227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22228 "Failure to request. Free all the memory " );
22229 vos_mem_free(pWdaParams->wdaMsgParam);
22230 vos_mem_free(pWdaParams);
22231 }
22232 return CONVERT_WDI2VOS_STATUS(status);
22233}
22234
22235/*==========================================================================
22236 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
22237
22238 DESCRIPTION
22239 API to send Reset SSID Hotlist Request to WDI
22240
22241 PARAMETERS
22242 pWDA: Pointer to WDA context
22243 wdaRequest: Pointer to EXTScan req parameters
22244===========================================================================*/
22245VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
22246 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
22247{
22248 WDI_Status status = WDI_STATUS_SUCCESS;
22249 tWDA_ReqParams *pWdaParams;
22250
22251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22252 "%s:", __func__);
22253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22254 if (NULL == pWdaParams)
22255 {
22256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22257 "%s: VOS MEM Alloc Failure", __func__);
22258 VOS_ASSERT(0);
22259 return VOS_STATUS_E_NOMEM;
22260 }
22261 pWdaParams->pWdaContext = pWDA;
22262 pWdaParams->wdaMsgParam = wdaRequest;
22263 pWdaParams->wdaWdiApiMsgParam = NULL;
22264
22265 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
22266 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
22267 (void *)pWdaParams);
22268 if (IS_WDI_STATUS_FAILURE(status))
22269 {
22270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22271 "Failure to request. Free all the memory " );
22272 vos_mem_free(pWdaParams->wdaMsgParam);
22273 vos_mem_free(pWdaParams);
22274 }
22275 return CONVERT_WDI2VOS_STATUS(status);
22276}
22277
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053022278/*==========================================================================
22279 FUNCTION WDA_ProcessHighPriorityDataInfoInd
22280
22281 DESCRIPTION
22282 API to send Reset SSID Hotlist Request to WDI
22283
22284 PARAMETERS
22285 pWDA: Pointer to WDA context
22286 wdaRequest: Pointer to EXTScan req parameters
22287===========================================================================*/
22288VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
22289 tSirHighPriorityDataInfoInd *wdaRequest)
22290{
22291 WDI_Status status = WDI_STATUS_SUCCESS;
22292
22293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22294 "%s:", __func__);
22295
22296 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
22297 if (WDI_STATUS_PENDING == status)
22298 {
22299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22300 FL("pending status received "));
22301 }
22302 else if (WDI_STATUS_SUCCESS_SYNC != status)
22303 {
22304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22305 FL("Failure status %d"), status);
22306 }
22307 return CONVERT_WDI2VOS_STATUS(status);
22308}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022309
Dino Mycle41bdc942014-06-10 11:30:24 +053022310#endif /* WLAN_FEATURE_EXTSCAN */
22311
Sunil Duttbd736ed2014-05-26 21:19:41 +053022312#ifdef WLAN_FEATURE_LINK_LAYER_STATS
22313
22314/*==========================================================================
22315 FUNCTION WDA_LLStatsSetRspCallback
22316
22317 DESCRIPTION
22318 API to process set link layer statistics response from FW
22319
22320 PARAMETERS
22321 pRsp: Pointer to set link layer statistics response
22322 pUserData: Pointer to user data
22323
22324 RETURN VALUE
22325 NONE
22326
22327===========================================================================*/
22328void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
22329{
22330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22331
22332
22333 if (NULL == pWdaParams)
22334 {
22335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22336 "%s: pWdaParams received NULL", __func__);
22337 VOS_ASSERT(0) ;
22338 return ;
22339 }
22340
22341 /* Do not need to send notification to upper layer
22342 * Just free allocated resources */
22343 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22344 {
22345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22346 }
22347 if (pWdaParams->wdaMsgParam != NULL)
22348 {
22349 vos_mem_free(pWdaParams->wdaMsgParam);
22350 }
22351 vos_mem_free(pWdaParams) ;
22352
22353 return;
22354}
22355
22356/*==========================================================================
22357 FUNCTION WDA_ProcessLLStatsSetReq
22358
22359 DESCRIPTION
22360 API to send Set Link Layer Stats request to WDI
22361
22362 PARAMETERS
22363 pWDA: Pointer to WDA context
22364 wdaRequest: Pointer to set Link Layer Stats req parameters
22365===========================================================================*/
22366VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
22367 tSirLLStatsSetReq *wdaRequest)
22368{
22369 WDI_Status status = WDI_STATUS_SUCCESS;
22370 tWDA_ReqParams *pWdaParams;
22371
22372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22373 if (NULL == pWdaParams)
22374 {
22375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22376 "%s: VOS MEM Alloc Failure", __func__);
22377 VOS_ASSERT(0);
22378 return VOS_STATUS_E_NOMEM;
22379 }
22380 pWdaParams->pWdaContext = pWDA;
22381 pWdaParams->wdaMsgParam = wdaRequest;
22382 pWdaParams->wdaWdiApiMsgParam = NULL;
22383
22384 status = WDI_LLStatsSetReq((void *)wdaRequest,
22385 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
22386 (void *)pWdaParams);
22387 if (IS_WDI_STATUS_FAILURE(status))
22388 {
22389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22390 "Failure to request. Free all the memory " );
22391 vos_mem_free(pWdaParams->wdaMsgParam);
22392 vos_mem_free(pWdaParams);
22393 }
22394 return CONVERT_WDI2VOS_STATUS(status);
22395}
22396
22397/*==========================================================================
22398 FUNCTION WDA_LLStatsGetRspCallback
22399
22400 DESCRIPTION
22401 API to process get link layer statistics response from FW
22402
22403 PARAMETERS
22404 pRsp: Pointer to get link layer statistics response
22405 pUserData: Pointer to user data
22406
22407 RETURN VALUE
22408 NONE
22409
22410===========================================================================*/
22411void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
22412{
22413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22414
22415 if (NULL == pWdaParams)
22416 {
22417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22418 "%s: pWdaParams received NULL", __func__);
22419 VOS_ASSERT(0) ;
22420 return ;
22421 }
22422
22423 /* Do not need to send notification to upper layer
22424 * Just free allocated resources */
22425 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22426 {
22427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22428 }
22429 if (pWdaParams->wdaMsgParam != NULL)
22430 {
22431 vos_mem_free(pWdaParams->wdaMsgParam);
22432 }
22433 vos_mem_free(pWdaParams) ;
22434
22435 return;
22436}
22437
22438/*==========================================================================
22439 FUNCTION WDA_ProcessLLStatsGetReq
22440
22441 DESCRIPTION
22442 API to send Get Link Layer Stats request to WDI
22443
22444 PARAMETERS
22445 pWDA: Pointer to WDA context
22446 wdaRequest: Pointer to get Link Layer Stats req parameters
22447===========================================================================*/
22448VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
22449 tSirLLStatsGetReq *wdaRequest)
22450{
22451 WDI_Status status = WDI_STATUS_SUCCESS;
22452 tWDA_ReqParams *pWdaParams;
22453
22454 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22455 if (NULL == pWdaParams)
22456 {
22457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22458 "%s: VOS MEM Alloc Failure", __func__);
22459 VOS_ASSERT(0);
22460 return VOS_STATUS_E_NOMEM;
22461 }
22462 pWdaParams->pWdaContext = pWDA;
22463 pWdaParams->wdaMsgParam = wdaRequest;
22464 pWdaParams->wdaWdiApiMsgParam = NULL;
22465
22466 status = WDI_LLStatsGetReq((void *) wdaRequest,
22467 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
22468 (void *)pWdaParams);
22469 if (IS_WDI_STATUS_FAILURE(status))
22470 {
22471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22472 "Failure to request. Free all the memory " );
22473 vos_mem_free(pWdaParams->wdaMsgParam);
22474 vos_mem_free(pWdaParams);
22475 }
22476 return CONVERT_WDI2VOS_STATUS(status);
22477}
22478
22479/*==========================================================================
22480 FUNCTION WDA_LLStatsClearRspCallback
22481
22482 DESCRIPTION
22483 API to process clear link layer statistics response from FW
22484
22485 PARAMETERS
22486 pRsp: Pointer to clear link layer statistics response
22487 pUserData: Pointer to user data
22488
22489 RETURN VALUE
22490 NONE
22491
22492===========================================================================*/
22493void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
22494{
22495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22496
22497
22498 if (NULL == pWdaParams)
22499 {
22500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22501 "%s: pWdaParams received NULL", __func__);
22502 VOS_ASSERT(0) ;
22503 return ;
22504 }
22505 /* Do not need to send notification to upper layer
22506 * Just free allocated resources */
22507 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22508 {
22509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22510 }
22511 if (pWdaParams->wdaMsgParam != NULL)
22512 {
22513 vos_mem_free(pWdaParams->wdaMsgParam);
22514 }
22515 vos_mem_free(pWdaParams) ;
22516 return;
22517}
22518
22519/*==========================================================================
22520 FUNCTION WDA_ProcessLLStatsClearReq
22521
22522 DESCRIPTION
22523 API to send Clear Link Layer Stats request to WDI
22524
22525 PARAMETERS
22526 pWDA: Pointer to WDA context
22527 wdaRequest: Pointer to earLink Layer Stats req
22528===========================================================================*/
22529VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
22530 tSirLLStatsClearReq *wdaRequest)
22531{
22532 WDI_Status status = WDI_STATUS_SUCCESS;
22533 tWDA_ReqParams *pWdaParams;
22534
22535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22536 if (NULL == pWdaParams)
22537 {
22538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22539 "%s: VOS MEM Alloc Failure", __func__);
22540 VOS_ASSERT(0);
22541 return VOS_STATUS_E_NOMEM;
22542 }
22543 pWdaParams->pWdaContext = pWDA;
22544 pWdaParams->wdaMsgParam = wdaRequest;
22545 pWdaParams->wdaWdiApiMsgParam = NULL;
22546
22547 status = WDI_LLStatsClearReq((void *) wdaRequest,
22548 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
22549 (void *)pWdaParams);
22550 if (IS_WDI_STATUS_FAILURE(status))
22551 {
22552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22553 "Failure to request. Free all the memory " );
22554 vos_mem_free(pWdaParams->wdaMsgParam);
22555 vos_mem_free(pWdaParams);
22556 }
22557 return CONVERT_WDI2VOS_STATUS(status);
22558}
22559
22560#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053022561
Abhishek Singh85b74712014-10-08 11:38:19 +053022562void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
22563{
22564 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
22565
22566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22567 "<------ %s " ,__func__);
22568 if (NULL == fwStatsinfo)
22569 {
22570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22571 "%s: pWdaParams received NULL", __func__);
22572 VOS_ASSERT(0);
22573 return;
22574 }
22575
22576 if(fwStatsinfo->callback)
22577 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
22578
22579 vos_mem_free(pUserData);
22580 return;
22581}
22582
22583
22584v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
22585 tSirFWStatsGetReq *pData)
22586{
22587
22588 WDI_Status wdiStatus;
22589 tSirFWStatsInfo *fwStatsinfo;
22590
22591 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22592 "------> %s" , __func__);
22593
22594 fwStatsinfo =
22595 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
22596 if (NULL == fwStatsinfo)
22597 {
22598 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22599 "%s: VOS MEM Alloc Failure", __func__);
22600 VOS_ASSERT(0);
22601 vos_mem_free(pData);
22602 return;
22603 }
22604
22605 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
22606 fwStatsinfo->data = pData->data;
22607
22608 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
22609 WDA_FWStatsGetRspCallback,
22610 pData->stats);
22611 if (WDI_STATUS_PENDING == wdiStatus)
22612 {
22613 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22614 "Pending received for %s:%d ", __func__, __LINE__);
22615 }
22616 else if (WDI_STATUS_SUCCESS != wdiStatus)
22617 {
22618 if (fwStatsinfo->callback)
22619 {
22620 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
22621 }
22622 vos_mem_free(fwStatsinfo);
22623 }
22624 vos_mem_free(pData);
22625}
22626
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053022627/*==========================================================================
22628 FUNCTION WDA_EncryptMsgRspCallback
22629
22630 DESCRIPTION
22631 API to send Encrypt message response to HDD
22632
22633 PARAMETERS
22634 pEventData: Response from FW
22635 pUserData: Data sent to firmware as part of request
22636===========================================================================*/
22637void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
22638 void* pUserData)
22639{
22640 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22641 tWDA_CbContext *pWDA = NULL;
22642 tpAniSirGlobal pMac;
22643 vos_msg_t vosMsg;
22644 tpSirEncryptedDataRspParams pEncRspParams;
22645 tpSetEncryptedDataRspParams pEncryptedDataRsp;
22646
22647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22648 FL("%s:"), __func__);
22649 if (NULL == pWdaParams)
22650 {
22651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22652 FL("%s: pWdaParams received NULL"), __func__);
22653 VOS_ASSERT(0);
22654 return;
22655 }
22656
22657 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
22658
22659 if (NULL == pWDA)
22660 {
22661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22662 FL("%s: pWDA received NULL"), __func__);
22663 VOS_ASSERT(0);
22664 goto error;
22665 }
22666
22667 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
22668 if (NULL == pMac)
22669 {
22670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22671 FL("%s:pMac is NULL"), __func__);
22672 VOS_ASSERT(0);
22673 goto error;
22674 }
22675
22676 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
22677
22678 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
22679 if (NULL == pEncRspParams)
22680 {
22681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22682 FL("%s: VOS MEM Alloc Failure"), __func__);
22683 VOS_ASSERT(0);
22684 goto error;
22685 }
22686
22687 /* Message Header */
22688 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
22689 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
22690 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
22691 pEncryptedDataRsp->encryptedPayload.length;
22692 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
22693 pEncryptedDataRsp->encryptedPayload.data,
22694 pEncryptedDataRsp->encryptedPayload.length);
22695
22696 /* VOS message wrapper */
22697 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
22698 vosMsg.bodyptr = (void *)pEncRspParams;
22699 vosMsg.bodyval = 0;
22700
22701 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
22702 {
22703 /* free the mem */
22704 vos_mem_free((v_VOID_t *) pEncRspParams);
22705 }
22706
22707error:
22708
22709 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22710 {
22711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22712 }
22713 if (pWdaParams->wdaMsgParam != NULL)
22714 {
22715 vos_mem_free(pWdaParams->wdaMsgParam);
22716 }
22717 vos_mem_free(pWdaParams) ;
22718
22719 return;
22720}
22721/*==========================================================================
22722 FUNCTION WDA_ProcessEncryptMsgReq
22723
22724 DESCRIPTION
22725 API to send Encrypt message Request to WDI
22726
22727 PARAMETERS
22728 pWDA: Pointer to WDA context
22729 wdaRequest: Pointer to Encrypt_msg req parameters
22730===========================================================================*/
22731VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
22732 u8 *wdaRequest)
22733{
22734 WDI_Status status = WDI_STATUS_SUCCESS;
22735 tWDA_ReqParams *pWdaParams;
22736
22737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22738 FL("%s: "), __func__);
22739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22740 if (NULL == pWdaParams)
22741 {
22742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22743 FL("%s: VOS MEM Alloc Failure"), __func__);
22744 VOS_ASSERT(0);
22745 return VOS_STATUS_E_NOMEM;
22746 }
22747 pWdaParams->pWdaContext = pWDA;
22748 pWdaParams->wdaMsgParam = wdaRequest;
22749 pWdaParams->wdaWdiApiMsgParam = NULL;
22750
22751 status = WDI_EncryptMsgReq((void *)wdaRequest,
22752 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
22753 (void *)pWdaParams);
22754 if (IS_WDI_STATUS_FAILURE(status))
22755 {
22756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22757 FL("Failure to request. Free all the memory " ));
22758 vos_mem_free(pWdaParams->wdaMsgParam);
22759 vos_mem_free(pWdaParams);
22760 }
22761 return CONVERT_WDI2VOS_STATUS(status);
22762}
Abhishek Singh41988ba2015-05-25 19:42:29 +053022763/*==========================================================================
22764 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
22765
22766 DESCRIPTION
22767 API to enable/disable RTS/CTS for different modes.
22768
22769 PARAMETERS
22770 pWDA: Pointer to WDA context
22771 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
22772===========================================================================*/
22773
22774VOS_STATUS
22775WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
22776 tANI_U32 rtsCtsVal)
22777{
22778 WDI_Status status;
22779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22780 FL("---> %s"), __func__);
22781 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
22782 if (WDI_STATUS_PENDING == status)
22783 {
22784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22785 FL("pending status received "));
22786 }
22787 else if (WDI_STATUS_SUCCESS_SYNC != status)
22788 {
22789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22790 FL("Failure status %d"), status);
22791 }
22792 return CONVERT_WDI2VOS_STATUS(status) ;
22793}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022794
22795void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053022796{
22797 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022798 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053022799
22800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22801 "<------ %s " ,__func__);
22802 if (NULL == pWdaParams)
22803 {
22804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22805 "%s: pWdaParams received NULL", __func__);
22806 VOS_ASSERT(0) ;
22807 return ;
22808 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022809 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
22810 if (pData != NULL) {
22811 pData->callback(pData->magic, pData->cmpVar);
22812 vos_mem_free(pWdaParams->wdaMsgParam);
22813 }
Katya Nigamf0511f62015-05-05 16:40:57 +053022814 vos_mem_free(pWdaParams) ;
22815
22816 return;
22817}
22818
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022819VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053022820{
22821
22822 WDI_Status status = WDI_STATUS_SUCCESS;
22823 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022824 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053022825
22826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22827 FL("%s: "), __func__);
22828 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22829 if (NULL == pWdaParams)
22830 {
22831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22832 FL("%s: VOS MEM Alloc Failure"), __func__);
22833 VOS_ASSERT(0);
22834 return VOS_STATUS_E_NOMEM;
22835 }
22836 pWdaParams->pWdaContext = pWDA;
22837 pWdaParams->wdaMsgParam = wdaRequest;
22838 pWdaParams->wdaWdiApiMsgParam = NULL;
22839
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022840 status = WDI_MonStartReq(pMonModeData->data,
22841 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022842 (void *)pWdaParams);
22843 if (IS_WDI_STATUS_FAILURE(status))
22844 {
22845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22846 "Failure to request. Free all the memory " );
22847 vos_mem_free(pWdaParams->wdaMsgParam);
22848 vos_mem_free(pWdaParams);
22849 }
22850 return CONVERT_WDI2VOS_STATUS(status);
22851}
22852
Katya Nigamf0511f62015-05-05 16:40:57 +053022853VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
22854{
22855
22856 WDI_Status status = WDI_STATUS_SUCCESS;
22857 tWDA_ReqParams *pWdaParams;
22858
22859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22860 FL("%s: "), __func__);
22861 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22862 if (NULL == pWdaParams)
22863 {
22864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22865 FL("%s: VOS MEM Alloc Failure"), __func__);
22866 VOS_ASSERT(0);
22867 return VOS_STATUS_E_NOMEM;
22868 }
22869 pWdaParams->pWdaContext = pWDA;
22870 pWdaParams->wdaMsgParam = wdaRequest;
22871 pWdaParams->wdaWdiApiMsgParam = NULL;
22872
Bhargav Shah1ae5de02015-07-20 13:32:31 +053022873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22874 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022875 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022876 (void *)pWdaParams);
22877
22878 if (IS_WDI_STATUS_FAILURE(status))
22879 {
22880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22881 "Failure to request. Free all the memory " );
22882 vos_mem_free(pWdaParams->wdaMsgParam);
22883 vos_mem_free(pWdaParams);
22884 }
22885 return CONVERT_WDI2VOS_STATUS(status);
22886}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053022887
22888VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
22889{
22890 WDI_Status status;
22891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22892 FL("---> %s"), __func__);
22893 status = WDI_EnableDisableCAEventInd(val);
22894 if (WDI_STATUS_PENDING == status)
22895 {
22896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22897 FL("pending status received "));
22898 }
22899 else if (WDI_STATUS_SUCCESS_SYNC != status)
22900 {
22901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22902 FL("Failure status %d"), status);
22903 }
22904 return CONVERT_WDI2VOS_STATUS(status) ;
22905}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022906
22907/*==========================================================================
22908 FUNCTION WDA_WifiConfigSetRspCallback
22909
22910 DESCRIPTION
22911 API to process set WifiConfig response from FW
22912
22913 PARAMETERS
22914 pRsp: Pointer to set WifiConfig response
22915 pUserData: Pointer to user data
22916
22917 RETURN VALUE
22918 NONE
22919
22920===========================================================================*/
22921void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
22922{
22923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22924
22925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22926 "<------ %s " ,__func__);
22927
22928 if(NULL == pWdaParams)
22929 {
22930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22931 "%s: pWdaParams received NULL", __func__);
22932 VOS_ASSERT(0);
22933 return ;
22934 }
22935
22936 if(NULL == pWdaParams->wdaMsgParam)
22937 {
22938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22939 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
22940 VOS_ASSERT(0);
22941 vos_mem_free(pWdaParams);
22942 return ;
22943 }
22944
22945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22946 vos_mem_free(pWdaParams->wdaMsgParam);
22947 vos_mem_free(pWdaParams);
22948
22949 return;
22950}
22951
22952/*==========================================================================
22953 FUNCTION WDA_ProcessWifiConfigReq
22954
22955 DESCRIPTION
22956 API to send Set WifiConfig params request to WDI
22957
22958 PARAMETERS
22959 pWDA: Pointer to WDA context
22960 wdaRequest: Pointer to set WifiConfig req parameters
22961===========================================================================*/
22962
22963VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
22964 tSetWifiConfigParams *pwdaWificonfig)
22965{
22966 WDI_Status status = WDI_STATUS_SUCCESS;
22967 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
22968 tWDA_ReqParams *pWdaParams ;
22969 WDI_Status wstatus;
22970
22971 /* Sanity Check*/
22972 if(NULL == pwdaWificonfig)
22973 {
22974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22975 "%s: tSetWifiConfigParams received NULL", __func__);
22976 VOS_ASSERT(0) ;
22977 return VOS_STATUS_E_FAULT;
22978 }
22979
22980 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
22981 sizeof(WDI_WifiConfigSetReqType));
22982 if(NULL == pwdiWifConfigSetReqParams)
22983 {
22984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22985 "%s: VOS MEM Alloc Failure", __func__);
22986 VOS_ASSERT(0);
22987 vos_mem_free(pwdaWificonfig);
22988 return VOS_STATUS_E_NOMEM;
22989 }
22990
22991 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
22992 if(NULL == pWdaParams)
22993 {
22994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22995 "%s: VOS MEM Alloc Failure", __func__);
22996 VOS_ASSERT(0);
22997 vos_mem_free(pwdiWifConfigSetReqParams);
22998 vos_mem_free(pwdaWificonfig);
22999 return VOS_STATUS_E_NOMEM;
23000 }
23001 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
23002 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
23003 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
23004 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
23005
23006 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053023007 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053023008 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
23009
23010 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
23011 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
23012 pWdaParams);
23013 if(IS_WDI_STATUS_FAILURE(wstatus))
23014 {
23015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23016 "Failure in sendind WifiConfigReq, free all the memory" );
23017 status = CONVERT_WDI2VOS_STATUS(wstatus);
23018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23019 vos_mem_free(pWdaParams->wdaMsgParam);
23020 vos_mem_free(pWdaParams);
23021 }
23022
23023 return status;
23024
23025}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023026
23027#ifdef FEATURE_OEM_DATA_SUPPORT
23028/*
23029 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
23030 * Request to WDI.
23031 */
23032VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
23033 tOemDataReqNewConfig *pOemDataReqNewConfig)
23034{
23035 VOS_STATUS status = VOS_STATUS_SUCCESS;
23036 WDI_Status wstatus;
23037 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
23038
23039 /* Sanity Check*/
23040 if(NULL == pOemDataReqNewConfig)
23041 {
23042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23043 "%s: pOemDataReqNewConfig received NULL", __func__);
23044 VOS_ASSERT(0) ;
23045 return VOS_STATUS_E_FAULT;
23046 }
23047
23048 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
23049 sizeof(WDI_OemDataReqNewConfig));
23050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23051 "------> %s " ,__func__);
23052
23053 if(NULL == wdiOemDataReqNewConfig)
23054 {
23055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23056 "%s: VOS MEM Alloc Failure", __func__);
23057 VOS_ASSERT(0);
23058 vos_mem_free(pOemDataReqNewConfig);
23059 return VOS_STATUS_E_NOMEM;
23060 }
23061
23062 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
23063 sizeof(WDI_OemDataReqNewConfig));
23064
23065 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
23066
23067 if (WDI_STATUS_PENDING == wstatus)
23068 {
23069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23070 FL("pending status received "));
23071 }
23072 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
23073 {
23074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23075 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023076 }
23077
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053023078 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023079 vos_mem_free(pOemDataReqNewConfig);
23080
23081 return status;
23082}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023083
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023084void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
23085 void *pUserData)
23086{
23087 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
23088 (tSirAntennaDiversitySelectionInfo *)pUserData;
23089
23090 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
23091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23092 "<------ %s " ,__func__);
23093 if (NULL == pAntennaDivSelInfo)
23094 {
23095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23096 "%s: pWdaParams received NULL", __func__);
23097 VOS_ASSERT(0) ;
23098 return ;
23099 }
23100 if (NULL == resParams)
23101 {
23102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23103 "%s: resParams received NULL", __func__);
23104 VOS_ASSERT(0) ;
23105 return ;
23106 }
23107
23108 if (pAntennaDivSelInfo->callback)
23109 {
23110 if (WDI_STATUS_SUCCESS == status)
23111 {
23112 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
23113 pAntennaDivSelInfo->data);
23114 }
23115 else
23116 {
23117 pAntennaDivSelInfo->callback(-1,
23118 pAntennaDivSelInfo->data);
23119 }
23120 }
23121
23122 vos_mem_free(pUserData);
23123 return;
23124}
23125
23126/*
23127 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
23128 * Request to WDI.
23129 */
23130v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
23131 tSirAntennaDiversitySelectionReq *pData)
23132{
23133 WDI_Status wdiStatus;
23134 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
23135
23136 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23137 "------> %s " , __func__);
23138
23139 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
23140 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
23141 if (NULL == pAntennaDivSelInfo)
23142 {
23143 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23144 "%s: VOS MEM Alloc Failure", __func__);
23145 VOS_ASSERT(0);
23146 vos_mem_free(pData);
23147 return;
23148 }
23149
23150 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
23151 pAntennaDivSelInfo->data = pData->data;
23152
23153 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
23154 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
23155
23156 if (WDI_STATUS_PENDING == wdiStatus)
23157 {
23158 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23159 "Pending received for %s:%d ", __func__, __LINE__);
23160 }
23161 else if (WDI_STATUS_SUCCESS != wdiStatus)
23162 {
23163 if (pAntennaDivSelInfo->callback)
23164 {
23165 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
23166 }
23167 }
23168
23169 vos_mem_free(pData);
23170 return;
23171}
23172
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053023173/*
23174 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
23175 * Request to WDI.
23176 */
23177VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
23178 tModifyRoamParamsReqParams *params)
23179{
23180 WDI_Status status;
23181
23182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23183 FL("---> %s"), __func__);
23184
23185 if (NULL == params)
23186 {
23187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23188 FL("tModifyRoamParamsReqParams is received NULL"));
23189 return VOS_STATUS_E_NOMEM;
23190 }
23191
23192 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
23193 if (WDI_STATUS_PENDING == status)
23194 {
23195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23196 FL("pending status received "));
23197 }
23198 else if (WDI_STATUS_SUCCESS_SYNC != status)
23199 {
23200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23201 FL("Failure status %d"), status);
23202 }
23203 vos_mem_free(params);
23204 return CONVERT_WDI2VOS_STATUS(status) ;
23205}
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023206#endif
Manjeet Singh3ed79242017-01-11 19:04:32 +053023207/*
23208 * WDA_CapTsfRspCb : handle response for tsf requests
23209 * @wdi_rsp : Response from WDI for tsf requests
23210 * @user_data: pointer to user data
23211 * Returns: None
23212 */
23213void WDA_CapTsfRspCb (wdi_cap_tsf_rsp_t *wdi_rsp, void *user_data)
23214{
23215
23216 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
23217 tSirCapTsfParams *cap_tsf_params;
23218 struct stsf *stsf_temp;
23219 VOS_STATUS status;
23220
23221 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23222 "<------ %s " ,__func__);
23223
23224 if (NULL == wda_params) {
23225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23226 "%s: pWdaParams received NULL", __func__);
23227 VOS_ASSERT(0);
23228 return;
23229 }
23230
23231 if (NULL == wda_params->wdaMsgParam) {
23232 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23233 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23234 VOS_ASSERT(0);
23235 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23236 vos_mem_free(wda_params);
23237 return;
23238 }
23239
23240 stsf_temp = (struct stsf *)vos_mem_malloc(sizeof(*stsf_temp));
23241 if (NULL == stsf_temp) {
23242 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23243 "%s: Unable to allocate tsf struct", __func__);
23244 VOS_ASSERT(0);
23245 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23246 vos_mem_free(wda_params->wdaMsgParam);
23247 vos_mem_free(wda_params);
23248 return;
23249 }
23250 cap_tsf_params = (tSirCapTsfParams *)wda_params->wdaMsgParam;
23251 stsf_temp->session_id = cap_tsf_params->bss_idx;
23252 stsf_temp->set_tsf_req = true;
23253 stsf_temp->tsf_req_status = wdi_rsp->status;
23254
23255 if (cap_tsf_params->tsf_rsp_cb_func) {
23256 cap_tsf_params->tsf_rsp_cb_func (
23257 cap_tsf_params->tsf_rsp_cb_ctx, stsf_temp);
23258 }
23259 else {
23260 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23261 "%s: tsf callback is NULL", __func__);
23262 vos_mem_free(stsf_temp);
23263 }
23264 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
23265 if (status) {
23266 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23267 "%s: Capture TSF failed with status=%d", __func__,
23268 status);
23269 VOS_ASSERT(0);
23270 }
23271 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23272 vos_mem_free(wda_params->wdaMsgParam);
23273 vos_mem_free(wda_params);
23274 return;
23275}
23276
23277/*
23278 * WDA_GetTsfRspCb : handle response for get tsf request
23279 * @wdi_rsp : Response from WDI for tsf requests
23280 * @user_data: pointer to user data
23281 * Returns: None
23282 */
23283void WDA_GetTsfRspCb (wdi_cap_tsf_rsp_t *wdi_rsp, void *user_data)
23284{
23285
23286 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
23287 tSirCapTsfParams *cap_tsf_params;
23288 struct stsf *stsf_temp;
23289 VOS_STATUS status;
23290
23291 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23292 "<------ %s " ,__func__);
23293
23294 if (NULL == wda_params) {
23295 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23296 "%s: pWdaParams received NULL", __func__);
23297 VOS_ASSERT(0);
23298 return;
23299 }
23300
23301 if (NULL == wda_params->wdaMsgParam) {
23302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23303 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23304 VOS_ASSERT(0);
23305 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23306 vos_mem_free(wda_params);
23307 return;
23308 }
23309
23310 stsf_temp = (struct stsf *)vos_mem_malloc(sizeof(*stsf_temp));
23311 if (NULL == stsf_temp) {
23312 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23313 "%s: Unable to allocate tsf struct", __func__);
23314 VOS_ASSERT(0);
23315 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23316 vos_mem_free(wda_params->wdaMsgParam);
23317 vos_mem_free(wda_params);
23318 return;
23319 }
23320 cap_tsf_params = (tSirCapTsfParams *)wda_params->wdaMsgParam;
23321 stsf_temp->session_id = cap_tsf_params->bss_idx;
23322 /* Indicate to upper layer that this is a get request */
23323 stsf_temp->set_tsf_req = false;
23324 stsf_temp->tsf_low = wdi_rsp->tsf_lo;
23325 stsf_temp->tsf_high = wdi_rsp->tsf_hi;
23326 stsf_temp->tsf_req_status = wdi_rsp->status;
23327
23328 if (cap_tsf_params->tsf_rsp_cb_func) {
23329 cap_tsf_params->tsf_rsp_cb_func (
23330 cap_tsf_params->tsf_rsp_cb_ctx, stsf_temp);
23331 }
23332 else {
23333 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23334 "%s: tsf callback is NULL", __func__);
23335 vos_mem_free(stsf_temp);
23336 }
23337 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
23338 if (status) {
23339 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23340 "%s: Capture TSF failed with status=%d", __func__,
23341 status);
23342 VOS_ASSERT(0);
23343 }
23344 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23345 vos_mem_free(wda_params->wdaMsgParam);
23346 vos_mem_free(wda_params);
23347 return;
23348}
23349/*
23350 * FUNCTION: WDA_ProcessCapTsfReq
23351 * Send capture tsf request to FW.
23352 */
23353VOS_STATUS WDA_ProcessCapTsfReq(tWDA_CbContext *pWDA, tSirCapTsfParams *params)
23354{
23355 WDI_Status status = WDI_STATUS_SUCCESS;
23356 wdi_cap_tsf_params_t *pWDICapTsfReqType;
23357 tWDA_ReqParams *pWdaParams ;
23358
23359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23360 "<------ %s " ,__func__);
23361 if(NULL == params)
23362 {
23363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23364 "%s: cap tsf params NULL", __func__);
23365 VOS_ASSERT(0) ;
23366 return -EINVAL;
23367 }
23368
23369 pWDICapTsfReqType = (wdi_cap_tsf_params_t *)vos_mem_malloc(
23370 sizeof(*pWDICapTsfReqType));
23371 if(NULL == pWDICapTsfReqType)
23372 {
23373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23374 "%s: VOS MEM Alloc Failure", __func__);
23375 VOS_ASSERT(0);
23376 vos_mem_free(params);
23377 return VOS_STATUS_E_NOMEM;
23378 }
23379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(*pWdaParams)) ;
23380 if(NULL == pWdaParams)
23381 {
23382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23383 "%s: VOS MEM Alloc Failure", __func__);
23384 VOS_ASSERT(0);
23385 vos_mem_free(pWDICapTsfReqType);
23386 vos_mem_free(params);
23387 return VOS_STATUS_E_NOMEM;
23388 }
23389
23390 pWDICapTsfReqType->bss_idx = params->bss_idx;
23391 pWDICapTsfReqType->capTSFget = CAP_TSF_REQUEST;
23392
23393 pWdaParams->pWdaContext = pWDA;
23394 pWdaParams->wdaMsgParam = params;
23395 pWdaParams->wdaWdiApiMsgParam = (void *)pWDICapTsfReqType;
23396
23397 status = wdi_process_cap_tsf_req(pWDICapTsfReqType,
23398 (wdi_tsf_rsp_cb)WDA_CapTsfRspCb,
23399 pWdaParams);
23400
23401 if(IS_WDI_STATUS_FAILURE(status))
23402 {
23403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23404 "Failure in sendind WifiConfigReq, free all the memory" );
23405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23406 vos_mem_free(pWdaParams->wdaMsgParam);
23407 vos_mem_free(pWdaParams);
23408 vos_mem_free(params);
23409 }
23410 return CONVERT_WDI2VOS_STATUS(status) ;
23411}
23412
23413/*
23414 * FUNCTION: WDA_ProcessGetTsfReq
23415 * Send capture tsf request to FW.
23416 */
23417VOS_STATUS WDA_ProcessGetTsfReq(tWDA_CbContext *pWDA, tSirCapTsfParams *params)
23418{
23419 WDI_Status status = WDI_STATUS_SUCCESS;
23420 wdi_cap_tsf_params_t *pWDIGetTsfReqType;
23421 tWDA_ReqParams *pWdaParams ;
23422
23423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23424 "<------ %s " ,__func__);
23425 if(NULL == params)
23426 {
23427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23428 "%s: cap tsf params NULL", __func__);
23429 VOS_ASSERT(0) ;
23430 return VOS_STATUS_E_INVAL;
23431 }
23432
23433 pWDIGetTsfReqType = (wdi_cap_tsf_params_t *)vos_mem_malloc(
23434 sizeof(wdi_cap_tsf_params_t));
23435 if(NULL == pWDIGetTsfReqType)
23436 {
23437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23438 "%s: VOS MEM Alloc Failure", __func__);
23439 VOS_ASSERT(0);
23440 vos_mem_free(params);
23441 return VOS_STATUS_E_INVAL;
23442 }
23443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
23444 if(NULL == pWdaParams)
23445 {
23446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23447 "%s: VOS MEM Alloc Failure", __func__);
23448 VOS_ASSERT(0);
23449 vos_mem_free(pWDIGetTsfReqType);
23450 vos_mem_free(params);
23451 return VOS_STATUS_E_NOMEM;
23452 }
23453
23454 pWDIGetTsfReqType->bss_idx = params->bss_idx;
23455 /* Indicate that this is a get request */
23456 pWDIGetTsfReqType->capTSFget = GET_TSF_REQUEST;
23457
23458 pWdaParams->pWdaContext = pWDA;
23459 pWdaParams->wdaMsgParam = params;
23460 pWdaParams->wdaWdiApiMsgParam = (void *)pWDIGetTsfReqType;
23461
23462 status = wdi_process_get_tsf_req(pWDIGetTsfReqType,
23463 (wdi_tsf_rsp_cb)WDA_GetTsfRspCb,
23464 pWdaParams);
23465
23466 if(IS_WDI_STATUS_FAILURE(status))
23467 {
23468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23469 "Failure in sendind WifiConfigReq, free all the memory" );
23470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23471 vos_mem_free(pWdaParams->wdaMsgParam);
23472 vos_mem_free(pWdaParams);
23473 vos_mem_free(params);
23474 }
23475 return CONVERT_WDI2VOS_STATUS(status) ;
23476}