blob: 2215e827ac1c09104815ded7499cd3a7551988af [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +05302 * Copyright (c) 2012-2016 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 */
93#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define IS_WDI_STATUS_FAILURE(status) \
96 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define CONVERT_WDI2VOS_STATUS(x) \
98 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
99
100/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700101#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define WDA_GET_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
105
106#define WDA_SET_BA_TXFLAG(a, b, c) \
107 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
108
109#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
112 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113/* timer related Macros */
114#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
115 tx_timer_create(a, b, c, d, e, f, g)
116#define WDA_START_TIMER(a) tx_timer_activate(a)
117#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
118#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700119#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
122 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700123#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700124#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800127#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700128
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700129#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700132#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
133 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800134 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700135
136#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
137#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800138#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530139#define WDA_BA_MAX_RETRY_THRESHOLD 10
140#define WDA_BA_RETRY_TIME 300000 /* Time is in msec, equal to 5 mins */
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800141
Jeff Johnson295189b2012-06-20 16:38:30 -0700142/* extern declarations */
143extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700144extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* forward declarations */
147void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
148 void *pBodyptr, tANI_U32 bodyVal) ;
149VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
150 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
152VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
153
154extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
155 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530156void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700157void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
158 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
159void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
160 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
161void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
162 void* pUserData ) ;
163static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
164static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530165bool WDA_AllowAddBA(tpAniSirGlobal pMAc, tANI_U8 staId, tANI_U8 tid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800167void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef WLAN_FEATURE_VOWIFI_11R
170VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
171#endif /* WLAN_FEATURE_VOWIFI_11R */
172
Jeff Johnson295189b2012-06-20 16:38:30 -0700173void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
174void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
175VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700176#ifdef FEATURE_WLAN_SCAN_PNO
177static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
178static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
179static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
180#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700181#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700182VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530183VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
184 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530186void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
187void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
c_hpothu92367912014-05-01 15:18:17 +0530222v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
223 tSirBcnMissRateReq *pData);
224
Jeff Johnson295189b2012-06-20 16:38:30 -0700225VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
226 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700227#ifdef WLAN_FEATURE_11AC
228VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
229 tUpdateVHTOpMode *pData);
230#endif
Leo Chang9056f462013-08-01 19:21:11 -0700231
232#ifdef FEATURE_WLAN_LPHB
233VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
234 tSirLPHBReq *pData);
235#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530236
Abhishek Singh00b71972016-01-07 10:51:04 +0530237#ifdef WLAN_FEATURE_RMC
238void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
239 v_PVOID_t pData);
240#endif /* WLAN_FEATURE_RMC */
241
Dino Mycle41bdc942014-06-10 11:30:24 +0530242#ifdef WLAN_FEATURE_EXTSCAN
243VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
244 tSirEXTScanStartReqParams *wdaRequest);
245VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
246 tSirEXTScanStopReqParams *wdaRequest);
247VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
248 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
249VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
250 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
251VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
252 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
253VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
254 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530255VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
256 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
257VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
258 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530259VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
260 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530261#endif /* WLAN_FEATURE_EXTSCAN */
262
Sunil Duttbd736ed2014-05-26 21:19:41 +0530263#ifdef WLAN_FEATURE_LINK_LAYER_STATS
264VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
265 tSirLLStatsSetReq *wdaRequest);
266
267VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
268 tSirLLStatsGetReq *wdaRequest);
269
270VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
271 tSirLLStatsClearReq *wdaRequest);
272#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530273
274v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
275 tSirFWStatsGetReq *wdaRequest);
276
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530277VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
278 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530279VOS_STATUS
280WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
281 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530282
c_manjeecfd1efb2015-09-25 19:32:34 +0530283VOS_STATUS
284WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
285 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530286
Katya Nigamf0511f62015-05-05 16:40:57 +0530287VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
288VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530289VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530290
291VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
292 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530293
294VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
295 tOemDataReqNewConfig *pOemDataReqNewConfig);
296
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530297
298v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
299 tSirAntennaDiversitySelectionReq *pData);
300
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530301VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
302 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530303/*
304 * FUNCTION: WDA_ProcessNanRequest
305 * Process NAN request
306 */
307VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
308 tNanRequest *wdaRequest)
309{
310 WDI_Status status = WDI_STATUS_SUCCESS;
311 tWDA_ReqParams *pWdaParams;
312 WDI_NanRequestType *wdiRequest = NULL;
313 size_t wdiReqLength = sizeof(WDI_NanRequestType)
314 - sizeof(wdiRequest->request_data)
315 + wdaRequest->request_data_len;
316
317 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
318
319 if (NULL == wdiRequest)
320 {
321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
322 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
323 wdiReqLength);
324 vos_mem_free(wdaRequest);
325 return VOS_STATUS_E_NOMEM;
326 }
327
328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
329 "WDA: Process Nan Request length: %zu", wdiReqLength);
330
331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
332 if (NULL == pWdaParams)
333 {
334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
335 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
336 VOS_ASSERT(0);
337 vos_mem_free(wdaRequest);
338 vos_mem_free(wdiRequest);
339 return VOS_STATUS_E_NOMEM;
340 }
341
342 wdiRequest->request_data_len = wdaRequest->request_data_len;
343
344 vos_mem_copy( wdiRequest->request_data,
345 wdaRequest->request_data,
346 wdaRequest->request_data_len);
347
348 vos_mem_free(wdaRequest);
349
350 pWdaParams->pWdaContext = pWDA;
351 pWdaParams->wdaMsgParam = NULL;
352 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
353
354 status = WDI_NanRequest(wdiRequest, pWdaParams);
355
356 if (IS_WDI_STATUS_FAILURE(status))
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
359 "Failure to request. Free all the memory " );
360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
361 vos_mem_free(pWdaParams);
362 }
363
364 return CONVERT_WDI2VOS_STATUS(status) ;
365}
366
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530367/**
368 * wda_state_info_dump() - prints state information of wda layer
369 */
370static void wda_state_info_dump(void)
371{
372 v_CONTEXT_t vos_ctx_ptr = NULL;
373 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530374
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
376 "<------ %s " ,__func__);
377
378 /* Get the Global VOSS Context */
379 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
380
381 if (NULL != vos_ctx_ptr)
382 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
383 vos_ctx_ptr );
384 else {
385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
386 "%s: Invalid Global VOSS Context", __func__);
387 VOS_ASSERT(0);
388 return;
389 }
390
391 if (NULL != wda)
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
393 "wdaState: %d linkState: %d", wda->wdaState,
394 wda->linkState);
395 else {
396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
397 "%s: Invalid WDA Context", __func__);
398 VOS_ASSERT(0);
399 }
400}
401
402/**
403 * wda_register_debug_callback() - registration function for wda layer
404 * to print wda state information
405 */
406static void wda_register_debug_callback(void)
407{
408 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
409}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530410
Jeff Johnson295189b2012-06-20 16:38:30 -0700411/*
412 * FUNCTION: WDA_open
413 * Allocate the WDA context
414 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530415VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 tMacOpenParameters *pMacParams )
417{
418 tWDA_CbContext *wdaContext;
419 VOS_STATUS status;
420 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530422 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
424 if(!VOS_IS_STATUS_SUCCESS(status))
425 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
427 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 return VOS_STATUS_E_NOMEM;
429 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /*__asm int 3;*/
431 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
432
433 /* Initialize data structures */
434 wdaContext->pVosContext = pVosContext;
435 wdaContext->wdaState = WDA_INIT_STATE;
436 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530437 vos_lock_init(&wdaContext->mgmt_pkt_lock);
438
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* Initialize WDA-WDI synchronization event */
440 status = vos_event_init(&wdaContext->wdaWdiEvent);
441 if(!VOS_IS_STATUS_SUCCESS(status))
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800444 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800445 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 /* Init Frame transfer event */
448 status = vos_event_init(&wdaContext->txFrameEvent);
449 if(!VOS_IS_STATUS_SUCCESS(status))
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800452 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800453 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 status = vos_event_init(&wdaContext->suspendDataTxEvent);
456 if(!VOS_IS_STATUS_SUCCESS(status))
457 {
458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800459 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800460 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
463 if(!VOS_IS_STATUS_SUCCESS(status))
464 {
465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800466 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800467 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530471 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 &wdiDevCapability, pMacParams->driverType))
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800476 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 else
479 {
480 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
481 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
482 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* update max STA in WDA used for BA */
484 wdaContext->wdaMaxSta = pMacParams->maxStation;
485 /* store the frameTransRequired flag in wdaContext, to send this to HAL
486 * in WDA_Start
487 */
488 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
489 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530490
491 wda_register_debug_callback();
492
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800494
495error:
496 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
497 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700498}
499
Jeff Johnson295189b2012-06-20 16:38:30 -0700500/*
501 * FUNCTION: WDA_preStart
502 * Trigger DAL-AL to start CFG download
503 */
504VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
505{
506 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
507 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 /*
509 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
510 */
511 wdaMsg.type = WNI_CFG_DNLD_REQ ;
512 wdaMsg.bodyptr = NULL;
513 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 /* post the message.. */
515 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
516 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
517 {
518 vosStatus = VOS_STATUS_E_BADMSG;
519 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 return( vosStatus );
521}
Jeff Johnson295189b2012-06-20 16:38:30 -0700522/*
523 * FUNCTION: WDA_wdiStartCallback
524 * Once WDI_Start is finished, WDI start callback will be called by WDI
525 * to indicate completion of WDI_Start.
526 */
527void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
528 void *pVosContext)
529{
530 tWDA_CbContext *wdaContext;
531 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 if (NULL == pVosContext)
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 return;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
539 if (NULL == wdaContext)
540 {
541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700542 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 return;
544 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700548 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 }
550 else
551 {
552 wdaContext->wdaState = WDA_START_STATE;
553 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* extract and save version information from the Start Response */
555 wdaContext->wcnssWlanCompiledVersion.major =
556 wdiRspParams->wlanCompiledVersion.major;
557 wdaContext->wcnssWlanCompiledVersion.minor =
558 wdiRspParams->wlanCompiledVersion.minor;
559 wdaContext->wcnssWlanCompiledVersion.version =
560 wdiRspParams->wlanCompiledVersion.version;
561 wdaContext->wcnssWlanCompiledVersion.revision =
562 wdiRspParams->wlanCompiledVersion.revision;
563 wdaContext->wcnssWlanReportedVersion.major =
564 wdiRspParams->wlanReportedVersion.major;
565 wdaContext->wcnssWlanReportedVersion.minor =
566 wdiRspParams->wlanReportedVersion.minor;
567 wdaContext->wcnssWlanReportedVersion.version =
568 wdiRspParams->wlanReportedVersion.version;
569 wdaContext->wcnssWlanReportedVersion.revision =
570 wdiRspParams->wlanReportedVersion.revision;
571 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
572 wdiRspParams->wcnssSoftwareVersion,
573 sizeof(wdaContext->wcnssSoftwareVersionString));
574 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
575 wdiRspParams->wcnssHardwareVersion,
576 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 /* Notify WDA_start that WDI_Start has completed */
578 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700579 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700582 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 return;
585}
586
Jeff Johnson295189b2012-06-20 16:38:30 -0700587/*
588 * FUNCTION: WDA_start
589 * Prepare TLV configuration and call WDI_Start.
590 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700591VOS_STATUS WDA_start(v_PVOID_t pVosContext)
592{
593 tWDA_CbContext *wdaContext;
594 VOS_STATUS status;
595 WDI_Status wdiStatus;
596 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 if (NULL == pVosContext)
598 {
599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700600 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 return VOS_STATUS_E_FAILURE;
602 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
604 if (NULL == wdaContext)
605 {
606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700607 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 return VOS_STATUS_E_FAILURE;
609 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* Non-FTM mode, WDA status for START must be INIT
611 * FTM mode, WDA Status for START can be INIT or STOP */
612 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
613 (WDA_STOP_STATE != wdaContext->wdaState) )
614 {
615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
616 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 return VOS_STATUS_E_FAILURE;
619 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* initialize the wdiStartParam. Note that we can create this on
621 the stack since we won't exit until WDI_Start() completes or
622 times out */
623 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* prepare the config TLV for the WDI */
626 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
627 if ( !VOS_IS_STATUS_SUCCESS(status) )
628 {
629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700630 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 return VOS_STATUS_E_FAILURE;
632 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 /* note from here onwards if an error occurs we must
634 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
636 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
637 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* initialize the WDA-WDI synchronization event */
639 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* call WDI start */
641 wdiStatus = WDI_Start(&wdiStartParam,
642 (WDI_StartRspCb)WDA_wdiStartCallback,
643 (v_VOID_t *)pVosContext);
644 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
645 {
646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700647 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700648 vos_mem_free(wdiStartParam.pConfigBuffer);
649 return VOS_STATUS_E_FAILURE;
650 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 /* wait for WDI start to invoke our callback */
652 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
653 WDA_WDI_START_TIMEOUT );
654 if ( !VOS_IS_STATUS_SUCCESS(status) )
655 {
656 if ( VOS_STATUS_E_TIMEOUT == status )
657 {
658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700659 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 }
661 else
662 {
663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
664 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700665 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 }
667 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530668 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* we no longer need the config TLV */
672 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* if we are not in the START state then WDI_Start() failed */
674 if (WDA_START_STATE != wdaContext->wdaState)
675 {
676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700677 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 return VOS_STATUS_E_FAILURE;
679 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 /* FTM mode does not need to monitor BA activity */
681 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
682 {
683 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800684 if(VOS_STATUS_SUCCESS == status)
685 {
686 wdaContext->wdaTimersCreated = VOS_TRUE;
687 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530688 else
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 FL("wda create timers failed"));
692 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700693 }
Leo Chang9d76f622013-08-23 16:34:52 -0700694 else
695 {
696 vos_event_init(&wdaContext->ftmStopDoneEvent);
697 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700698 return status;
699}
700
Jeff Johnson295189b2012-06-20 16:38:30 -0700701/*
702 * FUNCTION: WDA_prepareConfigTLV
703 * Function to prepare CFG for DAL(WDA)
704 */
705VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
706 WDI_StartReqParamsType *wdiStartParams )
707{
708 /* get pMac to acess CFG data base */
709 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
710 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
711 tHalCfg *tlvStruct = NULL ;
712 tANI_U8 *tlvStructStart = NULL ;
713 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
714 v_PVOID_t *configParam;
715 tANI_U32 configParamSize;
716 tANI_U32 *configDataValue;
717 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700718 tANI_U8 i;
719
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 if ((NULL == pMac)||(NULL == wdaContext))
721 {
722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700723 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700724 VOS_ASSERT(0);
725 return VOS_STATUS_E_FAILURE;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
728 WNI_CFG_STA_ID_LEN +
729 WNI_CFG_EDCA_WME_ACBK_LEN +
730 WNI_CFG_EDCA_WME_ACBE_LEN +
731 WNI_CFG_EDCA_WME_ACVI_LEN +
732 WNI_CFG_EDCA_WME_ACVO_LEN +
733 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 /* malloc memory for all configs in one shot */
735 configParam = vos_mem_malloc(configParamSize);
736
737 if(NULL == configParam )
738 {
739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700740 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700741 VOS_ASSERT(0) ;
742 return VOS_STATUS_E_NOMEM;
743 }
744 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700745 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)configParam;
747 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* TODO: Remove Later */
749 /* QWLAN_HAL_CFG_STA_ID */
750 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
751 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
752 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
753 eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_STA_ID");
757 goto handle_failure;
758 }
759 tlvStruct->length = strLength ;
760 /* calculate the pad bytes to have the CFG in aligned format */
761 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
762 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
766 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
770 != eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
779 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
783 eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
792 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
793 tlvStruct->length = sizeof(tANI_U32);
794 configDataValue = (tANI_U32 *)(tlvStruct + 1);
795 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
796 != eSIR_SUCCESS)
797 {
798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
799 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
800 goto handle_failure;
801 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700802 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
803 + sizeof(tHalCfg) + tlvStruct->length)) ;
804
805 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
806 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
810 configDataValue ) != eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
814 goto handle_failure;
815 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
817 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 /* QWLAN_HAL_CFG_CAL_PERIOD */
819 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
823 != eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_CAL_PERIOD");
827 goto handle_failure;
828 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
830 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 /* QWLAN_HAL_CFG_CAL_CONTROL */
832 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_CAL_CONTROL");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_PROXIMITY */
845 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
849 != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_PROXIMITY");
853 goto handle_failure;
854 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
858 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
862 != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
871 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
875 eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
884 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
897 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
901 eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
910 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
923 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
936 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
949 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
950 tlvStruct->length = sizeof(tANI_U32);
951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
952 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
953 configDataValue ) != eSIR_SUCCESS)
954 {
955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
956 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
957 goto handle_failure;
958 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
960 + sizeof(tHalCfg) + tlvStruct->length));
961
962 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
963 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
976 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length));
988
989 /* QWLAN_HAL_CFG_FIXED_RATE */
990 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
994 != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_FIXED_RATE");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length));
1002
1003 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1004 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1005 tlvStruct->length = sizeof(tANI_U32);
1006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1007 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1008 != eSIR_SUCCESS)
1009 {
1010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1011 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1012 goto handle_failure;
1013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001014 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1015 + sizeof(tHalCfg) + tlvStruct->length));
1016
1017 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1018 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1022 configDataValue ) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1026 goto handle_failure;
1027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1031 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1032 tlvStruct->length = sizeof(tANI_U32);
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1035 configDataValue ) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1039 goto handle_failure;
1040 }
1041 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1044 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1048 configDataValue ) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1057 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1058 tlvStruct->length = sizeof(tANI_U32);
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1061 configDataValue ) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1065 goto handle_failure;
1066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1068 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1070 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1071 tlvStruct->length = sizeof(tANI_U32);
1072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1073 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1074 configDataValue ) != eSIR_SUCCESS)
1075 {
1076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1077 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1078 goto handle_failure;
1079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1081 + sizeof(tHalCfg) + tlvStruct->length);
1082
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1084 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1085 tlvStruct->length = sizeof(tANI_U32);
1086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1087 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1088 configDataValue ) != eSIR_SUCCESS)
1089 {
1090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1091 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1092 goto handle_failure;
1093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1097 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1098 tlvStruct->length = sizeof(tANI_U32);
1099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1100 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1101 configDataValue ) != eSIR_SUCCESS)
1102 {
1103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1104 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1105 goto handle_failure;
1106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1108 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1110 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1111 tlvStruct->length = sizeof(tANI_U32);
1112 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1113 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1114 eSIR_SUCCESS)
1115 {
1116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1117 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1118 goto handle_failure;
1119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001120 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1121 + sizeof(tHalCfg) + tlvStruct->length);
1122
1123 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1124 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1125 tlvStruct->length = sizeof(tANI_U32);
1126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1127 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1128 configDataValue ) != eSIR_SUCCESS)
1129 {
1130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1131 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1132 goto handle_failure;
1133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1135 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1137 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1138 tlvStruct->length = sizeof(tANI_U32);
1139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1140 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1141 configDataValue ) != eSIR_SUCCESS)
1142 {
1143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1144 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1145 goto handle_failure;
1146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1150 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1151 tlvStruct->length = sizeof(tANI_U32);
1152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1153 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1154 configDataValue ) != eSIR_SUCCESS)
1155 {
1156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1157 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1158 goto handle_failure;
1159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1161 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001162 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1163 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1164 tlvStruct->length = sizeof(tANI_U32);
1165 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1166 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1167 configDataValue ) != eSIR_SUCCESS)
1168 {
1169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1170 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1171 goto handle_failure;
1172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1174 + sizeof(tHalCfg) + tlvStruct->length);
1175
1176 /* QWLAN_HAL_CFG_STATS_PERIOD */
1177 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1181 eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_STATS_PERIOD");
1185 goto handle_failure;
1186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1190 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1194 eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1198 goto handle_failure;
1199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1203 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1207 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1211 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1224 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1225 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1228 &strLength) != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1232 goto handle_failure;
1233 }
1234 tlvStruct->length = strLength;
1235 /* calculate the pad bytes to have the CFG in aligned format */
1236 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1237 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1239 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1241 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1242 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1245 &strLength) != eSIR_SUCCESS)
1246 {
1247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1248 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1249 goto handle_failure;
1250 }
1251 tlvStruct->length = strLength;
1252 /* calculate the pad bytes to have the CFG in aligned format */
1253 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1254 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1256 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001257 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1258 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1259 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1260 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1261 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1262 &strLength) != eSIR_SUCCESS)
1263 {
1264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1265 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1266 goto handle_failure;
1267 }
1268 tlvStruct->length = strLength;
1269 /* calculate the pad bytes to have the CFG in aligned format */
1270 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1271 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1275 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1276 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1279 &strLength) != eSIR_SUCCESS)
1280 {
1281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1282 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1283 goto handle_failure;
1284 }
1285 tlvStruct->length = strLength;
1286 /* calculate the pad bytes to have the CFG in aligned format */
1287 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1288 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1292 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1300 goto handle_failure;
1301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1305 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1313 goto handle_failure;
1314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1318 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1326 goto handle_failure;
1327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1331 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1339 goto handle_failure;
1340 }
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1344 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1345 tlvStruct->length = sizeof(tANI_U32);
1346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1347 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1348 != eSIR_SUCCESS)
1349 {
1350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1351 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1352 goto handle_failure;
1353 }
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1357 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1361 != eSIR_SUCCESS)
1362 {
1363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1364 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1365 goto handle_failure;
1366 }
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001369 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1370 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1378 goto handle_failure;
1379 }
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001382 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1383 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1387 != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1391 goto handle_failure;
1392 }
1393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001395 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1396 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1400 != eSIR_SUCCESS)
1401 {
1402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1403 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1404 goto handle_failure;
1405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1409 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1413 != eSIR_SUCCESS)
1414 {
1415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1416 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1417 goto handle_failure;
1418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1430 goto handle_failure;
1431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1433 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001434 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1435 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1436 * into FW, so the parameters are added here.
1437 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001438 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1439 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001445 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1446 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1447 tlvStruct->length = sizeof(tANI_U32);
1448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1449 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1450 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1451 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1453 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1454 tlvStruct->length = sizeof(tANI_U32);
1455 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1456 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1457 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1458 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001459 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1460 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
1467 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1468 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1472 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1473 + sizeof(tHalCfg) + tlvStruct->length) ;
1474
1475 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1476 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1477 tlvStruct->length = sizeof(tANI_U32);
1478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1479 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1480 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1481 + sizeof(tHalCfg) + tlvStruct->length) ;
1482
1483 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1484 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490
1491 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1492 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1500 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1504 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1505 + sizeof(tHalCfg) + tlvStruct->length) ;
1506
1507 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1508 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514
1515 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1516 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1517 tlvStruct->length = sizeof(tANI_U32);
1518 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1519 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
1523 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1524 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1528 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1529 + sizeof(tHalCfg) + tlvStruct->length) ;
1530
1531 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1532 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1536 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1537 + sizeof(tHalCfg) + tlvStruct->length) ;
1538
1539 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1540 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1541 tlvStruct->length = sizeof(tANI_U32);
1542 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1543 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546
1547 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1548 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1549 tlvStruct->length = sizeof(tANI_U32);
1550 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1551 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
1555 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1556 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1560 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1561 + sizeof(tHalCfg) + tlvStruct->length) ;
1562
Wilson Tsaof8b37942013-09-06 10:49:00 -07001563 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1564 {
1565 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1566 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1567 tlvStruct->length = sizeof(tANI_U32);
1568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1569 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572
1573 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1574 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1575 tlvStruct->length = sizeof(tANI_U32);
1576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1577 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1578 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1579 + sizeof(tHalCfg) + tlvStruct->length) ;
1580
1581 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1582 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588
1589 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1590 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1591 tlvStruct->length = sizeof(tANI_U32);
1592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1593 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1594 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1595 + sizeof(tHalCfg) + tlvStruct->length) ;
1596 }
1597
1598 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1599 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1603 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1604 + sizeof(tHalCfg) + tlvStruct->length) ;
1605
1606 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1607 {
1608 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1609 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1610 tlvStruct->length = sizeof(tANI_U32);
1611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1612 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1613 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1614 + sizeof(tHalCfg) + tlvStruct->length) ;
1615 }
1616
1617 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1618 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1619 tlvStruct->length = sizeof(tANI_U32);
1620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1621 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
1624
Jeff Johnson32d95a32012-09-10 13:15:23 -07001625 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001626 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1630 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1631 wcnssCompiledApiVersion.minor,
1632 wcnssCompiledApiVersion.version,
1633 wcnssCompiledApiVersion.revision);
1634 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1635 + sizeof(tHalCfg) + tlvStruct->length) ;
1636
Jeff Johnsond13512a2012-07-17 11:42:19 -07001637 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1638 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1639 tlvStruct->length = sizeof(tANI_U32);
1640 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1641 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1642 configDataValue ) != eSIR_SUCCESS)
1643 {
1644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1645 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1646 goto handle_failure;
1647 }
1648
1649 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1650 + sizeof(tHalCfg) + tlvStruct->length) ;
1651 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1652 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
1665
1666 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1667 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1675 goto handle_failure;
1676 }
1677
1678 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1679 + sizeof(tHalCfg) + tlvStruct->length) ;
1680
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001681 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1682 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1683 tlvStruct->length = sizeof(tANI_U32);
1684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1685 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1686 != eSIR_SUCCESS)
1687 {
1688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1689 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1690 goto handle_failure;
1691 }
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05301692
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length);
1695
1696 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
1697 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
1701 != eSIR_SUCCESS)
1702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1704 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
1705 goto handle_failure;
1706 }
1707
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length);
1710
1711 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
1712 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
1716 != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
1720 goto handle_failure;
1721 }
1722
1723 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1724 + sizeof(tHalCfg) + tlvStruct->length);
1725
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001726#ifdef WLAN_SOFTAP_VSTA_FEATURE
1727 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1728 tlvStruct->length = sizeof(tANI_U32);
1729 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1730 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1731 != eSIR_SUCCESS)
1732 {
1733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1734 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1735 goto handle_failure;
1736 }
1737
1738 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1739 + sizeof(tHalCfg) + tlvStruct->length) ;
1740#endif
1741
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001742 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1743 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1744 tlvStruct->length = sizeof(tANI_U32);
1745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1746
1747 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1748 != eSIR_SUCCESS)
1749 {
1750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1751 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1752 goto handle_failure;
1753 }
1754
1755 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1756 + sizeof(tHalCfg) + tlvStruct->length) ;
1757
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301758/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1759 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1760 tlvStruct->length = sizeof(tANI_U32);
1761 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1762 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1763 configDataValue ) != eSIR_SUCCESS)
1764 {
1765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1766 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1767 goto handle_failure;
1768 }
1769
1770 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1771 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301772#ifdef FEATURE_WLAN_TDLS
1773 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1774 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1775 tlvStruct->length = sizeof(tANI_U32);
1776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1777 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1778 configDataValue ) != eSIR_SUCCESS)
1779 {
1780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1781 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1782 goto handle_failure;
1783 }
1784 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1785 + sizeof(tHalCfg) + tlvStruct->length) ;
1786
1787 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1788 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1789 tlvStruct->length = sizeof(tANI_U32);
1790 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1791 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1792 configDataValue ) != eSIR_SUCCESS)
1793 {
1794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1795 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1796 goto handle_failure;
1797 }
1798 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1799 + sizeof(tHalCfg) + tlvStruct->length) ;
1800 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1801 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1802 tlvStruct->length = sizeof(tANI_U32);
1803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1804 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1805 configDataValue ) != eSIR_SUCCESS)
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1808 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1809 goto handle_failure;
1810 }
1811 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1812 + sizeof(tHalCfg) + tlvStruct->length) ;
1813 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1814 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1815 tlvStruct->length = sizeof(tANI_U32);
1816 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1817 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1818 configDataValue ) != eSIR_SUCCESS)
1819 {
1820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1821 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1822 goto handle_failure;
1823 }
1824 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301826 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1827 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1828 tlvStruct->length = sizeof(tANI_U32);
1829 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1830 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1831 configDataValue ) != eSIR_SUCCESS)
1832 {
1833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1834 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1835 goto handle_failure;
1836 }
1837 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1838 + sizeof(tHalCfg) + tlvStruct->length) ;
1839
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301840#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301841
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001842 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1843 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1844 tlvStruct->length = sizeof(tANI_U32);
1845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1846 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1847 configDataValue ) != eSIR_SUCCESS)
1848 {
1849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1850 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1851 goto handle_failure;
1852 }
1853
1854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1855 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001856
1857 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1858 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1859 tlvStruct->length = sizeof(tANI_U32);
1860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1861 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1862 != eSIR_SUCCESS)
1863 {
1864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1865 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1866 goto handle_failure;
1867 }
1868 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1869 + sizeof(tHalCfg) + tlvStruct->length));
1870
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301871 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1872 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1873 tlvStruct->length = sizeof(tANI_U32);
1874 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1875 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1876 configDataValue ) != eSIR_SUCCESS)
1877 {
1878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1879 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1880 goto handle_failure;
1881 }
1882
1883 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1884 + sizeof(tHalCfg) + tlvStruct->length) ;
1885
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301886 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1887 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1888 tlvStruct->length = sizeof(tANI_U32);
1889 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1890 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1891 configDataValue ) != eSIR_SUCCESS)
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1895 goto handle_failure;
1896 }
1897 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1898 + sizeof(tHalCfg) + tlvStruct->length) ;
1899
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301900 /* QWLAN_HAL_CFG_ATH_DISABLE */
1901 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1902 tlvStruct->length = sizeof(tANI_U32);
1903 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1904 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1905 configDataValue ) != eSIR_SUCCESS)
1906 {
1907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1908 "Failed to get value for WNI_CFG_ATH_DISABLE");
1909 goto handle_failure;
1910 }
1911 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1912 + sizeof(tHalCfg) + tlvStruct->length) ;
1913
c_hpothu6d7dc922013-12-02 12:36:41 +05301914 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1915 tlvStruct->type = QWLAN_HAL_CFG_BTC_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_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_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_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1929 tlvStruct->type = QWLAN_HAL_CFG_BTC_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_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_ACTIVE_BT_LEN");
1937 goto handle_failure;
1938 }
1939 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1940 + sizeof(tHalCfg) + tlvStruct->length) ;
1941
1942 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1943 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1944 tlvStruct->length = sizeof(tANI_U32);
1945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1946 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1947 configDataValue ) != eSIR_SUCCESS)
1948 {
1949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1950 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1951 goto handle_failure;
1952 }
1953 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1954 + sizeof(tHalCfg) + tlvStruct->length) ;
1955
1956 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1957 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1958 tlvStruct->length = sizeof(tANI_U32);
1959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1960 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1961 configDataValue ) != eSIR_SUCCESS)
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1965 goto handle_failure;
1966 }
1967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1968 + sizeof(tHalCfg) + tlvStruct->length) ;
1969
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301970 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1971 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1972 tlvStruct->length = sizeof(tANI_U32);
1973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1974 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
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_PROBE_INTERVAL");
1979 goto handle_failure;
1980 }
1981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1982 + sizeof(tHalCfg) + tlvStruct->length) ;
1983
1984 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1985 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1986 tlvStruct->length = sizeof(tANI_U32);
1987 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1988 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1989 configDataValue ) != eSIR_SUCCESS)
1990 {
1991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1992 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1993 goto handle_failure;
1994 }
1995 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1996 + sizeof(tHalCfg) + tlvStruct->length) ;
1997
1998 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1999 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
2000 tlvStruct->length = sizeof(tANI_U32);
2001 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2002 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
2003 configDataValue ) != eSIR_SUCCESS)
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
2007 goto handle_failure;
2008 }
2009 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2010 + sizeof(tHalCfg) + tlvStruct->length) ;
2011
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08002012 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
2013 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
2014 tlvStruct->length = sizeof(tANI_U32);
2015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2016 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
2017 configDataValue ) != eSIR_SUCCESS)
2018 {
2019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2020 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
2021 goto handle_failure;
2022 }
2023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2024 + sizeof(tHalCfg) + tlvStruct->length) ;
2025
c_hpothu5bd1ae42014-03-07 20:28:22 +05302026 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
2027 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
2028 tlvStruct->length = sizeof(tANI_U32);
2029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2030
2031 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2032 configDataValue ) != eSIR_SUCCESS)
2033 {
2034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2035 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2036 goto handle_failure;
2037 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2039 + sizeof(tHalCfg) + tlvStruct->length) ;
2040
2041 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2042 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2043 tlvStruct->length = sizeof(tANI_U32);
2044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2045
2046 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2047 configDataValue ) != eSIR_SUCCESS)
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2050 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2051 goto handle_failure;
2052 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302053 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2054 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302055
c_hpothu2d0f1c42014-04-01 18:38:51 +05302056 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2057 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2058 tlvStruct->length = sizeof(tANI_U32);
2059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2060
2061 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2062 configDataValue ) != eSIR_SUCCESS)
2063 {
2064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2065 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2066 goto handle_failure;
2067 }
2068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2069 + sizeof(tHalCfg) + tlvStruct->length) ;
2070
2071 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2072 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2073 tlvStruct->length = sizeof(tANI_U32);
2074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2075
2076 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2077 configDataValue ) != eSIR_SUCCESS)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2080 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2081 goto handle_failure;
2082 }
2083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2084 + sizeof(tHalCfg) + tlvStruct->length) ;
2085
2086 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2087 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2088 tlvStruct->length = sizeof(tANI_U32);
2089 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2090
2091 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2092 configDataValue ) != eSIR_SUCCESS)
2093 {
2094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2095 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2096 goto handle_failure;
2097 }
2098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2099 + sizeof(tHalCfg) + tlvStruct->length) ;
2100
2101 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2102 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2103 tlvStruct->length = sizeof(tANI_U32);
2104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2105
2106 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2107 configDataValue ) != eSIR_SUCCESS)
2108 {
2109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2110 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2111 goto handle_failure;
2112 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2114 + sizeof(tHalCfg) + tlvStruct->length) ;
2115
Mihir Shetec34258c2014-07-30 17:50:27 +05302116 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2117 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2118 tlvStruct->length = sizeof(tANI_U32);
2119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2120
2121 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2122 configDataValue ) != eSIR_SUCCESS)
2123 {
2124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2125 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2126 goto handle_failure;
2127 }
2128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2129 + sizeof(tHalCfg) + tlvStruct->length) ;
2130
2131 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2132 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2133 tlvStruct->length = sizeof(tANI_U32);
2134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2135
2136 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2137 configDataValue ) != eSIR_SUCCESS)
2138 {
2139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2140 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2141 goto handle_failure;
2142 }
2143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2144 + sizeof(tHalCfg) + tlvStruct->length) ;
2145
2146 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2147 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2148 tlvStruct->length = sizeof(tANI_U32);
2149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2150
2151 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2152 configDataValue ) != eSIR_SUCCESS)
2153 {
2154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2155 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2156 goto handle_failure;
2157 }
2158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2159 + sizeof(tHalCfg) + tlvStruct->length) ;
2160
2161 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2162 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2163 tlvStruct->length = sizeof(tANI_U32);
2164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2165
2166 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2167 configDataValue ) != eSIR_SUCCESS)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2170 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2171 goto handle_failure;
2172 }
2173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2174 + sizeof(tHalCfg) + tlvStruct->length) ;
2175
2176 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2177 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2178 tlvStruct->length = sizeof(tANI_U32);
2179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2180
2181 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2182 configDataValue ) != eSIR_SUCCESS)
2183 {
2184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2185 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2186 goto handle_failure;
2187 }
2188 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2189 + sizeof(tHalCfg) + tlvStruct->length) ;
2190
2191 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2192 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2193 tlvStruct->length = sizeof(tANI_U32);
2194 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2195
2196 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2197 configDataValue ) != eSIR_SUCCESS)
2198 {
2199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2200 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2201 goto handle_failure;
2202 }
2203 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2204 + sizeof(tHalCfg) + tlvStruct->length) ;
2205
2206 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2207 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2208 tlvStruct->length = sizeof(tANI_U32);
2209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2210
2211 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2212 configDataValue ) != eSIR_SUCCESS)
2213 {
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2215 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2216 goto handle_failure;
2217 }
2218 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2219 + sizeof(tHalCfg) + tlvStruct->length) ;
2220
2221 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2223 tlvStruct->length = sizeof(tANI_U32);
2224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2225
2226 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2227 configDataValue ) != eSIR_SUCCESS)
2228 {
2229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2230 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2231 goto handle_failure;
2232 }
2233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2234 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302235
2236 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2237 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2238 tlvStruct->length = sizeof(tANI_U32);
2239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2240
2241 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2242 configDataValue ) != eSIR_SUCCESS)
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2246 goto handle_failure;
2247 }
2248 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2249 + sizeof(tHalCfg) + tlvStruct->length) ;
2250
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302251 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2252 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2253 tlvStruct->length = sizeof(tANI_U32);
2254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2255
2256 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2257 configDataValue ) != eSIR_SUCCESS)
2258 {
2259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2260 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2261 goto handle_failure;
2262 }
2263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2264 + sizeof(tHalCfg) + tlvStruct->length) ;
2265
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302266 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2267 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2268 tlvStruct->length = sizeof(tANI_U32);
2269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2270
2271 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2272 configDataValue ) != eSIR_SUCCESS)
2273 {
2274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2275 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2276 goto handle_failure;
2277 }
2278 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2279 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302280
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302281 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2282 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2283 tlvStruct->length = sizeof(tANI_U32);
2284 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2285
2286 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2287 configDataValue ) != eSIR_SUCCESS)
2288 {
2289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2290 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2291 goto handle_failure;
2292 }
2293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2294 + sizeof(tHalCfg) + tlvStruct->length) ;
2295
Sachin Ahuja41b61902015-06-18 18:32:15 +05302296
2297 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2298 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2299 tlvStruct->length = sizeof(tANI_U32);
2300 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2301
2302 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2303 configDataValue ) != eSIR_SUCCESS)
2304 {
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2306 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2307 goto handle_failure;
2308 }
2309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2310 + sizeof(tHalCfg) + tlvStruct->length) ;
2311
2312 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2314 tlvStruct->length = sizeof(tANI_U32);
2315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2316
2317 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2318 configDataValue ) != eSIR_SUCCESS)
2319 {
2320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2321 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2322 goto handle_failure;
2323 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302324 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2325 + sizeof(tHalCfg) + tlvStruct->length) ;
2326
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302327 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2328 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2329 tlvStruct->length = sizeof(tANI_U32);
2330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2331
2332 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2333 configDataValue ) != eSIR_SUCCESS)
2334 {
2335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2336 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2337 goto handle_failure;
2338 }
2339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2340 + sizeof(tHalCfg) + tlvStruct->length) ;
2341
2342 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2343 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2344 tlvStruct->length = sizeof(tANI_U32);
2345 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2346
2347 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2348 configDataValue ) != eSIR_SUCCESS)
2349 {
2350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2351 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2352 goto handle_failure;
2353 }
2354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2355 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302356
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302357 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2358 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2359 tlvStruct->length = sizeof(tANI_U32);
2360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2361
2362 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2363 configDataValue ) != eSIR_SUCCESS)
2364 {
2365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2366 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2367 goto handle_failure;
2368 }
2369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2370 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302371 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2372 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2373 tlvStruct->length = sizeof(tANI_U32);
2374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2375 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2376 configDataValue ) != eSIR_SUCCESS)
2377 {
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2379 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2380 goto handle_failure;
2381 }
2382 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2383 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302384
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302385 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2386 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2387 tlvStruct->length = sizeof(tANI_U32);
2388 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2389
2390 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2391 configDataValue ) != eSIR_SUCCESS)
2392 {
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2394 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2395 goto handle_failure;
2396 }
2397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2398 + sizeof(tHalCfg) + tlvStruct->length) ;
2399
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302400 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2401 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2402 tlvStruct->length = sizeof(tANI_U32);
2403 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2404
2405 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2406 configDataValue ) != eSIR_SUCCESS)
2407 {
2408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2409 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2410 goto handle_failure;
2411 }
2412 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2413 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302414
2415 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2416 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2417 tlvStruct->length = sizeof(tANI_U32);
2418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2419
2420 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2421 configDataValue ) != eSIR_SUCCESS)
2422 {
2423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2424 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2425 goto handle_failure;
2426 }
2427 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2428 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302429 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2430 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2431 tlvStruct->length = sizeof(tANI_U32);
2432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2433
2434 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2435 configDataValue ) != eSIR_SUCCESS)
2436 {
2437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2438 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2439 goto handle_failure;
2440 }
2441 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2442 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302443
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002445#ifdef WLAN_DEBUG
2446 {
2447 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2449 "****** Dumping CFG TLV ***** ");
2450 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2451 {
2452 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2453 "%02x %02x %02x %02x %02x %02x %02x %02x",
2454 tlvStructStart[i],
2455 tlvStructStart[i+1],
2456 tlvStructStart[i+2],
2457 tlvStructStart[i+3],
2458 tlvStructStart[i+4],
2459 tlvStructStart[i+5],
2460 tlvStructStart[i+6],
2461 tlvStructStart[i+7]);
2462 }
2463 /* Dump the bytes in the last line*/
2464 for (; i < wdiStartParams->usConfigBufferLen; i++)
2465 {
2466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2467 "%02x ",tlvStructStart[i]);
2468 }
2469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2470 "**************************** ");
2471 }
2472#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002474handle_failure:
2475 vos_mem_free(configParam);
2476 return VOS_STATUS_E_FAILURE;
2477}
Jeff Johnson295189b2012-06-20 16:38:30 -07002478/*
2479 * FUNCTION: WDA_wdiCompleteCB
2480 * call the voss call back function
2481 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002482void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002483{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002484 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2485 tWDA_CbContext *wdaContext;
2486
2487 if(NULL == pWdaParams)
2488 {
2489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002490 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002491 VOS_ASSERT(0) ;
2492 return ;
2493 }
2494
2495 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2496
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 if (NULL == wdaContext)
2498 {
2499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002500 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 return ;
2502 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002503
Jeff Johnson295189b2012-06-20 16:38:30 -07002504 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002505 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002509 vos_mem_free(pWdaParams);
2510
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 if(WDI_STATUS_SUCCESS != status)
2512 {
2513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2514 "WDI stop callback returned failure" );
2515 VOS_ASSERT(0) ;
2516 }
2517 else
2518 {
2519 wdaContext->wdaState = WDA_STOP_STATE;
2520 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002521
Leo Chang9d76f622013-08-23 16:34:52 -07002522 /* FTM Driver stop procedure should be synced.
2523 * Stop and Close will happen on same context */
2524 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2525 {
2526 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2527 {
2528 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2529 "%s: FTM Stop Event Set Fail", __func__);
2530 VOS_ASSERT(0);
2531 }
2532 }
2533
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002535 vos_WDAComplete_cback(wdaContext->pVosContext);
2536
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 return ;
2538}
Jeff Johnson295189b2012-06-20 16:38:30 -07002539/*
2540 * FUNCTION: WDA_stop
2541 * call WDI_stop
2542 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002543VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2544{
2545 WDI_Status wdiStatus;
2546 VOS_STATUS status = VOS_STATUS_SUCCESS;
2547 WDI_StopReqParamsType *wdiStopReq;
2548 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002549 tWDA_ReqParams *pWdaParams ;
2550
Jeff Johnson295189b2012-06-20 16:38:30 -07002551 if (NULL == pWDA)
2552 {
2553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002554 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 VOS_ASSERT(0);
2556 return VOS_STATUS_E_FAILURE;
2557 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002558 if (pWDA->wdiFailed == true)
2559 {
2560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002561 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002562 return VOS_STATUS_E_ALREADY;
2563 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002564
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 /* FTM mode stay START_STATE */
2566 if( (WDA_READY_STATE != pWDA->wdaState) &&
2567 (WDA_INIT_STATE != pWDA->wdaState) &&
2568 (WDA_START_STATE != pWDA->wdaState) )
2569 {
2570 VOS_ASSERT(0);
2571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 wdiStopReq = (WDI_StopReqParamsType *)
2573 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2574 if(NULL == wdiStopReq)
2575 {
2576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 VOS_ASSERT(0);
2579 return VOS_STATUS_E_NOMEM;
2580 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002581
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 wdiStopReq->wdiStopReason = reason;
2583 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302584
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2586 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_ASSERT(0);
2591 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002592 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002594
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002595 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2596 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 {
2598 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002599 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002601
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002602 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2603 pWdaParams->wdaMsgParam = NULL;
2604 pWdaParams->pWdaContext = pWDA;
2605
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 /* call WDI stop */
2607 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002608 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2609
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2611 {
2612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2613 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2615 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 status = VOS_STATUS_E_FAILURE;
2617 }
Leo Chang9d76f622013-08-23 16:34:52 -07002618
2619 /* FTM Driver stop procedure should be synced.
2620 * Stop and Close will happen on same context */
2621 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2622 {
2623 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2624 WDI_RESPONSE_TIMEOUT);
2625 if (status != VOS_STATUS_SUCCESS)
2626 {
2627 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2628 "%s: FTM Stop Timepoout", __func__);
2629 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002630 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302631 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 return status;
2634}
Jeff Johnson295189b2012-06-20 16:38:30 -07002635/*
2636 * FUNCTION: WDA_close
2637 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302638 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002639VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2640{
Jeff Johnson43971f52012-07-17 12:26:56 -07002641 VOS_STATUS status = VOS_STATUS_SUCCESS;
2642 WDI_Status wstatus;
2643 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 if (NULL == wdaContext)
2646 {
2647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002648 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 return VOS_STATUS_E_FAILURE;
2650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2652 (WDA_STOP_STATE != wdaContext->wdaState))
2653 {
2654 VOS_ASSERT(0);
2655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002657 wstatus = WDI_Close();
2658 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 {
2660 status = VOS_STATUS_E_FAILURE;
2661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002664 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2665 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 {
2667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002668 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 status = VOS_STATUS_E_FAILURE;
2670 }
2671
Jeff Johnson43971f52012-07-17 12:26:56 -07002672 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002673 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 {
2675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002676 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 status = VOS_STATUS_E_FAILURE;
2678 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002679 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002680 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 {
2682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002683 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 status = VOS_STATUS_E_FAILURE;
2685 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002686 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002687 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 {
2689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002690 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 status = VOS_STATUS_E_FAILURE;
2692 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302693
2694 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
2695
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002697 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002698 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002699 {
2700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2701 "error in WDA close " );
2702 status = VOS_STATUS_E_FAILURE;
2703 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302704
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 return status;
2706}
Jeff Johnson295189b2012-06-20 16:38:30 -07002707/*
2708 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2709 * returns 1 if the compiled version is greater than or equal to the input version
2710 */
2711
2712uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2713{
2714 VOS_STATUS status = VOS_STATUS_SUCCESS;
2715 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2716 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2719 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2720 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2721 (compiledVersion.revision >= revision)))
2722 return 1;
2723 else
2724 return 0;
2725}
Jeff Johnson295189b2012-06-20 16:38:30 -07002726/*
2727 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2728 * returns 1 if the compiled version is greater than or equal to the input version
2729 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002730uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2731{
2732 VOS_STATUS status = VOS_STATUS_SUCCESS;
2733 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2734 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2737 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2738 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2739 (reportedVersion.revision >= revision)))
2740 return 1;
2741 else
2742 return 0;
2743}
Jeff Johnson295189b2012-06-20 16:38:30 -07002744/*
2745 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2746 * Returns the version of the WCNSS WLAN API with which the HOST
2747 * device driver was compiled
2748 */
2749VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2750 tSirVersionType *pVersion)
2751{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302752 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 if ((NULL == pvosGCtx) || (NULL == pVersion))
2754 {
2755 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002756 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 VOS_ASSERT(0);
2758 return VOS_STATUS_E_FAILURE;
2759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2761 if (NULL == pWDA )
2762 {
2763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0);
2766 return VOS_STATUS_E_FAILURE;
2767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 *pVersion = pWDA->wcnssWlanCompiledVersion;
2769 return VOS_STATUS_SUCCESS;
2770}
Jeff Johnson295189b2012-06-20 16:38:30 -07002771/*
2772 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2773 * Returns the version of the WCNSS WLAN API with which the WCNSS
2774 * device driver was compiled
2775 */
2776VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2777 tSirVersionType *pVersion)
2778{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302779 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 if ((NULL == pvosGCtx) || (NULL == pVersion))
2781 {
2782 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002783 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 VOS_ASSERT(0);
2785 return VOS_STATUS_E_FAILURE;
2786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002787 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2788 if (NULL == pWDA )
2789 {
2790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002791 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 VOS_ASSERT(0);
2793 return VOS_STATUS_E_FAILURE;
2794 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 *pVersion = pWDA->wcnssWlanReportedVersion;
2796 return VOS_STATUS_SUCCESS;
2797}
Jeff Johnson295189b2012-06-20 16:38:30 -07002798/*
2799 * FUNCTION: WDA_GetWcnssSoftwareVersion
2800 * Returns the WCNSS Software version string
2801 */
2802VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2803 tANI_U8 *pVersion,
2804 tANI_U32 versionBufferSize)
2805{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302806 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002808 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002809 if ((NULL == pvosGCtx) || (NULL == pVersion))
2810 {
2811 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002812 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 VOS_ASSERT(0);
2814 return VOS_STATUS_E_FAILURE;
2815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002816 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2817 if (NULL == pWDA )
2818 {
2819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002820 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 VOS_ASSERT(0);
2822 return VOS_STATUS_E_FAILURE;
2823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002824 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2825 return VOS_STATUS_SUCCESS;
2826}
Jeff Johnson295189b2012-06-20 16:38:30 -07002827/*
2828 * FUNCTION: WDA_GetWcnssHardwareVersion
2829 * Returns the WCNSS Hardware version string
2830 */
2831VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2832 tANI_U8 *pVersion,
2833 tANI_U32 versionBufferSize)
2834{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302835 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002837 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002838 if ((NULL == pvosGCtx) || (NULL == pVersion))
2839 {
2840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002841 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 VOS_ASSERT(0);
2843 return VOS_STATUS_E_FAILURE;
2844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2846 if (NULL == pWDA )
2847 {
2848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002849 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 VOS_ASSERT(0);
2851 return VOS_STATUS_E_FAILURE;
2852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2854 return VOS_STATUS_SUCCESS;
2855}
Jeff Johnson295189b2012-06-20 16:38:30 -07002856/*
2857 * FUNCTION: WDA_WniCfgDnld
2858 * Trigger CFG Download
2859 */
2860VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2861{
2862 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302863 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002864
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 if (NULL == pMac )
2866 {
2867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002868 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002869 VOS_ASSERT(0);
2870 return VOS_STATUS_E_FAILURE;
2871 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302872 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 return vosStatus;
2874}
Jeff Johnson295189b2012-06-20 16:38:30 -07002875/* -----------------------------------------------------------------
2876 * WDI interface
2877 * -----------------------------------------------------------------
2878 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002879/*
2880 * FUNCTION: WDA_suspendDataTxCallback
2881 * call back function called from TL after suspend Transmission
2882 */
2883VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2884 v_U8_t* ucSTAId,
2885 VOS_STATUS vosStatus)
2886{
2887 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002889 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 if (NULL == pWDA )
2891 {
2892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002893 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 VOS_ASSERT(0);
2895 return VOS_STATUS_E_FAILURE;
2896 }
2897 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2898 {
2899 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2900 }
2901 else
2902 {
2903 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 /* Trigger the event to bring the WDA TL suspend function to come
2906 * out of wait*/
2907 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2908 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2909 {
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002911 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 /* If TL suspended had timedout before this callback was called, resume back
2914 * TL.*/
2915 if (pWDA->txSuspendTimedOut)
2916 {
2917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002918 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 WDA_ResumeDataTx(pWDA);
2920 pWDA->txSuspendTimedOut = FALSE;
2921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 return VOS_STATUS_SUCCESS;
2923}
Jeff Johnson295189b2012-06-20 16:38:30 -07002924/*
2925 * FUNCTION: WDA_suspendDataTx
2926 * Update TL to suspend the data Transmission
2927 */
2928VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2929{
2930 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2931 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002934 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 if (pWDA->txSuspendTimedOut)
2937 {
2938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002939 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 return status;
2941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 /* Reset the event to be not signalled */
2943 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2944 if(!VOS_IS_STATUS_SUCCESS(status))
2945 {
2946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002947 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 return VOS_STATUS_E_FAILURE;
2949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002950 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002951 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 WDA_SuspendDataTxCallback);
2953 if(status != VOS_STATUS_SUCCESS)
2954 {
2955 return status;
2956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 /* Wait for the event to be set by the TL, to get the response of
2958 * suspending the TX queues, this event should be set by the Callback
2959 * function called by TL*/
2960 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2961 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2962 if(!VOS_IS_STATUS_SUCCESS(status))
2963 {
2964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2965 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002966 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 /* Set this flag to true when TL suspend times out, so that when TL
2968 * suspend eventually happens and calls the callback, TL can be resumed
2969 * right away by looking at this flag when true.*/
2970 pWDA->txSuspendTimedOut = TRUE;
2971 }
2972 else
2973 {
2974 pWDA->txSuspendTimedOut = FALSE;
2975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2977 {
2978 status = VOS_STATUS_SUCCESS;
2979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 return status;
2981}
Jeff Johnson295189b2012-06-20 16:38:30 -07002982/*
2983 * FUNCTION: WDA_resumeDataTx
2984 * Update TL to resume the data Transmission
2985 */
2986VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2987{
2988 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002991 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002992
2993 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 return status;
2995}
Jeff Johnson295189b2012-06-20 16:38:30 -07002996/*
2997 * FUNCTION: WDA_InitScanReqCallback
2998 * Trigger Init SCAN callback
2999 */
3000void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3001{
3002 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3003 tWDA_CbContext *pWDA;
3004 tInitScanParams *pWDA_ScanParam ;
3005 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 if(NULL == pWdaParams)
3009 {
3010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 VOS_ASSERT(0) ;
3013 return ;
3014 }
3015 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3016 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003017 if(NULL == pWDA_ScanParam)
3018 {
3019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003020 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003021 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3023 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 return ;
3025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 if(WDI_STATUS_SUCCESS != wdiStatus)
3027 {
3028 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 if(VOS_STATUS_SUCCESS != status)
3030 {
3031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003032 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 }
3034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 /* free WDI command buffer */
3036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303038
3039
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003041 /* without converting the Status to Failure or Success Just
3042 pass the same status to lim */
3043 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 /* send SCAN RSP message back to PE */
3045 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 return ;
3047}
3048
3049/*
3050 * FUNCTION: WDA_ProcessInitScanReq
3051 * Trigger Init SCAN in DAL
3052 */
3053VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3054 tInitScanParams *initScanParams)
3055{
3056 WDI_Status status = WDI_STATUS_SUCCESS ;
3057 WDI_InitScanReqParamsType *wdiInitScanParam =
3058 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3059 sizeof(WDI_InitScanReqParamsType)) ;
3060 tWDA_ReqParams *pWdaParams;
3061 tANI_U8 i = 0;
3062
3063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003064 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if(NULL == wdiInitScanParam)
3066 {
3067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003068 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 VOS_ASSERT(0);
3070 return VOS_STATUS_E_NOMEM;
3071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3073 if(NULL == pWdaParams)
3074 {
3075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 VOS_ASSERT(0);
3078 vos_mem_free(wdiInitScanParam);
3079 return VOS_STATUS_E_NOMEM;
3080 }
3081
3082 /* Copy init Scan params to WDI structure */
3083 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3084 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3085 sizeof(tSirMacAddr)) ;
3086 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3087 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3088 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3090 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3092 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3094 {
3095 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3096 initScanParams->scanEntry.bssIdx[i] ;
3097 }
3098
3099 /* if Frame length, copy macMgmtHdr or WDI structure */
3100 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3101 {
3102 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3103 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3104 }
3105 wdiInitScanParam->wdiReqStatusCB = NULL ;
3106
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 /* Store Init Req pointer, as this will be used for response */
3108 pWdaParams->pWdaContext = pWDA;
3109 pWdaParams->wdaMsgParam = initScanParams;
3110 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 /* first try to suspend TX */
3112 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 if(WDI_STATUS_SUCCESS != status)
3114 {
3115 goto handleWdiFailure;
3116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 /* call DAL API to pass init scan request to DAL */
3118 status = WDI_InitScanReq(wdiInitScanParam,
3119 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 if(IS_WDI_STATUS_FAILURE(status))
3121 {
3122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3123 "error in WDA Init Scan, Resume Tx " );
3124 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 VOS_ASSERT(0) ;
3126
3127 goto handleWdiFailure;
3128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130handleWdiFailure:
3131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3132 "Failure in WDI Api, free all the memory " );
3133 /* free WDI command buffer */
3134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3135 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 /* send Failure to PE */
3137 initScanParams->status = eSIR_FAILURE ;
3138 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 return CONVERT_WDI2VOS_STATUS(status) ;
3140}
3141
Jeff Johnson295189b2012-06-20 16:38:30 -07003142/*
3143 * FUNCTION: WDA_StartScanReqCallback
3144 * send Start SCAN RSP back to PE
3145 */
3146void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3147 void* pUserData)
3148{
3149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3150 tWDA_CbContext *pWDA;
3151 tStartScanParams *pWDA_ScanParam;
3152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003153 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 if(NULL == pWdaParams)
3155 {
3156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003157 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 VOS_ASSERT(0) ;
3159 return ;
3160 }
3161 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3162 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 if(NULL == pWDA_ScanParam)
3164 {
3165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003166 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003168 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 return ;
3170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003171 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3172 {
3173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003174 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003176 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 return ;
3178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3180 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003181
Jeff Johnson295189b2012-06-20 16:38:30 -07003182
3183 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003184 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 /* send SCAN RSP message back to PE */
3186 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 return ;
3188}
3189
Jeff Johnson295189b2012-06-20 16:38:30 -07003190/*
3191 * FUNCTION: WDA_ProcessStartScanReq
3192 * Trigger start SCAN in WDI
3193 */
3194VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3195 tStartScanParams *startScanParams)
3196{
3197 WDI_Status status = WDI_STATUS_SUCCESS;
3198 WDI_StartScanReqParamsType *wdiStartScanParams =
3199 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3200 sizeof(WDI_StartScanReqParamsType)) ;
3201 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003203 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 if(NULL == wdiStartScanParams)
3205 {
3206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 VOS_ASSERT(0);
3209 return VOS_STATUS_E_NOMEM;
3210 }
3211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3212 if(NULL == pWdaParams)
3213 {
3214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 VOS_ASSERT(0);
3217 vos_mem_free(wdiStartScanParams);
3218 return VOS_STATUS_E_NOMEM;
3219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 /* Copy init Scan params to WDI structure */
3221 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3222 wdiStartScanParams->wdiReqStatusCB = NULL ;
3223
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 /* Store Init Req pointer, as this will be used for response */
3225 /* store Params pass it to WDI */
3226 pWdaParams->pWdaContext = pWDA;
3227 pWdaParams->wdaMsgParam = startScanParams;
3228 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 /* call DAL API to pass init scan request to DAL */
3230 status = WDI_StartScanReq(wdiStartScanParams,
3231 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 /* failure returned by WDI API */
3233 if(IS_WDI_STATUS_FAILURE(status))
3234 {
3235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3236 "Failure in Start Scan WDI API, free all the memory "
3237 "It should be due to previous abort scan." );
3238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3239 vos_mem_free(pWdaParams) ;
3240 startScanParams->status = eSIR_FAILURE ;
3241 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 return CONVERT_WDI2VOS_STATUS(status) ;
3244}
Jeff Johnson295189b2012-06-20 16:38:30 -07003245/*
3246 * FUNCTION: WDA_EndScanReqCallback
3247 * END SCAN callback
3248 */
3249void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3250{
3251 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3252 tWDA_CbContext *pWDA;
3253 tEndScanParams *endScanParam;
3254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003255 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 if(NULL == pWdaParams)
3257 {
3258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003259 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 VOS_ASSERT(0) ;
3261 return ;
3262 }
3263 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3264 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 if(NULL == endScanParam)
3266 {
3267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003268 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3271 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 return ;
3273 }
3274
3275 /* Free WDI command buffer */
3276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3277 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003279 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003280 /* send response back to PE */
3281 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3282 return ;
3283}
3284
Jeff Johnson295189b2012-06-20 16:38:30 -07003285/*
3286 * FUNCTION: WDA_ProcessEndScanReq
3287 * Trigger END SCAN in WDI
3288 */
3289VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3290 tEndScanParams *endScanParams)
3291{
3292 WDI_Status status = WDI_STATUS_SUCCESS;
3293 WDI_EndScanReqParamsType *wdiEndScanParams =
3294 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3295 sizeof(WDI_EndScanReqParamsType)) ;
3296 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003298 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 if(NULL == wdiEndScanParams)
3300 {
3301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 VOS_ASSERT(0);
3304 return VOS_STATUS_E_NOMEM;
3305 }
3306 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3307 if(NULL == pWdaParams)
3308 {
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 VOS_ASSERT(0);
3312 vos_mem_free(wdiEndScanParams);
3313 return VOS_STATUS_E_NOMEM;
3314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003315 /* Copy init Scan params to WDI structure */
3316 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3317 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 /* Store Init Req pointer, as this will be used for response */
3319 /* store Params pass it to WDI */
3320 pWdaParams->pWdaContext = pWDA;
3321 pWdaParams->wdaMsgParam = endScanParams;
3322 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 /* call DAL API to pass init scan request to DAL */
3324 status = WDI_EndScanReq(wdiEndScanParams,
3325 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 if(IS_WDI_STATUS_FAILURE(status))
3327 {
3328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3329 "Failure in End Scan WDI API, free all the memory "
3330 "It should be due to previous abort scan." );
3331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3332 vos_mem_free(pWdaParams) ;
3333 endScanParams->status = eSIR_FAILURE ;
3334 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 return CONVERT_WDI2VOS_STATUS(status) ;
3337}
Jeff Johnson295189b2012-06-20 16:38:30 -07003338/*
3339 * FUNCTION: WDA_FinishScanReqCallback
3340 * Trigger Finish SCAN callback
3341 */
3342void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3343{
3344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3345 tWDA_CbContext *pWDA;
3346 tFinishScanParams *finishScanParam;
3347 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003349 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 if(NULL == pWdaParams)
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003353 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003354 VOS_ASSERT(0) ;
3355 return ;
3356 }
3357
3358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3359 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 if(NULL == finishScanParam)
3361 {
3362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003363 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3366 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 return ;
3368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3370 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 /*
3372 * Now Resume TX, if we reached here means, TX is already suspended, we
3373 * have to resume it unconditionaly
3374 */
3375 status = WDA_ResumeDataTx(pWDA) ;
3376
3377 if(VOS_STATUS_SUCCESS != status)
3378 {
3379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003380 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003382 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3384 return ;
3385}
Jeff Johnson295189b2012-06-20 16:38:30 -07003386/*
3387 * FUNCTION: WDA_ProcessFinshScanReq
3388 * Trigger Finish SCAN in WDI
3389 */
3390VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3391 tFinishScanParams *finishScanParams)
3392{
3393 WDI_Status status = WDI_STATUS_SUCCESS;
3394 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3395 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3396 sizeof(WDI_FinishScanReqParamsType)) ;
3397 tWDA_ReqParams *pWdaParams ;
3398 tANI_U8 i = 0;
3399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003400 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 if(NULL == wdiFinishScanParams)
3402 {
3403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003405 VOS_ASSERT(0);
3406 return VOS_STATUS_E_NOMEM;
3407 }
3408 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3409 if(NULL == pWdaParams)
3410 {
3411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 VOS_ASSERT(0);
3414 vos_mem_free(wdiFinishScanParams);
3415 return VOS_STATUS_E_NOMEM;
3416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 /* Copy init Scan params to WDI structure */
3418 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3419 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3420 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3422 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3423 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3424 finishScanParams->frameLength ;
3425 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3426 finishScanParams->currentOperChannel ;
3427 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3428 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3429 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3431 {
3432 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3433 finishScanParams->scanEntry.bssIdx[i] ;
3434 }
3435
3436
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 /* if Frame length, copy macMgmtHdr ro WDI structure */
3438 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3439 {
3440 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3441 &finishScanParams->macMgmtHdr,
3442 sizeof(WDI_MacMgmtHdr)) ;
3443 }
3444 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 /* Store Init Req pointer, as this will be used for response */
3446 /* store Params pass it to WDI */
3447 pWdaParams->pWdaContext = pWDA;
3448 pWdaParams->wdaMsgParam = finishScanParams;
3449 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 /* call DAL API to pass init scan request to DAL */
3451 status = WDI_FinishScanReq(wdiFinishScanParams,
3452 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003453
Jeff Johnson295189b2012-06-20 16:38:30 -07003454
3455 /*
3456 * WDI API returns failure..
3457 */
3458 if(IS_WDI_STATUS_FAILURE( status))
3459 {
3460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3461 "Failure in Finish Scan WDI API, free all the memory " );
3462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3463 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 finishScanParams->status = eSIR_FAILURE ;
3465 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 return CONVERT_WDI2VOS_STATUS(status) ;
3468}
Jeff Johnson295189b2012-06-20 16:38:30 -07003469/*---------------------------------------------------------------------
3470 * ASSOC API's
3471 *---------------------------------------------------------------------
3472 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003473/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303474 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 * Trigger Init SCAN callback
3476 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303477void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003478{
3479 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3480 tWDA_CbContext *pWDA;
3481 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003483 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 if(NULL == pWdaParams)
3485 {
3486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003487 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 VOS_ASSERT(0) ;
3489 return ;
3490 }
3491 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3492 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3494 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 /* reset macBSSID */
3496 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 /* reset macSTASelf */
3498 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003499 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 return ;
3502}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303503
3504/*
3505 * FUNCTION: WDA_JoinReqCallback
3506 * Free memory and send SWITCH CHANNEL RSP back to PE.
3507 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3508 */
3509void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3510{
3511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3512 tWDA_CbContext *pWDA;
3513 tSwitchChannelParams *joinReqParam;
3514
3515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3516 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3517
3518 if(NULL == pWdaParams)
3519 {
3520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3521 "%s: pWdaParams received NULL", __func__);
3522 VOS_ASSERT(0);
3523 return;
3524 }
3525
3526 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3527 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3528 joinReqParam->status = wdiStatus;
3529
3530 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3531 {
3532 /* reset macBSSID */
3533 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3534 /* reset macSTASelf */
3535 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3536
3537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3538 vos_mem_free(pWdaParams);
3539 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3540 }
3541
3542 return;
3543}
3544
Jeff Johnson295189b2012-06-20 16:38:30 -07003545/*
3546 * FUNCTION: WDA_ProcessJoinReq
3547 * Trigger Join REQ in WDI
3548 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003549VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3550 tSwitchChannelParams* joinReqParam)
3551{
3552 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 WDI_JoinReqParamsType *wdiJoinReqParam =
3554 (WDI_JoinReqParamsType *)vos_mem_malloc(
3555 sizeof(WDI_JoinReqParamsType)) ;
3556 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003558 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 if(NULL == wdiJoinReqParam)
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);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003564 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 return VOS_STATUS_E_NOMEM;
3566 }
3567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3568 if(NULL == pWdaParams)
3569 {
3570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 VOS_ASSERT(0);
3573 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003574 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 return VOS_STATUS_E_NOMEM;
3576 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003577
3578 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3579 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3580 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3581 {
3582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3583 "%s: received join request when BSSID or self-STA is NULL "
3584 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003585 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003586 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3587 VOS_ASSERT(0);
3588 vos_mem_free(wdiJoinReqParam);
3589 vos_mem_free(pWdaParams);
3590 joinReqParam->status = eSIR_FAILURE ;
3591 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3592 return VOS_STATUS_E_INVAL;
3593 }
3594
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 /* copy the BSSID for pWDA */
3596 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3597 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3599 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3601 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003602#ifdef WLAN_FEATURE_VOWIFI
3603 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3604 joinReqParam->maxTxPower ;
3605#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3607 joinReqParam->localPowerConstraint ;
3608#endif
3609 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3610 joinReqParam->secondaryChannelOffset ;
3611 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3612
Sachin Ahuja935eda782014-07-30 14:57:41 +05303613 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3614 wdiJoinReqParam->pUserData = pWdaParams;
3615
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 /* Store Init Req pointer, as this will be used for response */
3617 /* store Params pass it to WDI */
3618 pWdaParams->pWdaContext = pWDA;
3619 pWdaParams->wdaMsgParam = joinReqParam;
3620 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303622 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 if(IS_WDI_STATUS_FAILURE(status))
3624 {
3625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3626 "Failure in Join WDI API, free all the memory " );
3627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3628 vos_mem_free(pWdaParams) ;
3629 joinReqParam->status = eSIR_FAILURE ;
3630 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 return CONVERT_WDI2VOS_STATUS(status) ;
3633}
Jeff Johnson295189b2012-06-20 16:38:30 -07003634/*
3635 * FUNCTION: WDA_SwitchChannelReqCallback
3636 * send Switch channel RSP back to PE
3637 */
3638void WDA_SwitchChannelReqCallback(
3639 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3640{
3641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3642 tWDA_CbContext *pWDA;
3643 tSwitchChannelParams *pSwitchChanParams;
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 == pWdaParams)
3647 {
3648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003649 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 VOS_ASSERT(0) ;
3651 return ;
3652 }
3653 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3654 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3655
3656#ifdef WLAN_FEATURE_VOWIFI
3657 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3658#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3660 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003662 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003664 return ;
3665}
Jeff Johnson295189b2012-06-20 16:38:30 -07003666/*
3667 * FUNCTION: WDA_ProcessChannelSwitchReq
3668 * Request to WDI to switch channel REQ params.
3669 */
3670VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3671 tSwitchChannelParams *pSwitchChanParams)
3672{
3673 WDI_Status status = WDI_STATUS_SUCCESS ;
3674 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3675 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3676 sizeof(WDI_SwitchChReqParamsType)) ;
3677 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003679 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003680 if(NULL == wdiSwitchChanParam)
3681 {
3682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 VOS_ASSERT(0);
3685 return VOS_STATUS_E_NOMEM;
3686 }
3687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3688 if(NULL == pWdaParams)
3689 {
3690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003692 VOS_ASSERT(0);
3693 vos_mem_free(wdiSwitchChanParam);
3694 return VOS_STATUS_E_NOMEM;
3695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3697#ifndef WLAN_FEATURE_VOWIFI
3698 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3699 pSwitchChanParams->localPowerConstraint;
3700#endif
3701 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3702 pSwitchChanParams->secondaryChannelOffset;
3703 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 /* Store req pointer, as this will be used for response */
3705 /* store Params pass it to WDI */
3706 pWdaParams->pWdaContext = pWDA;
3707 pWdaParams->wdaMsgParam = pSwitchChanParams;
3708 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003709#ifdef WLAN_FEATURE_VOWIFI
3710 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3711 = pSwitchChanParams->maxTxPower;
3712 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3713 pSwitchChanParams ->selfStaMacAddr,
3714 sizeof(tSirMacAddr));
3715#endif
3716 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3717 pSwitchChanParams->bssId,
3718 sizeof(tSirMacAddr));
3719
3720 status = WDI_SwitchChReq(wdiSwitchChanParam,
3721 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 if(IS_WDI_STATUS_FAILURE(status))
3723 {
3724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3725 "Failure in process channel switch Req WDI API, free all the memory " );
3726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3727 vos_mem_free(pWdaParams) ;
3728 pSwitchChanParams->status = eSIR_FAILURE ;
3729 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 return CONVERT_WDI2VOS_STATUS(status) ;
3732}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003733
3734/*
3735 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3736 * send Switch channel RSP back to PE
3737 */
3738void WDA_SwitchChannelReqCallback_V1(
3739 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3740 void* pUserData)
3741{
3742 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3743 tWDA_CbContext *pWDA;
3744 tSwitchChannelParams *pSwitchChanParams;
3745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3746 "<------ %s " ,__func__);
3747
3748 if (NULL == pWdaParams)
3749 {
3750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3751 "%s: pWdaParams received NULL", __func__);
3752 VOS_ASSERT(0);
3753 return ;
3754 }
3755 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3756 pSwitchChanParams =
3757 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3758 pSwitchChanParams->channelSwitchSrc =
3759 wdiSwitchChanRsp->channelSwitchSrc;
3760#ifdef WLAN_FEATURE_VOWIFI
3761 pSwitchChanParams->txMgmtPower =
3762 wdiSwitchChanRsp->ucTxMgmtPower;
3763#endif
3764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3765 vos_mem_free(pWdaParams);
3766 pSwitchChanParams->status =
3767 wdiSwitchChanRsp->wdiStatus ;
3768 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3769 (void *)pSwitchChanParams , 0);
3770 return;
3771}
3772
3773/*
3774 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3775 * Request to WDI to switch channel REQ params.
3776 */
3777VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3778 tSwitchChannelParams *pSwitchChanParams)
3779{
3780 WDI_Status status = WDI_STATUS_SUCCESS ;
3781 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3782 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3783 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3784 tWDA_ReqParams *pWdaParams ;
3785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3786 "------> %s " ,__func__);
3787 if (NULL == wdiSwitchChanParam)
3788 {
3789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3790 "%s: VOS MEM Alloc Failure", __func__);
3791 VOS_ASSERT(0);
3792 return VOS_STATUS_E_NOMEM;
3793 }
3794 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3795 if (NULL == pWdaParams)
3796 {
3797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3798 "%s: VOS MEM Alloc Failure", __func__);
3799 VOS_ASSERT(0);
3800 vos_mem_free(wdiSwitchChanParam);
3801 return VOS_STATUS_E_NOMEM;
3802 }
3803 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3804 pSwitchChanParams->channelSwitchSrc;
3805
3806 wdiSwitchChanParam->wdiChInfo.ucChannel =
3807 pSwitchChanParams->channelNumber;
3808#ifndef WLAN_FEATURE_VOWIFI
3809 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3810 pSwitchChanParams->localPowerConstraint;
3811#endif
3812 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3813 pSwitchChanParams->secondaryChannelOffset;
3814 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3815 /* Store req pointer, as this will be used for response */
3816 /* store Params pass it to WDI */
3817 pWdaParams->pWdaContext = pWDA;
3818 pWdaParams->wdaMsgParam = pSwitchChanParams;
3819 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3820#ifdef WLAN_FEATURE_VOWIFI
3821 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3822 pSwitchChanParams->maxTxPower;
3823 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3824 pSwitchChanParams ->selfStaMacAddr,
3825 sizeof(tSirMacAddr));
3826#endif
3827 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3828 pSwitchChanParams->bssId,
3829 sizeof(tSirMacAddr));
3830
3831 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3832 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3833 pWdaParams);
3834 if (IS_WDI_STATUS_FAILURE(status))
3835 {
3836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3837 "Failure in process channel switch Req WDI "
3838 "API, free all the memory " );
3839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3840 vos_mem_free(pWdaParams) ;
3841 pSwitchChanParams->status = eSIR_FAILURE ;
3842 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3843 (void *)pSwitchChanParams, 0) ;
3844 }
3845 return CONVERT_WDI2VOS_STATUS(status) ;
3846}
3847
Jeff Johnson295189b2012-06-20 16:38:30 -07003848/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303849 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003850 * config BSS Req Callback, called by WDI
3851 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303852void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 ,void* pUserData)
3854{
3855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3856 tWDA_CbContext *pWDA;
3857 tAddBssParams *configBssReqParam;
3858 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003861 if(NULL == pWdaParams)
3862 {
3863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003864 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003865 VOS_ASSERT(0) ;
3866 return ;
3867 }
3868 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3869 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3870 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003872 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3874 {
3875 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3876 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3878 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3879 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3880
3881 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3882 {
3883 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3884 {
3885 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3886 staConfigBssParam->staType = STA_ENTRY_BSSID;
3887 }
3888 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3889 (staConfigBssParam->staType == STA_ENTRY_SELF))
3890 {
3891 /* This is the 1st add BSS Req for the BTAMP STA */
3892 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3893 staConfigBssParam->staType = STA_ENTRY_BSSID;
3894 }
3895 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3896 (staConfigBssParam->staType == STA_ENTRY_PEER))
3897 {
3898 /* This is the 2nd ADD BSS Request that is sent
3899 * on the BTAMP STA side. The Sta type is
3900 * set to STA_ENTRY_PEER here.*/
3901 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3902 }
3903 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3904 (staConfigBssParam->staType == STA_ENTRY_SELF))
3905 {
3906 /* statype is already set by PE.
3907 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3908 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3909 staConfigBssParam->staType = STA_ENTRY_BSSID;
3910 }
3911 else
3912 {
3913 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3914 staConfigBssParam->staType = STA_ENTRY_PEER;
3915 }
3916 }
3917 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3918 {
3919 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3920 staConfigBssParam->staType = STA_ENTRY_SELF;
3921 }
3922 else
3923 {
3924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3925 "Invalid operation mode specified");
3926 VOS_ASSERT(0);
3927 }
3928
3929 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3934 sizeof(tSirMacAddr));
3935 staConfigBssParam->txChannelWidthSet =
3936 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3938 staConfigBssParam->htCapable)
3939 {
3940 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3941 wdiConfigBssRsp->ucBSSIdx;
3942 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3943 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303944 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3945 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3948 wdiConfigBssRsp->ucBSSIdx,
3949 wdiConfigBssRsp->ucSTAIdx))
3950 {
3951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003952 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 VOS_ASSERT(0) ;
3954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003955 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3956 {
3957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003958 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 VOS_ASSERT(0) ;
3960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003961#ifdef WLAN_FEATURE_VOWIFI
3962 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3963#endif
3964 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303965 else
3966 {
3967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3968 "%s: Failure with status %d", __func__,
3969 wdiConfigBssRsp->wdiStatus);
3970 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3971 WLAN_LOG_INDICATOR_HOST_DRIVER,
3972 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3973 FALSE, TRUE);
3974 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303975 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3976 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3978 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 return ;
3981}
Jeff Johnson295189b2012-06-20 16:38:30 -07003982/*
3983 * FUNCTION: WDA_UpdateEdcaParamsForAC
3984 * Update WDI EDCA params with PE edca params
3985 */
3986void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3987 WDI_EdcaParamRecord *wdiEdcaParam,
3988 tSirMacEdcaParamRecord *macEdcaParam)
3989{
3990 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3991 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3992 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3993 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3994 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3995 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3996}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303997void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3998 void* pUserData)
3999{
4000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4001 tWDA_CbContext *pWDA;
4002 tAddBssParams *addBssParams;
4003
4004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4005 "<------ %s, wdiStatus: %d",
4006 __func__, wdiStatus);
4007
4008 if (NULL == pWdaParams)
4009 {
4010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4011 "%s: Invalid pWdaParams pointer", __func__);
4012 VOS_ASSERT(0);
4013 return;
4014 }
4015
4016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4017 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4018
4019 addBssParams->status = wdiStatus;
4020
4021 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4022 {
4023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4024 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304025 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4026 WLAN_LOG_INDICATOR_HOST_DRIVER,
4027 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4028 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304029 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4030 }
4031
4032 return ;
4033}
4034
Jeff Johnson295189b2012-06-20 16:38:30 -07004035/*
4036 * FUNCTION: WDA_ProcessConfigBssReq
4037 * Configure BSS before starting Assoc with AP
4038 */
4039VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4040 tAddBssParams* configBssReqParam)
4041{
4042 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304043 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004044 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004046 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304047 if (NULL == configBssReqParam)
4048 {
4049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4050 "%s: configBssReqParam is NULL", __func__);
4051 return VOS_STATUS_E_INVAL;
4052 }
4053
4054 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4055 sizeof(WDI_ConfigBSSReqParamsType)) ;
4056
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 if(NULL == wdiConfigBssReqParam)
4058 {
4059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 VOS_ASSERT(0);
4062 return VOS_STATUS_E_NOMEM;
4063 }
4064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4065 if(NULL == pWdaParams)
4066 {
4067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 VOS_ASSERT(0);
4070 vos_mem_free(wdiConfigBssReqParam);
4071 return VOS_STATUS_E_NOMEM;
4072 }
Kiran4a17ebe2013-01-31 10:43:43 -08004073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4074 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4077 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304078 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4079 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004080 /* Store Init Req pointer, as this will be used for response */
4081 /* store Params pass it to WDI */
4082 pWdaParams->pWdaContext = pWDA;
4083 pWdaParams->wdaMsgParam = configBssReqParam;
4084 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304086 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 if(IS_WDI_STATUS_FAILURE(status))
4088 {
4089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4090 "Failure in Config BSS WDI API, free all the memory " );
4091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4092 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004096 return CONVERT_WDI2VOS_STATUS(status) ;
4097}
Jeff Johnson295189b2012-06-20 16:38:30 -07004098#ifdef ENABLE_HAL_COMBINED_MESSAGES
4099/*
4100 * FUNCTION: WDA_PostAssocReqCallback
4101 * Post ASSOC req callback, send RSP back to PE
4102 */
4103void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4104 void* pUserData)
4105{
4106 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4107 tPostAssocParams *postAssocReqParam =
4108 (tPostAssocParams *)pWDA->wdaMsgParam ;
4109 /*STA context within the BSS Params*/
4110 tAddStaParams *staPostAssocParam =
4111 &postAssocReqParam->addBssParams.staContext ;
4112 /*STA Params for self STA*/
4113 tAddStaParams *selfStaPostAssocParam =
4114 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004116 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004117 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004118 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4120 {
4121 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4122 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4123 sizeof(tSirMacAddr)) ;
4124 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4125 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4126 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004127 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4128 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304129 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4131 pWDA->wdaWdiApiMsgParam = NULL;
4132 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 return ;
4135}
Jeff Johnson295189b2012-06-20 16:38:30 -07004136/*
4137 * FUNCTION: WDA_ProcessPostAssocReq
4138 * Trigger POST ASSOC processing in WDI
4139 */
4140VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4141 tPostAssocParams *postAssocReqParam)
4142{
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDI_Status status = WDI_STATUS_SUCCESS ;
4144
4145 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4146 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4147 sizeof(WDI_PostAssocReqParamsType)) ;
4148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004149 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004150
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 if(NULL == wdiPostAssocReqParam)
4152 {
4153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 VOS_ASSERT(0);
4156 return VOS_STATUS_E_NOMEM;
4157 }
4158
4159 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4160 {
4161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004162 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 VOS_ASSERT(0);
4164 return VOS_STATUS_E_FAILURE;
4165 }
4166
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 /* update BSS params into WDI structure */
4168 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4169 &postAssocReqParam->addBssParams) ;
4170 /* update STA params into WDI structure */
4171 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4172 &postAssocReqParam->addStaParams) ;
4173
4174 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4175 postAssocReqParam->addBssParams.highPerformance;
4176 WDA_UpdateEdcaParamsForAC(pWDA,
4177 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4178 &postAssocReqParam->addBssParams.acbe);
4179 WDA_UpdateEdcaParamsForAC(pWDA,
4180 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4181 &postAssocReqParam->addBssParams.acbk);
4182 WDA_UpdateEdcaParamsForAC(pWDA,
4183 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4184 &postAssocReqParam->addBssParams.acvi);
4185 WDA_UpdateEdcaParamsForAC(pWDA,
4186 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4187 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 /* Store Init Req pointer, as this will be used for response */
4189 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 /* store Params pass it to WDI */
4191 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004192 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4193 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 if(IS_WDI_STATUS_FAILURE(status))
4195 {
4196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4197 "Failure in Post Assoc WDI API, free all the memory " );
4198 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4199 pWDA->wdaWdiApiMsgParam = NULL;
4200 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 return CONVERT_WDI2VOS_STATUS(status) ;
4205}
4206#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004207/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304208 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 * ADD STA req callback, send RSP back to PE
4210 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304211void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 void* pUserData)
4213{
4214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4215 tWDA_CbContext *pWDA;
4216 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 if(NULL == pWdaParams)
4220 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 VOS_ASSERT(0) ;
4223 return ;
4224 }
4225 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4226 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004228 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004229 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4230 {
4231 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4232 /*TODO: UMAC structure doesn't have these fields*/
4233 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4234 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4235 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4236 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4237 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4238 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004239#ifdef FEATURE_WLAN_TDLS
4240 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4241 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4242#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004244#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 {
4246 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4247 wdiConfigStaRsp->ucBssIdx;
4248 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4249 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304250 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4251 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 }
4253 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4254 {
4255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004256 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 VOS_ASSERT(0) ;
4258 return ;
4259 }
4260 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304261 else
4262 {
4263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4264 "%s: Failure with status %d", __func__,
4265 wdiConfigStaRsp->wdiStatus);
4266 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4267 WLAN_LOG_INDICATOR_HOST_DRIVER,
4268 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4269 FALSE, TRUE);
4270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4272 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 return ;
4275}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304276void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4277 void* pUserData)
4278{
4279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4280 tWDA_CbContext *pWDA;
4281 tAddStaParams *addStaParams;
4282
4283 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4284 "<------ %s, wdiStatus: %d",
4285 __func__, wdiStatus);
4286
4287 if (NULL == pWdaParams)
4288 {
4289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4290 "%s: Invalid pWdaParams pointer", __func__);
4291 VOS_ASSERT(0);
4292 return;
4293 }
4294
4295 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4296 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4297
4298 addStaParams->status = wdiStatus;
4299
4300 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4301 {
4302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4303 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304304 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4305 WLAN_LOG_INDICATOR_HOST_DRIVER,
4306 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4307 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304308 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4309 }
4310
4311 return ;
4312}
4313
Jeff Johnson295189b2012-06-20 16:38:30 -07004314/*
4315 * FUNCTION: WDA_ConfigStaReq
4316 * Trigger Config STA processing in WDI
4317 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304318VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 tAddStaParams *addStaReqParam)
4320{
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4323 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4324 sizeof(WDI_ConfigSTAReqParamsType)) ;
4325 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004327 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 if(NULL == wdiConfigStaReqParam)
4329 {
4330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 VOS_ASSERT(0);
4333 return VOS_STATUS_E_NOMEM;
4334 }
4335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4336 if(NULL == pWdaParams)
4337 {
4338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 VOS_ASSERT(0);
4341 vos_mem_free(wdiConfigStaReqParam);
4342 return VOS_STATUS_E_NOMEM;
4343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 /* update STA params into WDI structure */
4346 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4347 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304348 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4349 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 /* Store Init Req pointer, as this will be used for response */
4351 /* store Params pass it to WDI */
4352 pWdaParams->pWdaContext = pWDA;
4353 pWdaParams->wdaMsgParam = addStaReqParam;
4354 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304355
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304357 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 if(IS_WDI_STATUS_FAILURE(status))
4359 {
4360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4361 "Failure in Config STA WDI API, free all the memory " );
4362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4363 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 return CONVERT_WDI2VOS_STATUS(status) ;
4368}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304369
Jeff Johnson295189b2012-06-20 16:38:30 -07004370/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304371 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304373 */
4374void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 void* pUserData)
4376{
4377 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4378 tWDA_CbContext *pWDA;
4379 tDeleteBssParams *delBssReqParam;
4380 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004382 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 if(NULL == pWdaParams)
4384 {
4385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 VOS_ASSERT(0) ;
4388 return ;
4389 }
4390 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4391 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004392 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4394 {
4395 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4396 sizeof(tSirMacAddr)) ;
4397 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304398 else
4399 {
4400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4401 "%s: Failure with status %d", __func__,
4402 wdiDelBssRsp->wdiStatus);
4403 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4404 WLAN_LOG_INDICATOR_HOST_DRIVER,
4405 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4406 FALSE, TRUE);
4407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4409 {
4410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004411 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 VOS_ASSERT(0) ;
4413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4415 {
4416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004417 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004418 VOS_ASSERT(0) ;
4419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4421 {
4422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004423 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 VOS_ASSERT(0) ;
4425 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304426
4427 WLANTL_StartForwarding(staIdx,0,0);
4428
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4430 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 /* reset the the system role*/
4432 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4433
4434 /* Reset the BA related information */
4435 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4436 {
4437 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4438 {
4439 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4440 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304441 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 /* Reset framesTxed counters here */
4443 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4444 {
4445 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4446 }
4447 }
4448 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304449
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 return ;
4452}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304453void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4454 void* pUserData)
4455{
4456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4457 tWDA_CbContext *pWDA;
4458 tDeleteBssParams *delbssParams;
4459
4460 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4461 "<------ %s, wdiStatus: %d",
4462 __func__, wdiStatus);
4463
4464 if (NULL == pWdaParams)
4465 {
4466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4467 "%s: Invalid pWdaParams pointer", __func__);
4468 VOS_ASSERT(0);
4469 return;
4470 }
4471
4472 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4473 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4474
4475 delbssParams->status = wdiStatus ;
4476
4477 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4478 {
4479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4480 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304481 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4482 WLAN_LOG_INDICATOR_HOST_DRIVER,
4483 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4484 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304485 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4486 }
4487
4488 return ;
4489}
Jeff Johnson295189b2012-06-20 16:38:30 -07004490
Jeff Johnson295189b2012-06-20 16:38:30 -07004491/*
4492 * FUNCTION: WDA_ProcessDelBssReq
4493 * Init DEL BSS req with WDI
4494 */
4495VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4496 tDeleteBssParams *delBssParam)
4497{
4498 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4500 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4501 sizeof(WDI_DelBSSReqParamsType)) ;
4502 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 if(NULL == wdiDelBssReqParam)
4506 {
4507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 VOS_ASSERT(0);
4510 return VOS_STATUS_E_NOMEM;
4511 }
4512 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4513 if(NULL == pWdaParams)
4514 {
4515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 VOS_ASSERT(0);
4518 vos_mem_free(wdiDelBssReqParam);
4519 return VOS_STATUS_E_NOMEM;
4520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304522 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4523 wdiDelBssReqParam->pUserData = pWdaParams;
4524
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 /* Store Init Req pointer, as this will be used for response */
4526 /* store Params pass it to WDI */
4527 pWdaParams->pWdaContext = pWDA;
4528 pWdaParams->wdaMsgParam = delBssParam;
4529 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304530
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304532 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 if(IS_WDI_STATUS_FAILURE(status))
4534 {
4535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4536 "Failure in Del BSS WDI API, free all the memory " );
4537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4538 vos_mem_free(pWdaParams) ;
4539 delBssParam->status = eSIR_FAILURE ;
4540 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 return CONVERT_WDI2VOS_STATUS(status) ;
4543}
Jeff Johnson295189b2012-06-20 16:38:30 -07004544/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304545 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304547 */
4548void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 void* pUserData)
4550{
4551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4552 tWDA_CbContext *pWDA;
4553 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004555 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 if(NULL == pWdaParams)
4557 {
4558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004559 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304560 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 return ;
4562 }
4563 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4564 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004565 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4567 {
4568 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4569 {
4570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004571 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 VOS_ASSERT(0) ;
4573 }
4574 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304575 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304577 else
4578 {
4579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4580 "%s: Failure with status %d", __func__,
4581 wdiDelStaRsp->wdiStatus);
4582 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4583 WLAN_LOG_INDICATOR_HOST_DRIVER,
4584 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4585 FALSE, TRUE);
4586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4588 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 /*Reset the BA information corresponding to this STAIdx */
4590 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4591 WDA_INVALID_STA_INDEX;
4592 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304593 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 return ;
4596}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304597void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4598 void* pUserData)
4599{
4600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4601 tWDA_CbContext *pWDA;
4602 tDeleteStaParams *delStaParams;
4603
4604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4605 "<------ %s, wdiStatus: %d",
4606 __func__, wdiStatus);
4607
4608 if (NULL == pWdaParams)
4609 {
4610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4611 "%s: Invalid pWdaParams pointer", __func__);
4612 VOS_ASSERT(0);
4613 return;
4614 }
4615
4616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4617 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4618
4619 delStaParams->status = wdiStatus ;
4620
4621 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4622 {
4623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4624 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304625 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4626 WLAN_LOG_INDICATOR_HOST_DRIVER,
4627 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4628 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304629 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4630 }
4631
4632 return ;
4633}
4634
Jeff Johnson295189b2012-06-20 16:38:30 -07004635/*
4636 * FUNCTION: WDA_ProcessDelStaReq
4637 * Init DEL STA req with WDI
4638 */
4639VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4640 tDeleteStaParams *delStaParam)
4641{
4642 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004643 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4644 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4645 sizeof(WDI_DelSTAReqParamsType)) ;
4646 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004648 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 if(NULL == wdiDelStaReqParam)
4650 {
4651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004653 VOS_ASSERT(0);
4654 return VOS_STATUS_E_NOMEM;
4655 }
4656 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4657 if(NULL == pWdaParams)
4658 {
4659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004660 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 VOS_ASSERT(0);
4662 vos_mem_free(wdiDelStaReqParam);
4663 return VOS_STATUS_E_NOMEM;
4664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304666 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4667 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 /* Store Init Req pointer, as this will be used for response */
4669 /* store Params pass it to WDI */
4670 pWdaParams->pWdaContext = pWDA;
4671 pWdaParams->wdaMsgParam = delStaParam;
4672 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304673
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304675 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 if(IS_WDI_STATUS_FAILURE(status))
4677 {
4678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4679 "Failure in Del STA WDI API, free all the memory status = %d",
4680 status );
4681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4682 vos_mem_free(pWdaParams) ;
4683 delStaParam->status = eSIR_FAILURE ;
4684 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 return CONVERT_WDI2VOS_STATUS(status) ;
4687}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304688void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004689{
4690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4691 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304692 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 if(NULL == pWdaParams)
4696 {
4697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004698 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 VOS_ASSERT(0) ;
4700 return ;
4701 }
4702 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4703 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4705 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4707 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4708 pwdiAddSTASelfRsp->macSelfSta,
4709 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304710 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4711 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4712 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4713 {
4714 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4715 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4717 "%s: Failure with status %d failcnter %d", __func__,
4718 pwdiAddSTASelfRsp->wdiStatus,
4719 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4720 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4721 WLAN_LOG_INDICATOR_HOST_DRIVER,
4722 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4723 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304724 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 return ;
4727}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304728void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4729 void* pUserData)
4730{
4731 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4732 tWDA_CbContext *pWDA;
4733 tAddStaSelfParams *addStaSelfParams;
4734
4735 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4736 "<------ %s, wdiStatus: %d",
4737 __func__, wdiStatus);
4738
4739 if (NULL == pWdaParams)
4740 {
4741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4742 "%s: Invalid pWdaParams pointer", __func__);
4743 VOS_ASSERT(0);
4744 return;
4745 }
4746
4747 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4748 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4749
4750 addStaSelfParams->status = wdiStatus ;
4751
4752 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4753 {
4754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4755 vos_mem_free(pWdaParams) ;
4756 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4757 = WDA_ADDSTA_REQ_WDI_FAIL;
4758 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4760 "%s: Failure with status %d failcnter %d", __func__,
4761 wdiStatus,
4762 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4763 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4764 WLAN_LOG_INDICATOR_HOST_DRIVER,
4765 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4766 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304767 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4768 }
4769
4770 return ;
4771}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304772
Jeff Johnson295189b2012-06-20 16:38:30 -07004773/*
4774 * FUNCTION: WDA_ProcessAddStaSelfReq
4775 *
4776 */
4777VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4778{
4779 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004780 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004781 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4782 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4783 sizeof(WDI_AddSTASelfReqParamsType)) ;
4784 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004786 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304787 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004788 if( NULL == wdiAddStaSelfReq )
4789 {
4790 VOS_ASSERT( 0 );
4791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004792 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304793 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4794 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 return( VOS_STATUS_E_NOMEM );
4796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 if( NULL == pWdaParams )
4799 {
4800 VOS_ASSERT( 0 );
4801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004802 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304803 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4804 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 vos_mem_free(wdiAddStaSelfReq) ;
4806 return( VOS_STATUS_E_NOMEM );
4807 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304808 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4809 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004811 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 /* Store Init Req pointer, as this will be used for response */
4813 /* store Params pass it to WDI */
4814 pWdaParams->pWdaContext = pWDA;
4815 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304816 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4817
4818 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4819 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820
Jeff Johnson43971f52012-07-17 12:26:56 -07004821 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 {
4823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4824 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004825 wstatus );
4826 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4828 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304829 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4830 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 pAddStaSelfReq->status = eSIR_FAILURE ;
4832 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4833 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004834 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004835}
Jeff Johnson295189b2012-06-20 16:38:30 -07004836/*
4837 * FUNCTION: WDA_DelSTASelfRespCallback
4838 *
4839 */
4840void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4841 wdiDelStaSelfRspParams , void* pUserData)
4842{
4843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4844 tWDA_CbContext *pWDA;
4845 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004847 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 if (NULL == pWdaParams)
4849 {
4850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004851 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 VOS_ASSERT(0);
4853 return;
4854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4856 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004858 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004859
4860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4861 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304862 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304863 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4865 "%s: Failure with status %d", __func__,
4866 wdiDelStaSelfRspParams->wdiStatus);
4867 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4868 WLAN_LOG_INDICATOR_HOST_DRIVER,
4869 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4870 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 return ;
4874}
Jeff Johnson295189b2012-06-20 16:38:30 -07004875/*
4876 * FUNCTION: WDA_DelSTASelfReqCallback
4877 *
4878 */
4879void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4880 void* pUserData)
4881{
4882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4883 tWDA_CbContext *pWDA;
4884 tDelStaSelfParams *delStaSelfParams;
4885
4886 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304887 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004888 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004889
4890 if (NULL == pWdaParams)
4891 {
4892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004893 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 VOS_ASSERT(0);
4895 return;
4896 }
4897
4898 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4899 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4900
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004901 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004902
4903 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4904 {
4905 VOS_ASSERT(0);
4906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4907 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304908 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4909 WLAN_LOG_INDICATOR_HOST_DRIVER,
4910 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4911 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4913 }
4914
4915 return ;
4916}
4917
4918/*
4919 * FUNCTION: WDA_DelSTASelfReq
4920 * Trigger Config STA processing in WDI
4921 */
4922VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4923 tDelStaSelfParams* pDelStaSelfReqParam)
4924{
4925 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004926 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 tWDA_ReqParams *pWdaParams = NULL;
4928 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4929 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4930 sizeof(WDI_DelSTASelfReqParamsType)) ;
4931
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004933 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 if( NULL == wdiDelStaSelfReq )
4935 {
4936 VOS_ASSERT( 0 );
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 return( VOS_STATUS_E_NOMEM );
4940 }
4941
4942 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4943 if( NULL == pWdaParams )
4944 {
4945 VOS_ASSERT( 0 );
4946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004947 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 vos_mem_free(wdiDelStaSelfReq) ;
4949 return( VOS_STATUS_E_NOMEM );
4950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 pWdaParams->pWdaContext = pWDA;
4952 /* Store param pointer as passed in by caller */
4953 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4954 /* store Params pass it to WDI */
4955 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4957 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4958
4959 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4960 wdiDelStaSelfReq->pUserData = pWdaParams;
4961
Jeff Johnson43971f52012-07-17 12:26:56 -07004962 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4964
Jeff Johnson43971f52012-07-17 12:26:56 -07004965 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 {
4967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4968 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4969 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004970 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4972 vos_mem_free(pWdaParams) ;
4973 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4974 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4975 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004976 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004977}
4978
Jeff Johnson295189b2012-06-20 16:38:30 -07004979/*
4980 * FUNCTION: WDA_SendMsg
4981 * Send Message back to PE
4982 */
4983void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4984 void *pBodyptr, tANI_U32 bodyVal)
4985{
4986 tSirMsgQ msg = {0} ;
4987 tANI_U32 status = VOS_STATUS_SUCCESS ;
4988 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 msg.type = msgType;
4990 msg.bodyval = bodyVal;
4991 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004993 if (VOS_STATUS_SUCCESS != status)
4994 {
4995 if(NULL != pBodyptr)
4996 {
4997 vos_mem_free(pBodyptr);
4998 }
4999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005000 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 VOS_ASSERT(0) ;
5002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 return ;
5004}
Jeff Johnson295189b2012-06-20 16:38:30 -07005005/*
5006 * FUNCTION: WDA_UpdateBSSParams
5007 * Translated WDA/PE BSS info into WDI BSS info..
5008 */
5009void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5010 WDI_ConfigBSSReqInfoType *wdiBssParams,
5011 tAddBssParams *wdaBssParams)
5012{
5013 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305014 v_U8_t i = 0;
5015
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 /* copy bssReq Params to WDI structure */
5017 vos_mem_copy(wdiBssParams->macBSSID,
5018 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5019 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5020 sizeof(tSirMacAddr)) ;
5021 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5022 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5023 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005024 wdiBssParams->ucShortSlotTimeSupported =
5025 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5027 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5028 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5029 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5030 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5031
5032 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5033 wdiBssParams->ucTXOPProtectionFullSupport =
5034 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5036 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005038 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5039 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5040 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5041 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5042
Chet Lanctot186b5732013-03-18 10:26:30 -07005043 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5044
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 /* copy SSID into WDI structure */
5046 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5047 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5048 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005049 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5050 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005052#ifdef WLAN_FEATURE_VOWIFI
5053 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5054#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005055 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005056 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005057#ifdef WLAN_FEATURE_VOWIFI_11R
5058 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 if(wdiBssParams->bExtSetStaKeyParamValid)
5060 {
5061 /* copy set STA key params to WDI structure */
5062 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5063 wdaBssParams->extSetStaKeyParam.staIdx;
5064 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5065 wdaBssParams->extSetStaKeyParam.encType;
5066 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5067 wdaBssParams->extSetStaKeyParam.wepType;
5068 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5069 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5071 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005072 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5074 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5075 {
5076 WDA_GetWepKeysFromCfg( pWDA,
5077 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5078 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5079 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5080 }
5081 else
5082 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5084 keyIndex++)
5085 {
5086 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5087 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5088 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5089 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5090 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5091 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305092
5093 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5094 {
5095 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5096 {
5097 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5098 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5099 }
5100
5101 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5102 {
5103 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5104 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5105 }
5106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5107 FL("%s: Negated Keys"), __func__);
5108 }
5109 else
5110 {
5111 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5112 FL("%s: No change in Keys "), __func__);
5113 vos_mem_copy(
5114 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5115 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5116 WLAN_MAX_KEY_RSC_LEN);
5117 vos_mem_copy(
5118 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5119 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5120 SIR_MAC_MAX_KEY_LENGTH);
5121 }
5122
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5124 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5125 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5126 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305128 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 }
5131 }
5132 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5133 }
5134 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5135 {
5136 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5137 sizeof(wdaBssParams->extSetStaKeyParam) );
5138 }
5139#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005140#ifdef WLAN_FEATURE_11AC
5141 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5142 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5143#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005144
5145 return ;
5146}
Jeff Johnson295189b2012-06-20 16:38:30 -07005147/*
5148 * FUNCTION: WDA_UpdateSTAParams
5149 * Translated WDA/PE BSS info into WDI BSS info..
5150 */
5151void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5152 WDI_ConfigStaReqInfoType *wdiStaParams,
5153 tAddStaParams *wdaStaParams)
5154{
5155 tANI_U8 i = 0;
5156 /* Update STA params */
5157 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5158 sizeof(tSirMacAddr)) ;
5159 wdiStaParams->usAssocId = wdaStaParams->assocId;
5160 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005161 wdiStaParams->staIdx = wdaStaParams->staIdx;
5162
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 wdiStaParams->ucShortPreambleSupported =
5164 wdaStaParams->shortPreambleSupported;
5165 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5166 sizeof(tSirMacAddr)) ;
5167 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5168
5169 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5170
5171 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5172 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5173 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5174 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5175 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5176 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5177 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5178
5179 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5180 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 wdiStaParams->wdiSupportedRates.opRateMode =
5182 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5184 {
5185 wdiStaParams->wdiSupportedRates.llbRates[i] =
5186 wdaStaParams->supportedRates.llbRates[i];
5187 }
5188 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5189 {
5190 wdiStaParams->wdiSupportedRates.llaRates[i] =
5191 wdaStaParams->supportedRates.llaRates[i];
5192 }
5193 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5194 {
5195 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5196 wdaStaParams->supportedRates.aniLegacyRates[i];
5197 }
5198 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5199 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005200#ifdef WLAN_FEATURE_11AC
5201 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5202 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5203 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5204 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5205#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5207 {
5208 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5209 wdaStaParams->supportedRates.supportedMCSSet[i];
5210 }
5211 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5212 wdaStaParams->supportedRates.rxHighestDataRate;
5213
5214 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5215
5216 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5217
5218 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5219 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5220 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5221
5222 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5223 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5224 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5225 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005227#ifdef WLAN_FEATURE_11AC
5228 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5229 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005230 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305231 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5232 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5233 * must be set by default */
5234 if ( wdiStaParams->vhtTxMUBformeeCapable )
5235 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005236#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005237 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5238 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 return ;
5240}
Jeff Johnson295189b2012-06-20 16:38:30 -07005241/*
5242 * -------------------------------------------------------------------------
5243 * CFG update to WDI
5244 * -------------------------------------------------------------------------
5245 */
5246
5247 /*
5248 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5249 * Convert the WNI CFG ID to HAL CFG ID
5250 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005251static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005252{
5253 switch(wniCfgId)
5254 {
5255 case WNI_CFG_STA_ID:
5256 return QWLAN_HAL_CFG_STA_ID;
5257 case WNI_CFG_CURRENT_TX_ANTENNA:
5258 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5259 case WNI_CFG_CURRENT_RX_ANTENNA:
5260 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5261 case WNI_CFG_LOW_GAIN_OVERRIDE:
5262 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5263 case WNI_CFG_POWER_STATE_PER_CHAIN:
5264 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5265 case WNI_CFG_CAL_PERIOD:
5266 return QWLAN_HAL_CFG_CAL_PERIOD;
5267 case WNI_CFG_CAL_CONTROL:
5268 return QWLAN_HAL_CFG_CAL_CONTROL;
5269 case WNI_CFG_PROXIMITY:
5270 return QWLAN_HAL_CFG_PROXIMITY;
5271 case WNI_CFG_NETWORK_DENSITY:
5272 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5273 case WNI_CFG_MAX_MEDIUM_TIME:
5274 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5275 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5276 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5277 case WNI_CFG_RTS_THRESHOLD:
5278 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5279 case WNI_CFG_SHORT_RETRY_LIMIT:
5280 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5281 case WNI_CFG_LONG_RETRY_LIMIT:
5282 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5283 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5284 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5285 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5286 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5287 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5288 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5289 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5290 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5291 case WNI_CFG_FIXED_RATE:
5292 return QWLAN_HAL_CFG_FIXED_RATE;
5293 case WNI_CFG_RETRYRATE_POLICY:
5294 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5295 case WNI_CFG_RETRYRATE_SECONDARY:
5296 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5297 case WNI_CFG_RETRYRATE_TERTIARY:
5298 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5299 case WNI_CFG_FORCE_POLICY_PROTECTION:
5300 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5301 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5302 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5303 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5304 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5305 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5306 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5307 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5308 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5309 case WNI_CFG_MAX_BA_SESSIONS:
5310 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5311 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5312 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5313 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5314 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5315 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5316 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5317 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5318 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5319 case WNI_CFG_STATS_PERIOD:
5320 return QWLAN_HAL_CFG_STATS_PERIOD;
5321 case WNI_CFG_CFP_MAX_DURATION:
5322 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5323#if 0 /*This is not part of CFG*/
5324 case WNI_CFG_FRAME_TRANS_ENABLED:
5325 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5326#endif
5327 case WNI_CFG_DTIM_PERIOD:
5328 return QWLAN_HAL_CFG_DTIM_PERIOD;
5329 case WNI_CFG_EDCA_WME_ACBK:
5330 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5331 case WNI_CFG_EDCA_WME_ACBE:
5332 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5333 case WNI_CFG_EDCA_WME_ACVI:
5334 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5335 case WNI_CFG_EDCA_WME_ACVO:
5336 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5337#if 0
5338 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5339 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5340 case WNI_CFG_TELE_BCN_TRANS_LI:
5341 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5342 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5343 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5344 case WNI_CFG_TELE_BCN_MAX_LI:
5345 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5346 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5347 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5348#endif
5349 case WNI_CFG_ENABLE_CLOSE_LOOP:
5350 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005351 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5352 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305353 case WNI_CFG_ENABLE_CONC_BMISS:
5354 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5355 case WNI_CFG_ENABLE_UNITS_BWAIT:
5356 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305357 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5358 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 default:
5360 {
5361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005362 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 wniCfgId);
5364 return VOS_STATUS_E_INVAL;
5365 }
5366 }
5367}
Jeff Johnson295189b2012-06-20 16:38:30 -07005368/*
5369 * FUNCTION: WDA_UpdateCfgCallback
5370 *
5371 */
5372void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5373{
5374 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5375 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5376 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 /*
5380 * currently there is no response message is expected between PE and
5381 * WDA, Failure return from WDI is a ASSERT condition
5382 */
5383 if(WDI_STATUS_SUCCESS != wdiStatus)
5384 {
5385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005386 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5388 }
5389
5390 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5391 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5392 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 return ;
5394}
Jeff Johnson295189b2012-06-20 16:38:30 -07005395/*
5396 * FUNCTION: WDA_UpdateCfg
5397 *
5398 */
5399VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5400{
5401
5402 WDI_Status status = WDI_STATUS_SUCCESS ;
5403 tANI_U32 val =0;
5404 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5405 tHalCfg *configData;
5406 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5407 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005409 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 if (NULL == pMac )
5411 {
5412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005413 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 return VOS_STATUS_E_FAILURE;
5415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 if(WDA_START_STATE != pWDA->wdaState)
5417 {
5418 return VOS_STATUS_E_FAILURE;
5419 }
5420
5421 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5422 {
5423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005424 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 VOS_ASSERT(0);
5426 return VOS_STATUS_E_FAILURE;
5427 }
5428
5429 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5430 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 if(NULL == wdiCfgReqParam)
5432 {
5433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 VOS_ASSERT(0);
5436 return VOS_STATUS_E_NOMEM;
5437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005438 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5439 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 if(NULL == wdiCfgReqParam->pConfigBuffer)
5441 {
5442 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 vos_mem_free(wdiCfgReqParam);
5445 VOS_ASSERT(0);
5446 return VOS_STATUS_E_NOMEM;
5447 }
5448
5449 /*convert the WNI CFG Id to HAL CFG Id*/
5450 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5451 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5452
5453 /*TODO: revisit this for handling string parameters */
5454 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5455 &val) != eSIR_SUCCESS)
5456 {
5457 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005458 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5460 vos_mem_free(wdiCfgReqParam);
5461 return eSIR_FAILURE;
5462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5464 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5465 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5466 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5467 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5468
5469 /* store Params pass it to WDI */
5470 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005471#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5472 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5473 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 if(IS_WDI_STATUS_FAILURE(status))
5475 {
5476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5477 "Failure in Update CFG WDI API, free all the memory " );
5478 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5479 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5480 pWDA->wdaWdiCfgApiMsgParam = NULL;
5481 /* Failure is not expected */
5482 VOS_ASSERT(0) ;
5483 }
5484#else
5485 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5486 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5487 pWDA->wdaWdiCfgApiMsgParam = NULL;
5488#endif
5489 return CONVERT_WDI2VOS_STATUS(status) ;
5490}
5491
Jeff Johnson295189b2012-06-20 16:38:30 -07005492VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5493 v_U8_t *pDefaultKeyId,
5494 v_U8_t *pNumKeys,
5495 WDI_KeysType *pWdiKeys )
5496{
5497 v_U32_t i, j, defKeyId = 0;
5498 v_U32_t val = SIR_MAC_KEY_LENGTH;
5499 VOS_STATUS status = WDI_STATUS_SUCCESS;
5500 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 if (NULL == pMac )
5502 {
5503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005504 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 return VOS_STATUS_E_FAILURE;
5506 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5508 &defKeyId ))
5509 {
5510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5511 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5512 }
5513
5514 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 /* Need to extract ALL of the configured WEP Keys */
5516 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5517 {
5518 val = SIR_MAC_KEY_LENGTH;
5519 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5520 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5521 pWdiKeys[j].key,
5522 &val ))
5523 {
5524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005525 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 }
5527 else
5528 {
5529 pWdiKeys[j].keyId = (tANI_U8) i;
5530 /*
5531 * Actually, a DC (Don't Care) because
5532 * this is determined (and set) by PE/MLME
5533 */
5534 pWdiKeys[j].unicast = 0;
5535 /*
5536 * Another DC (Don't Care)
5537 */
5538 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5539 /* Another DC (Don't Care). Unused for WEP */
5540 pWdiKeys[j].paeRole = 0;
5541 /* Determined from wlan_cfgGetStr() above.*/
5542 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 j++;
5544 *pNumKeys = (tANI_U8) j;
5545 }
5546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 return status;
5548}
Jeff Johnson295189b2012-06-20 16:38:30 -07005549/*
5550 * FUNCTION: WDA_SetBssKeyReqCallback
5551 * send SET BSS key RSP back to PE
5552 */
5553void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5554{
5555 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5556 tWDA_CbContext *pWDA;
5557 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005559 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 if(NULL == pWdaParams)
5561 {
5562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005563 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 VOS_ASSERT(0) ;
5565 return ;
5566 }
5567 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5568 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305569 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5570 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5572 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005573 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 return ;
5576}
Jeff Johnson295189b2012-06-20 16:38:30 -07005577/*
5578 * FUNCTION: WDA_ProcessSetBssKeyReq
5579 * Request to WDI for programming the BSS key( key for
5580 * broadcast/multicast frames Encryption)
5581 */
5582VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5583 tSetBssKeyParams *setBssKeyParams )
5584{
5585 WDI_Status status = WDI_STATUS_SUCCESS ;
5586 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5587 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5588 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5589 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005592 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 if(NULL == wdiSetBssKeyParam)
5594 {
5595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 VOS_ASSERT(0);
5598 return VOS_STATUS_E_NOMEM;
5599 }
5600 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5601 if(NULL == pWdaParams)
5602 {
5603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 VOS_ASSERT(0);
5606 vos_mem_free(wdiSetBssKeyParam);
5607 return VOS_STATUS_E_NOMEM;
5608 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 /* copy set BSS params to WDI structure */
5611 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5612 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5613 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 if(setBssKeyParams->encType != eSIR_ED_NONE)
5615 {
5616 if( setBssKeyParams->numKeys == 0 &&
5617 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5618 setBssKeyParams->encType == eSIR_ED_WEP104))
5619 {
5620 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5622 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5623 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5624 }
5625 else
5626 {
5627 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5628 {
5629 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5630 setBssKeyParams->key[keyIndex].keyId;
5631 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5632 setBssKeyParams->key[keyIndex].unicast;
5633 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5634 setBssKeyParams->key[keyIndex].keyDirection;
5635 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5636 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5637 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5638 setBssKeyParams->key[keyIndex].paeRole;
5639 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5640 setBssKeyParams->key[keyIndex].keyLength;
5641 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5642 setBssKeyParams->key[keyIndex].key,
5643 SIR_MAC_MAX_KEY_LENGTH);
5644 }
5645 }
5646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5648 setBssKeyParams->singleTidRc;
5649 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 /* Store set key pointer, as this will be used for response */
5651 /* store Params pass it to WDI */
5652 pWdaParams->pWdaContext = pWDA;
5653 pWdaParams->wdaMsgParam = setBssKeyParams;
5654 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5656 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5657
5658 if(IS_WDI_STATUS_FAILURE(status))
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5661 "Failure in Set BSS Key Req WDI API, free all the memory " );
5662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5663 vos_mem_free(pWdaParams) ;
5664 setBssKeyParams->status = eSIR_FAILURE ;
5665 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 return CONVERT_WDI2VOS_STATUS(status) ;
5668}
Jeff Johnson295189b2012-06-20 16:38:30 -07005669/*
5670 * FUNCTION: WDA_RemoveBssKeyReqCallback
5671 * send SET BSS key RSP back to PE
5672 */
5673void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5674{
5675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5676 tWDA_CbContext *pWDA;
5677 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005679 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 if(NULL == pWdaParams)
5681 {
5682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005683 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 VOS_ASSERT(0) ;
5685 return ;
5686 }
5687 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5688 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5690 vos_mem_free(pWdaParams) ;
5691
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005692 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005694 return ;
5695}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305696
5697/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305698 * FUNCTION: WDA_GetFrameLogRspCallback
5699 * recieves get frame log response from FW
5700 */
5701void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5702 void* pUserData)
5703{
5704 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5705 tWDA_CbContext *pWDA = NULL;
5706 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5707
5708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5709 "<------ Entering: %s " ,__func__);
5710 if(NULL == pWdaParams)
5711 {
5712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5713 "%s: pWdaParams received NULL", __func__);
5714 VOS_ASSERT(0) ;
5715 return ;
5716 }
5717
5718 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5719 if (NULL == pWDA)
5720 {
5721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5722 "%s:pWDA is NULL", __func__);
5723 VOS_ASSERT(0);
5724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5725 vos_mem_free(pWdaParams);
5726 return ;
5727 }
5728
5729 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5730 if(NULL == pGetFrameLogReqParams)
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5733 "%s: pGetFrameLogReqParams received NULL", __func__);
5734 VOS_ASSERT(0);
5735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5736 vos_mem_free(pWdaParams);
5737 return;
5738 }
5739
Siddharth Bhal64246172015-02-27 01:04:37 +05305740 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305742 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5743 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305744 }
5745
5746 /* free WDI command buffer only */
5747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5748 vos_mem_free(pWdaParams->wdaMsgParam);
5749 vos_mem_free(pWdaParams);
5750
5751 return ;
5752
5753}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305754
5755/*
5756 * FUNCTION: WDA_RssiMonitorStopRspCallback
5757 * recieves Rssi Monitor stop response from FW
5758 */
5759void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5760 void* pUserData)
5761{
5762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5763 tSirRssiMonitorReq *pRssiMonitorReqParams;
5764
5765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5766 "<------ %s " ,__func__);
5767
5768 if(NULL == pWdaParams)
5769 {
5770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5771 "%s: pWdaParams received NULL", __func__);
5772 VOS_ASSERT(0);
5773 return ;
5774 }
5775
5776 if(NULL == pWdaParams->wdaMsgParam)
5777 {
5778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5779 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5780 VOS_ASSERT(0);
5781 vos_mem_free(pWdaParams);
5782 return ;
5783 }
5784
5785 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5786
5787 if(pRssiMonitorReqParams->rssiMonitorCallback)
5788 {
5789 pRssiMonitorReqParams->rssiMonitorCallback(
5790 pRssiMonitorReqParams->rssiMonitorCbContext,
5791 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5792 }
5793 else
5794 {
5795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5796 "%s: pFWLoggingInitParams callback is NULL", __func__);
5797 }
5798
5799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5800 vos_mem_free(pWdaParams->wdaMsgParam);
5801 vos_mem_free(pWdaParams);
5802
5803 return;
5804}
5805
5806/*
5807 * FUNCTION: WDA_RssiMonitorStartRspCallback
5808 * recieves Rssi Monitor start response from FW
5809 */
5810void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5811 void* pUserData)
5812{
5813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5814 tSirRssiMonitorReq *pRssiMonitorReqParams;
5815
5816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5817 "<------ %s " ,__func__);
5818
5819 if(NULL == pWdaParams)
5820 {
5821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5822 "%s: pWdaParams received NULL", __func__);
5823 VOS_ASSERT(0);
5824 return ;
5825 }
5826
5827 if(NULL == pWdaParams->wdaMsgParam)
5828 {
5829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5830 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5831 VOS_ASSERT(0);
5832 vos_mem_free(pWdaParams);
5833 return ;
5834 }
5835
5836 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5837
5838 if(pRssiMonitorReqParams->rssiMonitorCallback)
5839 {
5840 pRssiMonitorReqParams->rssiMonitorCallback(
5841 pRssiMonitorReqParams->rssiMonitorCbContext,
5842 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5843 }
5844 else
5845 {
5846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5847 "%s: pFWLoggingInitParams callback is NULL", __func__);
5848 }
5849
5850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5851 vos_mem_free(pWdaParams->wdaMsgParam);
5852 vos_mem_free(pWdaParams);
5853
5854 return;
5855}
5856
Siddharth Bhal64246172015-02-27 01:04:37 +05305857/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305858 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305859 * recieves Mgmt Logging init response from FW
5860 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305861void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305862 void* pUserData)
5863{
5864 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305865 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305866 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305867
5868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5869 "<------ %s " ,__func__);
5870
5871 if(NULL == pWdaParams)
5872 {
5873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5874 "%s: pWdaParams received NULL", __func__);
5875 VOS_ASSERT(0);
5876 return ;
5877 }
5878
5879 if(NULL == pWdaParams->wdaMsgParam)
5880 {
5881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5882 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5883 VOS_ASSERT(0);
5884 vos_mem_free(pWdaParams);
5885 return ;
5886 }
5887
c_manjeecfd1efb2015-09-25 19:32:34 +05305888 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5889 if(NULL == pWdaParams)
5890 {
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5892 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5893 VOS_ASSERT(0);
5894 vos_mem_free(pWdaParams);
5895 return;
5896 }
5897
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305898 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305899 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305900
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305901 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305902 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305903 pFWLoggingInitParams->fwlogInitCallback(
5904 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305905 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305906 }
5907 else
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305910 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305911 }
5912
c_manjeecfd1efb2015-09-25 19:32:34 +05305913 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5915 vos_mem_free(pWdaParams->wdaMsgParam);
5916 vos_mem_free(pWdaParams);
5917
5918 return;
5919}
5920
5921/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305922 * FUNCTION: WDA_SpoofMacAddrRspCallback
5923 * recieves spoof mac addr response from FW
5924 */
5925void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5926{
5927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5928 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305929
Siddharth Bhal171788a2014-09-29 21:02:40 +05305930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5931 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305932
Siddharth Bhal171788a2014-09-29 21:02:40 +05305933 if(NULL == pWdaParams)
5934 {
5935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5936 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305937 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305938 return ;
5939 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305941
Siddharth Bhal029d6732014-10-09 21:31:23 +05305942 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305944 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305945 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305946 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5947 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305948
Siddharth Bhal171788a2014-09-29 21:02:40 +05305949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305950 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305951 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305952
5953 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305954}
5955
Jeff Johnson295189b2012-06-20 16:38:30 -07005956/*
5957 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5958 * Request to WDI to remove the BSS key( key for broadcast/multicast
5959 * frames Encryption)
5960 */
5961VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5962 tRemoveBssKeyParams *removeBssKeyParams )
5963{
5964 WDI_Status status = WDI_STATUS_SUCCESS ;
5965 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5966 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5967 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5968 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005970 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 if(NULL == wdiRemoveBssKeyParam)
5972 {
5973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005974 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 VOS_ASSERT(0);
5976 return VOS_STATUS_E_NOMEM;
5977 }
5978 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5979 if(NULL == pWdaParams)
5980 {
5981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005982 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 VOS_ASSERT(0);
5984 vos_mem_free(wdiRemoveBssKeyParam);
5985 return VOS_STATUS_E_NOMEM;
5986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 /* copy Remove BSS key params to WDI structure*/
5988 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5989 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5990 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5991 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5992 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005993 /* Store remove key pointer, as this will be used for response */
5994 /* store Params pass it to WDI */
5995 pWdaParams->pWdaContext = pWDA;
5996 pWdaParams->wdaMsgParam = removeBssKeyParams;
5997 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5999 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 if(IS_WDI_STATUS_FAILURE(status))
6001 {
6002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6003 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6005 vos_mem_free(pWdaParams) ;
6006 removeBssKeyParams->status = eSIR_FAILURE ;
6007 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 return CONVERT_WDI2VOS_STATUS(status) ;
6010}
Jeff Johnson295189b2012-06-20 16:38:30 -07006011/*
6012 * FUNCTION: WDA_SetBssKeyReqCallback
6013 * send SET BSS key RSP back to PE
6014 */
6015void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6016{
6017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6018 tWDA_CbContext *pWDA;
6019 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006021 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006022 if(NULL == pWdaParams)
6023 {
6024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006025 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 VOS_ASSERT(0) ;
6027 return ;
6028 }
6029 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6030 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306031 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6032 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6034 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006035 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 return ;
6038}
Jeff Johnson295189b2012-06-20 16:38:30 -07006039/*
6040 * FUNCTION: WDA_ProcessSetStaKeyReq
6041 * Request to WDI for programming the STA key( key for Unicast frames
6042 * Encryption)
6043 */
6044VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6045 tSetStaKeyParams *setStaKeyParams )
6046{
6047 WDI_Status status = WDI_STATUS_SUCCESS ;
6048 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6049 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6050 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6051 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006054 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006055 if(NULL == wdiSetStaKeyParam)
6056 {
6057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 VOS_ASSERT(0);
6060 return VOS_STATUS_E_NOMEM;
6061 }
6062 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6063 if(NULL == pWdaParams)
6064 {
6065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006066 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 VOS_ASSERT(0);
6068 vos_mem_free(wdiSetStaKeyParam);
6069 return VOS_STATUS_E_NOMEM;
6070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 /* copy set STA key params to WDI structure */
6074 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6075 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6076 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6077 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 if(setStaKeyParams->encType != eSIR_ED_NONE)
6079 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006080 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6082 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6083 {
6084 WDA_GetWepKeysFromCfg( pWDA,
6085 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6086 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6087 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6088 }
6089 else
6090 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6092 keyIndex++)
6093 {
6094 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6095 setStaKeyParams->key[keyIndex].keyId;
6096 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6097 setStaKeyParams->key[keyIndex].unicast;
6098 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6099 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6101 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6102 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6103 setStaKeyParams->key[keyIndex].paeRole;
6104 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6105 setStaKeyParams->key[keyIndex].keyLength;
6106 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6107 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6108 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6109 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6110 {
6111 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6112 }
6113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006114 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6115 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006116 }
6117 }
6118 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6119 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 /* Store set key pointer, as this will be used for response */
6121 /* store Params pass it to WDI */
6122 pWdaParams->pWdaContext = pWDA;
6123 pWdaParams->wdaMsgParam = setStaKeyParams;
6124 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006125 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6126 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 if(IS_WDI_STATUS_FAILURE(status))
6128 {
6129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6130 "Failure in set STA Key Req WDI API, free all the memory " );
6131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6132 vos_mem_free(pWdaParams) ;
6133 setStaKeyParams->status = eSIR_FAILURE ;
6134 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 return CONVERT_WDI2VOS_STATUS(status) ;
6137}
Jeff Johnson295189b2012-06-20 16:38:30 -07006138/*
6139 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6140 * send SET Bcast STA key RSP back to PE
6141 */
6142void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6143{
6144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6145 tWDA_CbContext *pWDA;
6146 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006148 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 if(NULL == pWdaParams)
6150 {
6151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006152 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 VOS_ASSERT(0) ;
6154 return ;
6155 }
6156 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6157 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6159 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006160 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 return ;
6163}
6164
Jeff Johnson295189b2012-06-20 16:38:30 -07006165/*
6166 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6167 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6168 * Encryption)
6169 */
6170VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6171 tSetStaKeyParams *setStaKeyParams )
6172{
6173 WDI_Status status = WDI_STATUS_SUCCESS ;
6174 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6175 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6176 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6177 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006180 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 if(NULL == wdiSetStaKeyParam)
6182 {
6183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 VOS_ASSERT(0);
6186 return VOS_STATUS_E_NOMEM;
6187 }
6188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6189 if(NULL == pWdaParams)
6190 {
6191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006193 VOS_ASSERT(0);
6194 vos_mem_free(wdiSetStaKeyParam);
6195 return VOS_STATUS_E_NOMEM;
6196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 /* copy set STA key params to WDI structure */
6200 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6201 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6202 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6203 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 if(setStaKeyParams->encType != eSIR_ED_NONE)
6205 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6207 keyIndex++)
6208 {
6209 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6210 setStaKeyParams->key[keyIndex].keyId;
6211 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6212 setStaKeyParams->key[keyIndex].unicast;
6213 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6214 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006215 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6216 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6217 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6218 setStaKeyParams->key[keyIndex].paeRole;
6219 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6220 setStaKeyParams->key[keyIndex].keyLength;
6221 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6222 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006224 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6225 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 }
6227 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 /* Store set key pointer, as this will be used for response */
6229 /* store Params pass it to WDI */
6230 pWdaParams->pWdaContext = pWDA;
6231 pWdaParams->wdaMsgParam = setStaKeyParams;
6232 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6234 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 if(IS_WDI_STATUS_FAILURE(status))
6236 {
6237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6238 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6240 vos_mem_free(pWdaParams) ;
6241 setStaKeyParams->status = eSIR_FAILURE ;
6242 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 return CONVERT_WDI2VOS_STATUS(status) ;
6245}
Jeff Johnson295189b2012-06-20 16:38:30 -07006246/*
6247 * FUNCTION: WDA_RemoveStaKeyReqCallback
6248 * send SET BSS key RSP back to PE
6249 */
6250void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6251{
6252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6253 tWDA_CbContext *pWDA;
6254 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006256 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 if(NULL == pWdaParams)
6258 {
6259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006260 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 VOS_ASSERT(0) ;
6262 return ;
6263 }
6264 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6265 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6267 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006268 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006269 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 return ;
6271}
6272
Jeff Johnson295189b2012-06-20 16:38:30 -07006273/*
6274 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6275 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6276 */
6277VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6278 tRemoveStaKeyParams *removeStaKeyParams )
6279{
6280 WDI_Status status = WDI_STATUS_SUCCESS ;
6281 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6282 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6283 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6284 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006286 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 if(NULL == wdiRemoveStaKeyParam)
6288 {
6289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 VOS_ASSERT(0);
6292 return VOS_STATUS_E_NOMEM;
6293 }
6294 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6295 if(NULL == pWdaParams)
6296 {
6297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 VOS_ASSERT(0);
6300 vos_mem_free(wdiRemoveStaKeyParam);
6301 return VOS_STATUS_E_NOMEM;
6302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 /* copy remove STA key params to WDI structure*/
6304 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6305 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6306 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6307 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6308 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 /* Store remove key pointer, as this will be used for response */
6310 /* store Params pass it to WDI */
6311 pWdaParams->pWdaContext = pWDA;
6312 pWdaParams->wdaMsgParam = removeStaKeyParams;
6313 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6315 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 if(IS_WDI_STATUS_FAILURE(status))
6317 {
6318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6319 "Failure in remove STA Key Req WDI API, free all the memory " );
6320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6321 vos_mem_free(pWdaParams) ;
6322 removeStaKeyParams->status = eSIR_FAILURE ;
6323 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 return CONVERT_WDI2VOS_STATUS(status) ;
6326}
Jeff Johnson295189b2012-06-20 16:38:30 -07006327/*
6328 * FUNCTION: WDA_IsHandleSetLinkStateReq
6329 * Update the WDA state and return the status to handle this message or not
6330 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006331WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6332 tWDA_CbContext *pWDA,
6333 tLinkStateParams *linkStateParams)
6334{
6335 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 switch(linkStateParams->state)
6337 {
6338 case eSIR_LINK_PREASSOC_STATE:
6339 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6340 /*
6341 * set the WDA state to PRE ASSOC
6342 * copy the BSSID into pWDA to use it in join request and return,
6343 * No need to handle these messages.
6344 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006345 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6346 {
6347 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006349 }
6350 else
6351 {
6352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006353 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006354 VOS_ASSERT(0);
6355 }
6356
6357 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6358 {
6359 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006360 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006361 }
6362 else
6363 {
6364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006365 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006366 VOS_ASSERT(0);
6367 }
6368
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6370 *channel and after ) so reset the WDA state to ready when the second
6371 * time UMAC issue the link state with PREASSOC
6372 */
6373 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6374 {
6375 /* RESET WDA state back to WDA_READY_STATE */
6376 pWDA->wdaState = WDA_READY_STATE;
6377 }
6378 else
6379 {
6380 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6381 }
6382 //populate linkState info in WDACbCtxt
6383 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006384 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 default:
6386 if(pWDA->wdaState != WDA_READY_STATE)
6387 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006388 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6389 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6390 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6391 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6392 *the ASSERT in WDA_Stop during module unload.*/
6393 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6394 {
6395 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006396 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006397 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006398 else
6399 {
6400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006401 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006402 status = WDA_IGNORE_SET_LINK_STATE;
6403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 }
6405 break;
6406 }
6407
6408 return status;
6409}
Jeff Johnson295189b2012-06-20 16:38:30 -07006410/*
6411 * FUNCTION: WDA_SetLinkStateCallback
6412 * call back function for set link state from WDI
6413 */
6414void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6415{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306416 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 tLinkStateParams *linkStateParams;
6418 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006420 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306421 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 {
6423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006424 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006425 VOS_ASSERT(0) ;
6426 return ;
6427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306429 if (NULL == pWDA)
6430 {
6431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6432 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6434 vos_mem_free(pWdaParams->wdaMsgParam);
6435 vos_mem_free(pWdaParams);
6436
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306437 VOS_ASSERT(0);
6438 return ;
6439 }
6440
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 /*
6443 * In STA mode start the BA activity check timer after association
6444 * and in AP mode start BA activity check timer after BSS start */
6445 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6446 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006447 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6448 ((status == WDI_STATUS_SUCCESS) &&
6449 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 {
6451 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 /*
6455 * No respone required for WDA_SET_LINK_STATE so free the request
6456 * param here
6457 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6459 vos_mem_free(pWdaParams);
6460
Jeff Johnson295189b2012-06-20 16:38:30 -07006461 return ;
6462}
Jeff Johnson295189b2012-06-20 16:38:30 -07006463/*
6464 * FUNCTION: WDA_ProcessSetLinkState
6465 * Request to WDI to set the link status.
6466 */
6467VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6468 tLinkStateParams *linkStateParams)
6469{
6470 WDI_Status status = WDI_STATUS_SUCCESS ;
6471 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6472 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6473 sizeof(WDI_SetLinkReqParamsType)) ;
6474 tWDA_ReqParams *pWdaParams ;
6475 tpAniSirGlobal pMac;
6476 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6477
6478 if(NULL == pMac)
6479 {
6480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006481 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006483 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 return VOS_STATUS_E_FAILURE;
6485 }
6486
6487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006488 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006489 if(NULL == wdiSetLinkStateParam)
6490 {
6491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 VOS_ASSERT(0);
6494 return VOS_STATUS_E_NOMEM;
6495 }
6496 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6497 if(NULL == pWdaParams)
6498 {
6499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 VOS_ASSERT(0);
6502 vos_mem_free(wdiSetLinkStateParam);
6503 return VOS_STATUS_E_NOMEM;
6504 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 if(WDA_IGNORE_SET_LINK_STATE ==
6506 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6507 {
6508 status = WDI_STATUS_E_FAILURE;
6509 }
6510 else
6511 {
6512 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6513 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6515 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6517 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 pWdaParams->pWdaContext = pWDA;
6519 /* Store remove key pointer, as this will be used for response */
6520 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006521 /* store Params pass it to WDI */
6522 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6523 /* Stop Timer only other than GO role and concurrent session */
6524 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006525 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006526 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6527 {
6528 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6531 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 if(IS_WDI_STATUS_FAILURE(status))
6533 {
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6535 "Failure in set link state Req WDI API, free all the memory " );
6536 }
6537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 if(IS_WDI_STATUS_FAILURE(status))
6539 {
6540 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006541 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006542 vos_mem_free(pWdaParams);
6543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 return CONVERT_WDI2VOS_STATUS(status) ;
6545}
Jeff Johnson295189b2012-06-20 16:38:30 -07006546/*
6547 * FUNCTION: WDA_GetStatsReqParamsCallback
6548 * send the response to PE with Stats received from WDI
6549 */
6550void WDA_GetStatsReqParamsCallback(
6551 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6552 void* pUserData)
6553{
Jeff Johnson295189b2012-06-20 16:38:30 -07006554 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306555 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006556
6557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006558 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 pGetPEStatsRspParams =
6560 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6561 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6562
6563 if(NULL == pGetPEStatsRspParams)
6564 {
6565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006566 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006567 VOS_ASSERT(0);
6568 return;
6569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006570 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306571 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6573 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006574
6575 //Fill the Session Id Properly in PE
6576 pGetPEStatsRspParams->sessionId = 0;
6577 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006578 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006579 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6580 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 vos_mem_copy( pGetPEStatsRspParams + 1,
6582 wdiGetStatsRsp + 1,
6583 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306584
6585 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6586 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6587 vosMsg.bodyval = 0;
6588 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6589 (vos_msg_t*)&vosMsg))
6590 {
6591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6592 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6593 vos_mem_free(pGetPEStatsRspParams);
6594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006595
6596 return;
6597}
6598
Jeff Johnson295189b2012-06-20 16:38:30 -07006599/*
6600 * FUNCTION: WDA_ProcessGetStatsReq
6601 * Request to WDI to get the statistics
6602 */
6603VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6604 tAniGetPEStatsReq *pGetStatsParams)
6605{
6606 WDI_Status status = WDI_STATUS_SUCCESS ;
6607 WDI_GetStatsReqParamsType wdiGetStatsParam;
6608 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306609 vos_msg_t vosMsg;
6610
Jeff Johnson295189b2012-06-20 16:38:30 -07006611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006612 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6614 pGetStatsParams->staId;
6615 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6616 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 status = WDI_GetStatsReq(&wdiGetStatsParam,
6619 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006620 if(IS_WDI_STATUS_FAILURE(status))
6621 {
6622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6623 "Failure in Get Stats Req WDI API, free all the memory " );
6624 pGetPEStatsRspParams =
6625 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6626 if(NULL == pGetPEStatsRspParams)
6627 {
6628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006631 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 return VOS_STATUS_E_NOMEM;
6633 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306634 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006635 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6636 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6637 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306638
6639 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6640 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6641 vosMsg.bodyval = 0;
6642 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6643 (vos_msg_t*)&vosMsg))
6644 {
6645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6646 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6647 vos_mem_free(pGetPEStatsRspParams);
6648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006650 /* Free the request message */
6651 vos_mem_free(pGetStatsParams);
6652 return CONVERT_WDI2VOS_STATUS(status);
6653}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006654
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006655#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006656/*
6657 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6658 * send the response to PE with roam Rssi received from WDI
6659 */
6660void WDA_GetRoamRssiReqParamsCallback(
6661 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6662 void* pUserData)
6663{
6664 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6665 tWDA_CbContext *pWDA = NULL;
6666 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6667 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6669 "<------ %s " ,__func__);
6670 if(NULL == pWdaParams)
6671 {
6672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6673 "%s: pWdaParams received NULL", __func__);
6674 VOS_ASSERT(0) ;
6675 return ;
6676 }
6677 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6678 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6679
6680 if(NULL == pGetRoamRssiReqParams)
6681 {
6682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6683 "%s: pGetRoamRssiReqParams received NULL", __func__);
6684 VOS_ASSERT(0);
6685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6686 vos_mem_free(pWdaParams);
6687 return ;
6688 }
6689 pGetRoamRssiRspParams =
6690 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6691
6692 if(NULL == pGetRoamRssiRspParams)
6693 {
6694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6695 "%s: VOS MEM Alloc Failure", __func__);
6696 VOS_ASSERT(0);
6697 return;
6698 }
6699 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6700 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006701 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006702 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6703 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6704
6705 /* Assign get roam rssi req (backup) in to the response */
6706 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6707
6708 /* free WDI command buffer */
6709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6710 vos_mem_free(pWdaParams) ;
6711
6712 /* send response to UMAC*/
6713 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6714
6715 return;
6716}
6717
6718
6719
6720/*
6721 * FUNCTION: WDA_ProcessGetRoamRssiReq
6722 * Request to WDI to get the statistics
6723 */
6724VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6725 tAniGetRssiReq *pGetRoamRssiParams)
6726{
6727 WDI_Status status = WDI_STATUS_SUCCESS ;
6728 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6729 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6730 tWDA_ReqParams *pWdaParams = NULL;
6731
6732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6733 "------> %s " ,__func__);
6734 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6735 pGetRoamRssiParams->staId;
6736 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6737
6738 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6739 if(NULL == pWdaParams)
6740 {
6741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6742 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306743 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006744 VOS_ASSERT(0);
6745 return VOS_STATUS_E_NOMEM;
6746 }
6747
6748 /* Store Init Req pointer, as this will be used for response */
6749 pWdaParams->pWdaContext = pWDA;
6750
6751 /* Take Get roam Rssi req backup as it stores the callback to be called after
6752 receiving the response */
6753 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6754 pWdaParams->wdaWdiApiMsgParam = NULL;
6755
6756 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6757 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6758 if(IS_WDI_STATUS_FAILURE(status))
6759 {
6760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6761 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6762 pGetRoamRssiRspParams =
6763 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6764 if(NULL == pGetRoamRssiRspParams)
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6767 "%s: VOS MEM Alloc Failure", __func__);
6768 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306769 vos_mem_free(pGetRoamRssiParams);
6770 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006771 return VOS_STATUS_E_NOMEM;
6772 }
6773 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6774 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6775 pGetRoamRssiRspParams->rssi = 0;
6776 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6777 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6778 (void *)pGetRoamRssiRspParams, 0) ;
6779 }
6780 return CONVERT_WDI2VOS_STATUS(status);
6781}
6782#endif
6783
6784
Jeff Johnson295189b2012-06-20 16:38:30 -07006785/*
6786 * FUNCTION: WDA_UpdateEDCAParamCallback
6787 * call back function for Update EDCA params from WDI
6788 */
6789void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6790{
6791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6792 tEdcaParams *pEdcaParams;
6793
6794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 if(NULL == pWdaParams)
6797 {
6798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006799 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 VOS_ASSERT(0) ;
6801 return ;
6802 }
6803 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6805 vos_mem_free(pWdaParams);
6806 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 return ;
6808}
Jeff Johnson295189b2012-06-20 16:38:30 -07006809/*
6810 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6811 * Request to WDI to Update the EDCA params.
6812 */
6813VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6814 tEdcaParams *pEdcaParams)
6815{
6816 WDI_Status status = WDI_STATUS_SUCCESS ;
6817 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6818 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6819 sizeof(WDI_UpdateEDCAParamsType)) ;
6820 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006822 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 if(NULL == wdiEdcaParam)
6824 {
6825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006828 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 return VOS_STATUS_E_NOMEM;
6830 }
6831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6832 if(NULL == pWdaParams)
6833 {
6834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_ASSERT(0);
6837 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006838 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 return VOS_STATUS_E_NOMEM;
6840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006842 /*
6843 Since firmware is not using highperformance flag, we have removed
6844 this flag from wdiEDCAInfo structure to match sizeof the structure
6845 between host and firmware.In future if we are planning to use
6846 highperformance flag then Please define this flag in wdiEDCAInfo
6847 structure, update it here and send it to firmware. i.e.
6848 Following is the original line which we removed as part of the fix
6849 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6850 pEdcaParams->highPerformance;
6851 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6853 &pEdcaParams->acbe);
6854 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6855 &pEdcaParams->acbk);
6856 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6857 &pEdcaParams->acvi);
6858 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6859 &pEdcaParams->acvo);
6860 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 pWdaParams->pWdaContext = pWDA;
6862 /* Store remove key pointer, as this will be used for response */
6863 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 /* store Params pass it to WDI */
6865 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6867 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 if(IS_WDI_STATUS_FAILURE(status))
6869 {
6870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6871 "Failure in Update EDCA Params WDI API, free all the memory " );
6872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6873 vos_mem_free(pWdaParams);
6874 vos_mem_free(pEdcaParams);
6875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006876 return CONVERT_WDI2VOS_STATUS(status) ;
6877}
Jeff Johnson295189b2012-06-20 16:38:30 -07006878/*
6879 * FUNCTION: WDA_AddBAReqCallback
6880 * send ADD BA RSP back to PE
6881 */
6882void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6883 void* pUserData)
6884{
6885 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6886 tWDA_CbContext *pWDA;
6887 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006889 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306890 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 {
6892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006893 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 VOS_ASSERT(0) ;
6895 return ;
6896 }
6897 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306898 if (NULL == pWDA)
6899 {
6900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6901 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6903 vos_mem_free(pWdaParams->wdaMsgParam);
6904 vos_mem_free(pWdaParams);
6905
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306906 VOS_ASSERT(0);
6907 return ;
6908 }
6909
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6912 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006913 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 return ;
6916}
6917
Jeff Johnson295189b2012-06-20 16:38:30 -07006918/*
6919 * FUNCTION: WDA_ProcessAddBAReq
6920 * Request to WDI to Update the ADDBA REQ params.
6921 */
6922VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306923 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006924{
Jeff Johnson43971f52012-07-17 12:26:56 -07006925 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6927 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6928 sizeof(WDI_AddBAReqParamsType)) ;
6929 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006931 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 if(NULL == wdiAddBAReqParam)
6933 {
6934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 VOS_ASSERT(0);
6937 return VOS_STATUS_E_NOMEM;
6938 }
6939 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6940 if(NULL == pWdaParams)
6941 {
6942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 VOS_ASSERT(0);
6945 vos_mem_free(wdiAddBAReqParam);
6946 return VOS_STATUS_E_NOMEM;
6947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 do
6949 {
6950 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 wdiAddBaInfo->ucSTAIdx = staIdx ;
6952 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306953 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 } while(0) ;
6955 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 pWdaParams->pWdaContext = pWDA;
6957 /* store Params pass it to WDI */
6958 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6959 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006960 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6961 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006962
Jeff Johnson43971f52012-07-17 12:26:56 -07006963 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 {
6965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006966 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6967 status = CONVERT_WDI2VOS_STATUS(wstatus);
6968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 vos_mem_free(pWdaParams);
6970 pAddBAReqParams->status = eSIR_FAILURE;
6971 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6972 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006973 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974}
Jeff Johnson295189b2012-06-20 16:38:30 -07006975/*
6976 * FUNCTION: WDA_AddBASessionReqCallback
6977 * send ADD BA SESSION RSP back to PE/(or TL)
6978 */
6979void WDA_AddBASessionReqCallback(
6980 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6981{
6982 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6983 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306984 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 if(NULL == pWdaParams)
6989 {
6990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006991 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 VOS_ASSERT(0) ;
6993 return ;
6994 }
6995 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306996 if (NULL == pWDA)
6997 {
6998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6999 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7001 vos_mem_free(pWdaParams->wdaMsgParam);
7002 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307003 VOS_ASSERT(0);
7004 return ;
7005 }
7006
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 if( NULL == pAddBAReqParams )
7009 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007011 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7014 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 return ;
7016 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7018 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307020 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 * another request to HAL(/WDI) (ADD_BA_REQ)
7022 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 if((VOS_STATUS_SUCCESS ==
7024 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307025 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 {
7027 /* Update TL with BA info received from HAL/WDI */
7028 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7029 wdiAddBaSession->usBaSessionID,
7030 wdiAddBaSession->ucSTAIdx,
7031 wdiAddBaSession->ucBaTID,
7032 wdiAddBaSession->ucBaBufferSize,
7033 wdiAddBaSession->ucWinSize,
7034 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307036 wdiAddBaSession->ucSTAIdx,
7037 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 }
7039 else
7040 {
7041 pAddBAReqParams->status =
7042 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7043
7044 /* Setting Flag to indicate that Set BA is success */
7045 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7046 {
7047 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7048 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7049 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 /*Reset the WDA state to READY */
7054 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 return ;
7056}
7057
Jeff Johnson295189b2012-06-20 16:38:30 -07007058/*
7059 * FUNCTION: WDA_ProcessAddBASessionReq
7060 * Request to WDI to Update the ADDBA REQ params.
7061 */
7062VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7063 tAddBAParams *pAddBAReqParams)
7064{
7065 WDI_Status status = WDI_STATUS_SUCCESS ;
7066 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7067 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7068 sizeof(WDI_AddBASessionReqParamsType)) ;
7069 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007070 WLANTL_STAStateType tlSTAState = 0;
7071
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007073 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 if(NULL == wdiAddBASessionReqParam)
7075 {
7076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 VOS_ASSERT(0);
7079 return VOS_STATUS_E_NOMEM;
7080 }
7081 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7082 if(NULL == pWdaParams)
7083 {
7084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007085 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007086 VOS_ASSERT(0);
7087 vos_mem_free(wdiAddBASessionReqParam);
7088 return VOS_STATUS_E_NOMEM;
7089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 /*
7091 * Populate ADD BA parameters and pass these paarmeters to WDI.
7092 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7093 * the state to track if these is BA recipient case or BA initiator
7094 * case.
7095 */
7096 do
7097 {
7098 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7099 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7100 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7101 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7102 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7103 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7104 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7107 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7108 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7109 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7110 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307111
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 }while(0) ;
7113 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 pWdaParams->pWdaContext = pWDA;
7115 /* Store ADD BA pointer, as this will be used for response */
7116 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7117 /* store Params pass it to WDI */
7118 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007119
7120 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7121 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7122 */
7123 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7124 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7125 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007127 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007128 status = WDI_STATUS_E_NOT_ALLOWED;
7129 pAddBAReqParams->status =
7130 CONVERT_WDI2SIR_STATUS(status) ;
7131 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7132 /*Reset the WDA state to READY */
7133 pWDA->wdaState = WDA_READY_STATE;
7134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7135 vos_mem_free(pWdaParams);
7136
7137 return CONVERT_WDI2VOS_STATUS(status) ;
7138 }
7139
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7141 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 if(IS_WDI_STATUS_FAILURE(status))
7143 {
7144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007145 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007147 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007148 pAddBAReqParams->status =
7149 CONVERT_WDI2SIR_STATUS(status) ;
7150 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007151 /*Reset the WDA state to READY */
7152 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 vos_mem_free(pWdaParams);
7155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157}
Jeff Johnson295189b2012-06-20 16:38:30 -07007158/*
7159 * FUNCTION: WDA_DelBANotifyTL
7160 * send DEL BA IND to TL
7161 */
7162void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7163 tDelBAParams *pDelBAReqParams)
7164{
7165 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7166 //tSirMsgQ msg;
7167 vos_msg_t vosMsg;
7168 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 if(NULL == pDelBAInd)
7170 {
7171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 VOS_ASSERT(0) ;
7174 return;
7175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7177 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7178 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7179 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007180
Jeff Johnson295189b2012-06-20 16:38:30 -07007181
7182 vosMsg.type = WDA_DELETEBA_IND;
7183 vosMsg.bodyptr = pDelBAInd;
7184 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7185 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7186 {
7187 vosStatus = VOS_STATUS_E_BADMSG;
7188 }
7189}
Jeff Johnson295189b2012-06-20 16:38:30 -07007190/*
7191 * FUNCTION: WDA_DelBAReqCallback
7192 * send DEL BA RSP back to PE
7193 */
7194void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7195{
7196 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7197 tWDA_CbContext *pWDA;
7198 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007200 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 if(NULL == pWdaParams)
7202 {
7203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007204 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 VOS_ASSERT(0) ;
7206 return ;
7207 }
7208 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307209
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 /* Notify TL about DEL BA in case of recipinet */
7212 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7213 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7214 {
7215 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 /*
7218 * No respone required for WDA_DELBA_IND so just free the request
7219 * param here
7220 */
7221 vos_mem_free(pDelBAReqParams);
7222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7223 vos_mem_free(pWdaParams);
7224 return ;
7225}
7226
Jeff Johnson295189b2012-06-20 16:38:30 -07007227/*
7228 * FUNCTION: WDA_ProcessDelBAReq
7229 * Request to WDI to Update the DELBA REQ params.
7230 */
7231VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7232 tDelBAParams *pDelBAReqParams)
7233{
7234 WDI_Status status = WDI_STATUS_SUCCESS ;
7235 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7236 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7237 sizeof(WDI_DelBAReqParamsType)) ;
7238 tWDA_ReqParams *pWdaParams ;
7239 tANI_U16 staIdx = 0;
7240 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007242 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007243 if(NULL == wdiDelBAReqParam)
7244 {
7245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 VOS_ASSERT(0);
7248 return VOS_STATUS_E_NOMEM;
7249 }
7250 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7251 if(NULL == pWdaParams)
7252 {
7253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007254 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 VOS_ASSERT(0);
7256 vos_mem_free(wdiDelBAReqParam);
7257 return VOS_STATUS_E_NOMEM;
7258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7260 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7261 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7262 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 pWdaParams->pWdaContext = pWDA;
7264 /* Store DEL BA pointer, as this will be used for response */
7265 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 /* store Params pass it to WDI */
7267 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7269 * maintained in WDA, so that WDA can retry for another BA session
7270 */
7271 staIdx = pDelBAReqParams->staIdx;
7272 tid = pDelBAReqParams->baTID;
7273 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 status = WDI_DelBAReq(wdiDelBAReqParam,
7275 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007276 if(IS_WDI_STATUS_FAILURE(status))
7277 {
7278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7279 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7281 vos_mem_free(pWdaParams->wdaMsgParam);
7282 vos_mem_free(pWdaParams);
7283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007284 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007285}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007286
7287/*
7288 * FUNCTION: WDA_UpdateChReqCallback
7289 *
7290 */
7291void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7292{
Siddharth Bhala006c122014-05-03 12:13:27 +05307293 tWDA_ReqParams *pWdaParams;
7294 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7295 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7296 WDI_UpdateChannelReqinfoType *pChanInfoType;
7297 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007298
7299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7300 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307301 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007302 {
7303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307304 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007305 VOS_ASSERT(0);
7306 return;
7307 }
7308
Siddharth Bhala006c122014-05-03 12:13:27 +05307309 pWdaParams = (tWDA_ReqParams *)pUserData;
7310 pwdiUpdateChReqParam =
7311 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7312 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7313 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7314 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007315 /*
7316 * currently there is no response message is expected between PE and
7317 * WDA, Failure return from WDI is a ASSERT condition
7318 */
7319 vos_mem_free(pChanInfoType);
7320 vos_mem_free(pChanList);
7321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7322 vos_mem_free(pWdaParams);
7323
7324 return;
7325}
7326
7327/*
7328 * FUNCTION: WDA_ProcessUpdateChannelList
7329 * Request to WDI to Update the ChannelList params.
7330 */
7331VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7332 tSirUpdateChanList *pChanList)
7333{
7334 WDI_Status status = WDI_STATUS_SUCCESS;
7335 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7336 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7337 WDI_UpdateChannelReqinfoType *pChanInfoType;
7338 tWDA_ReqParams *pWdaParams;
7339 wpt_uint8 i;
7340
7341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7342 "------> %s " ,__func__);
7343 if(NULL == pChanList)
7344 {
7345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7346 "%s: NULL pChanList", __func__);
7347 VOS_ASSERT(0);
7348 return VOS_STATUS_E_INVAL;
7349 }
7350
7351 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7352 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307353 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007354 "Update channel list capability Not Supported");
7355 vos_mem_free(pChanList);
7356 return VOS_STATUS_E_INVAL;
7357 }
7358
7359 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7360 sizeof(WDI_UpdateChReqParamsType));
7361 if(NULL == pwdiUpdateChReqParam)
7362 {
7363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7364 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7365 __func__);
7366 VOS_ASSERT(0);
7367 vos_mem_free(pChanList);
7368 return VOS_STATUS_E_NOMEM;
7369 }
7370 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7371 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7372 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7373 pChanList->numChan);
7374 if(NULL == pChanInfoType)
7375 {
7376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7377 "%s: VOS MEM Alloc Failure", __func__);
7378 VOS_ASSERT(0);
7379 vos_mem_free(pChanList);
7380 vos_mem_free(pwdiUpdateChReqParam);
7381 return VOS_STATUS_E_NOMEM;
7382 }
7383 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7384 * pChanList->numChan);
7385 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7386
7387 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7388 if(NULL == pWdaParams)
7389 {
7390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7391 "%s: VOS MEM Alloc Failure", __func__);
7392 VOS_ASSERT(0);
7393 vos_mem_free(pChanList);
7394 vos_mem_free(pChanInfoType);
7395 vos_mem_free(pwdiUpdateChReqParam);
7396 return VOS_STATUS_E_NOMEM;
7397 }
7398 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7399
7400 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7401 {
7402 pChanInfoType->mhz =
7403 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7404
7405 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7406 pChanInfoType->band_center_freq2 = 0;
7407
7408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7409 "chan[%d] = %u", i, pChanInfoType->mhz);
7410 if (pChanList->chanParam[i].dfsSet)
7411 {
7412 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7414 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7415 pChanList->chanParam[i].dfsSet);
7416 }
7417
7418 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7419 {
7420 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7421 }
7422 else
7423 {
7424 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7425 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7426 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7427 }
7428
7429 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7430 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307431 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007432 pChanInfoType++;
7433 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007434 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7435 pWdaParams->pWdaContext = pWDA;
7436 pWdaParams->wdaMsgParam = (void *)pChanList;
7437 /* store Params pass it to WDI */
7438 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7439 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7440 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7441 if(IS_WDI_STATUS_FAILURE(status))
7442 {
7443 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7444 "Failure in Update Channel REQ Params WDI API, free all the memory");
7445 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7446 vos_mem_free(pwdiUpdateChReqParam);
7447 vos_mem_free(pWdaParams->wdaMsgParam);
7448 vos_mem_free(pWdaParams);
7449 }
7450 return CONVERT_WDI2VOS_STATUS(status);
7451}
7452
Jeff Johnson295189b2012-06-20 16:38:30 -07007453/*
7454 * FUNCTION: WDA_AddTSReqCallback
7455 * send ADD TS RSP back to PE
7456 */
7457void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7458{
7459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307460 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 tAddTsParams *pAddTsReqParams;
7462
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 if(NULL == pWdaParams)
7466 {
7467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007468 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 VOS_ASSERT(0) ;
7470 return ;
7471 }
7472 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307473 if (NULL == pWDA)
7474 {
7475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7476 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7478 vos_mem_free(pWdaParams->wdaMsgParam);
7479 vos_mem_free(pWdaParams);
7480
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307481 VOS_ASSERT(0);
7482 return ;
7483 }
7484
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7487 vos_mem_free(pWdaParams);
7488
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007489 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 return ;
7492}
7493
Jeff Johnson295189b2012-06-20 16:38:30 -07007494/*
7495 * FUNCTION: WDA_ProcessAddTSReq
7496 * Request to WDI to Update the ADD TS REQ params.
7497 */
7498VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7499 tAddTsParams *pAddTsReqParams)
7500{
7501 WDI_Status status = WDI_STATUS_SUCCESS ;
7502 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7503 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7504 sizeof(WDI_AddTSReqParamsType)) ;
7505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007507 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 if(NULL == wdiAddTSReqParam)
7509 {
7510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 VOS_ASSERT(0);
7513 return VOS_STATUS_E_NOMEM;
7514 }
7515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7516 if(NULL == pWdaParams)
7517 {
7518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 VOS_ASSERT(0);
7521 vos_mem_free(wdiAddTSReqParam);
7522 return VOS_STATUS_E_NOMEM;
7523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7525 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 //TS IE
7527 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7528 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7529 pAddTsReqParams->tspec.length;
7530
7531 //TS IE : TS INFO : TRAFFIC
7532 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7533 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7534 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7535 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7536 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7537 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7538 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7539 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7540 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7541 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7542 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7543 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7544 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7545 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7546 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7547 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7548
7549 //TS IE : TS INFO : SCHEDULE
7550 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7551 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7552 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7553 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007554 //TS IE
7555 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7556 pAddTsReqParams->tspec.nomMsduSz;
7557 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7558 pAddTsReqParams->tspec.maxMsduSz;
7559 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7560 pAddTsReqParams->tspec.minSvcInterval;
7561 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7562 pAddTsReqParams->tspec.maxSvcInterval;
7563 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7564 pAddTsReqParams->tspec.inactInterval;
7565 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7566 pAddTsReqParams->tspec.suspendInterval;
7567 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7568 pAddTsReqParams->tspec.svcStartTime;
7569 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7570 pAddTsReqParams->tspec.minDataRate;
7571 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7572 pAddTsReqParams->tspec.meanDataRate;
7573 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7574 pAddTsReqParams->tspec.peakDataRate;
7575 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7576 pAddTsReqParams->tspec.maxBurstSz;
7577 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7578 pAddTsReqParams->tspec.delayBound;
7579 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7580 pAddTsReqParams->tspec.minPhyRate;
7581 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7582 pAddTsReqParams->tspec.surplusBw;
7583 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7584 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 /* TODO: tAddTsParams doesn't have the following fields */
7586#if 0
7587 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7588 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7589 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7590 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7591#endif
7592 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7593
7594 pWdaParams->pWdaContext = pWDA;
7595 /* Store ADD TS pointer, as this will be used for response */
7596 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007597 /* store Params pass it to WDI */
7598 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007599 status = WDI_AddTSReq(wdiAddTSReqParam,
7600 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 if(IS_WDI_STATUS_FAILURE(status))
7602 {
7603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7604 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7606 vos_mem_free(pWdaParams);
7607 pAddTsReqParams->status = eSIR_FAILURE ;
7608 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007611}
7612
Jeff Johnson295189b2012-06-20 16:38:30 -07007613/*
7614 * FUNCTION: WDA_DelTSReqCallback
7615 * send DEL TS RSP back to PE
7616 */
7617void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7618{
7619 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7623 vos_mem_free(pWdaParams->wdaMsgParam) ;
7624 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 /*
7626 * No respone required for WDA_DEL_TS_REQ so just free the request
7627 * param here
7628 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007629 return ;
7630}
7631
Jeff Johnson295189b2012-06-20 16:38:30 -07007632/*
7633 * FUNCTION: WDA_ProcessDelTSReq
7634 * Request to WDI to Update the DELTS REQ params.
7635 */
7636VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7637 tDelTsParams *pDelTSReqParams)
7638{
7639 WDI_Status status = WDI_STATUS_SUCCESS ;
7640 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7641 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7642 sizeof(WDI_DelTSReqParamsType)) ;
7643 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 if(NULL == wdiDelTSReqParam)
7647 {
7648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007650 VOS_ASSERT(0);
7651 return VOS_STATUS_E_NOMEM;
7652 }
7653 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7654 if(NULL == pWdaParams)
7655 {
7656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007658 VOS_ASSERT(0);
7659 vos_mem_free(wdiDelTSReqParam);
7660 return VOS_STATUS_E_NOMEM;
7661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7663 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7664 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7665 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7666 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 pWdaParams->pWdaContext = pWDA;
7668 /* Store DEL TS pointer, as this will be used for response */
7669 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 /* store Params pass it to WDI */
7671 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 status = WDI_DelTSReq(wdiDelTSReqParam,
7673 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 if(IS_WDI_STATUS_FAILURE(status))
7675 {
7676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7677 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7679 vos_mem_free(pWdaParams->wdaMsgParam);
7680 vos_mem_free(pWdaParams);
7681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007682 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007683}
Jeff Johnson295189b2012-06-20 16:38:30 -07007684/*
7685 * FUNCTION: WDA_UpdateBeaconParamsCallback
7686 * Free the memory. No need to send any response to PE in this case
7687 */
7688void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7689{
7690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007692 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 if(NULL == pWdaParams)
7694 {
7695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007696 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 VOS_ASSERT(0) ;
7698 return ;
7699 }
7700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7701 vos_mem_free(pWdaParams->wdaMsgParam) ;
7702 vos_mem_free(pWdaParams);
7703 /*
7704 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7705 * param here
7706 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007707 return ;
7708}
Jeff Johnson295189b2012-06-20 16:38:30 -07007709/*
7710 * FUNCTION: WDA_ProcessUpdateBeaconParams
7711 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7712 */
7713VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7714 tUpdateBeaconParams *pUpdateBeaconParams)
7715{
7716 WDI_Status status = WDI_STATUS_SUCCESS ;
7717 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7718 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7719 sizeof(WDI_UpdateBeaconParamsType)) ;
7720 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007722 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 if(NULL == wdiUpdateBeaconParams)
7724 {
7725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 VOS_ASSERT(0);
7728 return VOS_STATUS_E_NOMEM;
7729 }
7730 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7731 if(NULL == pWdaParams)
7732 {
7733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 VOS_ASSERT(0);
7736 vos_mem_free(wdiUpdateBeaconParams);
7737 return VOS_STATUS_E_NOMEM;
7738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7740 pUpdateBeaconParams->bssIdx;
7741 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7742 pUpdateBeaconParams->fShortPreamble;
7743 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7744 pUpdateBeaconParams->fShortSlotTime;
7745 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7746 pUpdateBeaconParams->beaconInterval;
7747 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7748 pUpdateBeaconParams->llaCoexist;
7749 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7750 pUpdateBeaconParams->llbCoexist;
7751 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7752 pUpdateBeaconParams->llgCoexist;
7753 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7754 pUpdateBeaconParams->ht20MhzCoexist;
7755 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7756 pUpdateBeaconParams->llnNonGFCoexist;
7757 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7758 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7759 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7760 pUpdateBeaconParams->fRIFSMode;
7761 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7762 pUpdateBeaconParams->paramChangeBitmap;
7763 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7764
7765 pWdaParams->pWdaContext = pWDA;
7766 /* Store UpdateBeacon Req pointer, as this will be used for response */
7767 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 /* store Params pass it to WDI */
7769 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7771 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7772 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 if(IS_WDI_STATUS_FAILURE(status))
7774 {
7775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7776 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7778 vos_mem_free(pWdaParams->wdaMsgParam);
7779 vos_mem_free(pWdaParams);
7780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007782}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007783#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007784/*
7785 * FUNCTION: WDA_TSMStatsReqCallback
7786 * send TSM Stats RSP back to PE
7787 */
7788void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7789{
7790 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7791 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007792 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7793 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007794
7795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007796 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 if(NULL == pWdaParams)
7798 {
7799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007800 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 VOS_ASSERT(0) ;
7802 return ;
7803 }
7804 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307805 if (NULL == pWDA)
7806 {
7807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7808 "%s:pWDA is NULL", __func__);
7809 VOS_ASSERT(0);
7810 return ;
7811 }
7812
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007813 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7814
7815 if(NULL == pGetTsmStatsReqParams)
7816 {
7817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7818 "%s: pGetTsmStatsReqParams received NULL", __func__);
7819 VOS_ASSERT(0);
7820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7821 vos_mem_free(pWdaParams);
7822 return;
7823 }
7824
7825 pTsmRspParams =
7826 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007827 if( NULL == pTsmRspParams )
7828 {
7829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007830 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 VOS_ASSERT( 0 );
7832 return ;
7833 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007834 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7835 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7836 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7837
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7839 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7840 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7841 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7842 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7843 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7844 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7845 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7846 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7847 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007848
7849 /* Assign get tsm stats req req (backup) in to the response */
7850 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7851
7852 /* free WDI command buffer */
7853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7854 vos_mem_free(pWdaParams);
7855
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007857 return ;
7858}
7859
7860
Jeff Johnson295189b2012-06-20 16:38:30 -07007861/*
7862 * FUNCTION: WDA_ProcessTsmStatsReq
7863 * Request to WDI to get the TSM Stats params.
7864 */
7865VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007866 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007867{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007868 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007869 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007870 tWDA_ReqParams *pWdaParams = NULL;
7871 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7872
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007874 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7876 sizeof(WDI_TSMStatsReqParamsType));
7877 if(NULL == wdiTSMReqParam)
7878 {
7879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 VOS_ASSERT(0);
7882 return VOS_STATUS_E_NOMEM;
7883 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7885 if(NULL == pWdaParams)
7886 {
7887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007888 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007889 VOS_ASSERT(0);
7890 vos_mem_free(wdiTSMReqParam);
7891 return VOS_STATUS_E_NOMEM;
7892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7894 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7895 pTsmStats->bssId,
7896 sizeof(wpt_macAddr));
7897 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7898
7899 pWdaParams->pWdaContext = pWDA;
7900 /* Store TSM Stats pointer, as this will be used for response */
7901 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007902 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007903 status = WDI_TSMStatsReq(wdiTSMReqParam,
7904 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 if(IS_WDI_STATUS_FAILURE(status))
7906 {
7907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7908 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007909 vos_mem_free(pWdaParams);
7910
7911 pGetTsmStatsRspParams =
7912 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7913 if(NULL == pGetTsmStatsRspParams)
7914 {
7915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7916 "%s: VOS MEM Alloc Failure", __func__);
7917 VOS_ASSERT(0);
7918 vos_mem_free(pTsmStats);
7919 return VOS_STATUS_E_NOMEM;
7920 }
7921 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7922 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7923 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7924
7925 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 return CONVERT_WDI2VOS_STATUS(status) ;
7928}
7929#endif
7930/*
7931 * FUNCTION: WDA_SendBeaconParamsCallback
7932 * No need to send any response to PE in this case
7933 */
7934void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7935{
7936
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007938 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 return ;
7940}
Jeff Johnson295189b2012-06-20 16:38:30 -07007941/*
7942 * FUNCTION: WDA_ProcessSendBeacon
7943 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7944 * start beacon trasmission
7945 */
7946VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7947 tSendbeaconParams *pSendbeaconParams)
7948{
7949 WDI_Status status = WDI_STATUS_SUCCESS ;
7950 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007952 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7954 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7955 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7956 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7958 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307959 /* p2pIeOffset should be atleast greater than timIeOffset */
7960 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7961 (pSendbeaconParams->p2pIeOffset <
7962 pSendbeaconParams->timIeOffset))
7963 {
7964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7965 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307966 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307967 VOS_ASSERT( 0 );
7968 return WDI_STATUS_E_FAILURE;
7969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7971 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007972 /* Copy the beacon template to local buffer */
7973 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7974 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7975 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7976
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7978 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 if(IS_WDI_STATUS_FAILURE(status))
7980 {
7981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7982 "Failure in SEND BEACON REQ Params WDI API" );
7983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 vos_mem_free(pSendbeaconParams);
7985 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007986}
Jeff Johnson295189b2012-06-20 16:38:30 -07007987/*
7988 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7989 * No need to send any response to PE in this case
7990 */
7991void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7992{
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007994 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 return ;
7996}
7997
Jeff Johnson295189b2012-06-20 16:38:30 -07007998/*
7999 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8000 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8001 * send probe response
8002 */
8003VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8004 tSendProbeRespParams *pSendProbeRspParams)
8005{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008006 WDI_Status status = WDI_STATUS_SUCCESS;
8007 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8008 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008010 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008011
8012 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308013 {
8014 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008015 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308016 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008017
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008019 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008021 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008022 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 /* Copy the Probe Response template to local buffer */
8024 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008025 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 pSendProbeRspParams->pProbeRespTemplate,
8027 pSendProbeRspParams->probeRespTemplateLen);
8028 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008029 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8031 WDI_PROBE_REQ_BITMAP_IE_LEN);
8032
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008033 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008034
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008035 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 if(IS_WDI_STATUS_FAILURE(status))
8038 {
8039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8040 "Failure in SEND Probe RSP Params WDI API" );
8041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008043 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008045}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008046#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008047/*
8048 * FUNCTION: WDA_SetMaxTxPowerCallBack
8049 * send the response to PE with power value received from WDI
8050 */
8051void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8052 void* pUserData)
8053{
8054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8055 tWDA_CbContext *pWDA = NULL;
8056 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8057
8058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008059 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 if(NULL == pWdaParams)
8061 {
8062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 VOS_ASSERT(0) ;
8065 return ;
8066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308068 if (NULL == pWDA)
8069 {
8070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8071 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8073 vos_mem_free(pWdaParams->wdaMsgParam);
8074 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308075 VOS_ASSERT(0);
8076 return ;
8077 }
8078
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 if( NULL == pMaxTxPowerParams )
8081 {
8082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008083 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008084 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8086 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 return ;
8088 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008089
Jeff Johnson295189b2012-06-20 16:38:30 -07008090
8091 /*need to free memory for the pointers used in the
8092 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8094 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008096
Jeff Johnson295189b2012-06-20 16:38:30 -07008097
8098 /* send response to UMAC*/
8099 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8100
8101 return;
8102}
Jeff Johnson295189b2012-06-20 16:38:30 -07008103/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008104 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008105 * Request to WDI to send set Max Tx Power Request
8106 */
8107 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8108 tMaxTxPowerParams *MaxTxPowerParams)
8109{
8110 WDI_Status status = WDI_STATUS_SUCCESS;
8111 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8112 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008113
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008115 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008116
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8118 sizeof(WDI_SetMaxTxPowerParamsType));
8119 if(NULL == wdiSetMaxTxPowerParams)
8120 {
8121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 VOS_ASSERT(0);
8124 return VOS_STATUS_E_NOMEM;
8125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8127 if(NULL == pWdaParams)
8128 {
8129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008130 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008131 vos_mem_free(wdiSetMaxTxPowerParams);
8132 VOS_ASSERT(0);
8133 return VOS_STATUS_E_NOMEM;
8134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008135 /* Copy.Max.Tx.Power Params to WDI structure */
8136 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8137 MaxTxPowerParams->bssId,
8138 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8140 MaxTxPowerParams->selfStaMacAddr,
8141 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8143 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 pWdaParams->pWdaContext = pWDA;
8146 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 /* store Params pass it to WDI */
8148 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8150 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 if(IS_WDI_STATUS_FAILURE(status))
8152 {
8153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8154 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8156 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008157 /* send response to UMAC*/
8158 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008159 }
8160 return CONVERT_WDI2VOS_STATUS(status);
8161
8162}
Jeff Johnson295189b2012-06-20 16:38:30 -07008163#endif
schang86c22c42013-03-13 18:41:24 -07008164
8165/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008166 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8167 * send the response to PE with power value received from WDI
8168 */
8169void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8170 *pwdiSetMaxTxPowerPerBandRsp,
8171 void* pUserData)
8172{
8173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8174 tWDA_CbContext *pWDA = NULL;
8175 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8176
8177 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8178 "<------ %s ", __func__);
8179 if (NULL == pWdaParams)
8180 {
8181 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8182 "%s: pWdaParams received NULL", __func__);
8183 VOS_ASSERT(0);
8184 return ;
8185 }
8186 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308187 if (NULL == pWDA)
8188 {
8189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8190 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8192 vos_mem_free(pWdaParams->wdaMsgParam);
8193 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308194 VOS_ASSERT(0);
8195 return ;
8196 }
8197
Arif Hussaina5ebce02013-08-09 15:09:58 -07008198 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8199 if ( NULL == pMxTxPwrPerBandParams )
8200 {
8201 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8202 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8203 VOS_ASSERT(0);
8204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8205 vos_mem_free(pWdaParams);
8206 return;
8207 }
8208
8209 /*need to free memory for the pointers used in the
8210 WDA Process.Set Max Tx Power Req function*/
8211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8212 vos_mem_free(pWdaParams);
8213 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8214
8215 /* send response to UMAC*/
8216 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8217 pMxTxPwrPerBandParams, 0);
8218
8219 return;
8220}
8221
8222/*
8223 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8224 * Request to WDI to send set Max Tx Power Per band Request
8225 */
8226 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8227 tMaxTxPowerPerBandParams
8228 *MaxTxPowerPerBandParams)
8229{
8230 WDI_Status status = WDI_STATUS_SUCCESS;
8231 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8232 tWDA_ReqParams *pWdaParams = NULL;
8233
8234 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8235 "------> %s ", __func__);
8236
8237 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8238 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8239
8240 if (NULL == wdiSetMxTxPwrPerBandParams)
8241 {
8242 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8243 "%s: VOS MEM Alloc Failure", __func__);
8244 VOS_ASSERT(0);
8245 return VOS_STATUS_E_NOMEM;
8246 }
8247 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8248 if (NULL == pWdaParams)
8249 {
8250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8251 "%s: VOS MEM Alloc Failure", __func__);
8252 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8253 VOS_ASSERT(0);
8254 return VOS_STATUS_E_NOMEM;
8255 }
8256 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8257 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8258 MaxTxPowerPerBandParams->bandInfo;
8259 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8260 MaxTxPowerPerBandParams->power;
8261 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8262 pWdaParams->pWdaContext = pWDA;
8263 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8264 /* store Params pass it to WDI */
8265 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8266 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8267 WDA_SetMaxTxPowerPerBandCallBack,
8268 pWdaParams);
8269 if (IS_WDI_STATUS_FAILURE(status))
8270 {
8271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8272 "Failure in SET MAX TX Power REQ Params WDI API,"
8273 " free all the memory");
8274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8275 vos_mem_free(pWdaParams);
8276 /* send response to UMAC*/
8277 WDA_SendMsg(pWDA,
8278 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8279 MaxTxPowerPerBandParams, 0);
8280 }
8281 return CONVERT_WDI2VOS_STATUS(status);
8282}
8283
8284/*
schang86c22c42013-03-13 18:41:24 -07008285 * FUNCTION: WDA_SetTxPowerCallBack
8286 * send the response to PE with power value received from WDI
8287 */
8288void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8289 void* pUserData)
8290{
8291 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8292 tWDA_CbContext *pWDA = NULL;
8293 tSirSetTxPowerReq *pTxPowerParams = NULL;
8294
8295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8296 "<------ %s ", __func__);
8297 if(NULL == pWdaParams)
8298 {
8299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8300 "%s: pWdaParams received NULL", __func__);
8301 VOS_ASSERT(0) ;
8302 return ;
8303 }
8304 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308305 if (NULL == pWDA)
8306 {
8307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8308 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8310 vos_mem_free(pWdaParams->wdaMsgParam);
8311 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308312 VOS_ASSERT(0);
8313 return ;
8314 }
8315
schang86c22c42013-03-13 18:41:24 -07008316 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8317 if(NULL == pTxPowerParams)
8318 {
8319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8320 "%s: pTxPowerParams received NULL " ,__func__);
8321 VOS_ASSERT(0);
8322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8323 vos_mem_free(pWdaParams);
8324 return ;
8325 }
8326
8327 /*need to free memory for the pointers used in the
8328 WDA Process.Set Max Tx Power Req function*/
8329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8330 vos_mem_free(pWdaParams);
8331
8332 /* send response to UMAC*/
8333 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8334 return;
8335}
8336
8337/*
8338 * FUNCTION: WDA_ProcessSetTxPowerReq
8339 * Request to WDI to send set Tx Power Request
8340 */
8341 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8342 tSirSetTxPowerReq *txPowerParams)
8343{
8344 WDI_Status status = WDI_STATUS_SUCCESS;
8345 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8346 tWDA_ReqParams *pWdaParams = NULL;
8347
8348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8349 "------> %s ", __func__);
8350
8351 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8352 sizeof(WDI_SetTxPowerParamsType));
8353 if(NULL == wdiSetTxPowerParams)
8354 {
8355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8356 "%s: VOS MEM Alloc Failure", __func__);
8357 VOS_ASSERT(0);
8358 return VOS_STATUS_E_NOMEM;
8359 }
8360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8361 if(NULL == pWdaParams)
8362 {
8363 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8364 "%s: VOS MEM Alloc Failure", __func__);
8365 vos_mem_free(wdiSetTxPowerParams);
8366 VOS_ASSERT(0);
8367 return VOS_STATUS_E_NOMEM;
8368 }
8369 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8370 txPowerParams->bssIdx;
8371 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8372 txPowerParams->mwPower;
8373 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8374 pWdaParams->pWdaContext = pWDA;
8375 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8376 /* store Params pass it to WDI */
8377 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8378 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8379 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8380 if(IS_WDI_STATUS_FAILURE(status))
8381 {
8382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8383 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8385 vos_mem_free(pWdaParams);
8386 /* send response to UMAC*/
8387 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8388 }
8389 return CONVERT_WDI2VOS_STATUS(status);
8390}
8391
Jeff Johnson295189b2012-06-20 16:38:30 -07008392/*
8393 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8394 * Free the memory. No need to send any response to PE in this case
8395 */
8396void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8397{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8399
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008401 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008402
8403 if(NULL == pWdaParams)
8404 {
8405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008406 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008407 VOS_ASSERT(0) ;
8408 return ;
8409 }
8410
8411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8412 vos_mem_free(pWdaParams->wdaMsgParam) ;
8413 vos_mem_free(pWdaParams);
8414
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 /*
8416 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8417 * so just free the request param here
8418 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 return ;
8420}
8421
Jeff Johnson295189b2012-06-20 16:38:30 -07008422/*
8423 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8424 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8425 */
8426VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8427 tP2pPsParams *pP2pPsConfigParams)
8428{
8429 WDI_Status status = WDI_STATUS_SUCCESS ;
8430 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8431 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8432 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008433 tWDA_ReqParams *pWdaParams = NULL;
8434
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 if(NULL == wdiSetP2PGONOAReqParam)
8438 {
8439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008440 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308441 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008442 VOS_ASSERT(0);
8443 return VOS_STATUS_E_NOMEM;
8444 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008445
8446 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8447 if(NULL == pWdaParams)
8448 {
8449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008450 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008451 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008452 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008453 VOS_ASSERT(0);
8454 return VOS_STATUS_E_NOMEM;
8455 }
8456
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8458 pP2pPsConfigParams->opp_ps;
8459 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8460 pP2pPsConfigParams->ctWindow;
8461 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8462 pP2pPsConfigParams->count;
8463 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8464 pP2pPsConfigParams->duration;
8465 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8466 pP2pPsConfigParams->interval;
8467 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8468 pP2pPsConfigParams->single_noa_duration;
8469 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8470 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008471
Jeff Johnson295189b2012-06-20 16:38:30 -07008472 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8473 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008474 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8475
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008477 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8478 pWdaParams->pWdaContext = pWDA;
8479
Jeff Johnson295189b2012-06-20 16:38:30 -07008480 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008481 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8482
Jeff Johnson295189b2012-06-20 16:38:30 -07008483 if(IS_WDI_STATUS_FAILURE(status))
8484 {
8485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8486 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8488 vos_mem_free(pWdaParams->wdaMsgParam);
8489 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 return CONVERT_WDI2VOS_STATUS(status);
8492
Jeff Johnson295189b2012-06-20 16:38:30 -07008493}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308494
8495#ifdef FEATURE_WLAN_TDLS
8496/*
8497 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8498 * Free the memory. No need to send any response to PE in this case
8499 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308500void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8501 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308502{
8503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8504 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308505 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308506
8507
8508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8509 "<------ %s " ,__func__);
8510 if(NULL == pWdaParams)
8511 {
8512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8513 "%s: pWdaParams received NULL", __func__);
8514 VOS_ASSERT(0) ;
8515 return ;
8516 }
8517 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8518
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308519 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308520 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8522 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8524 vos_mem_free(pWdaParams->wdaMsgParam);
8525 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308526 VOS_ASSERT(0);
8527 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308528 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308529
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308530 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8531 if( NULL == pTdlsLinkEstablishParams )
8532 {
8533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8534 "%s: pTdlsLinkEstablishParams "
8535 "received NULL " ,__func__);
8536 VOS_ASSERT(0);
8537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8538 vos_mem_free(pWdaParams);
8539 return ;
8540 }
8541 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8542 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308544 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308545 /* send response to UMAC*/
8546 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8547
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308548 return ;
8549}
8550
8551VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8552 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8553{
8554 WDI_Status status = WDI_STATUS_SUCCESS ;
8555 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8556 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8557 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8558 tWDA_ReqParams *pWdaParams = NULL;
8559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8560 "------> %s " ,__func__);
8561 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8562 {
8563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8564 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308565 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308566 VOS_ASSERT(0);
8567 return VOS_STATUS_E_NOMEM;
8568 }
8569 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8570 if(NULL == pWdaParams)
8571 {
8572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8573 "%s: VOS MEM Alloc Failure", __func__);
8574 vos_mem_free(pTdlsLinkEstablishParams);
8575 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8576 VOS_ASSERT(0);
8577 return VOS_STATUS_E_NOMEM;
8578 }
8579 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308580 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308581 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308582 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308583 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308584 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308585 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308586 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308587 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308588 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308589 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8590 pTdlsLinkEstablishParams->isOffChannelSupported;
8591
8592 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8593 pTdlsLinkEstablishParams->validChannels,
8594 pTdlsLinkEstablishParams->validChannelsLen);
8595
8596 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8597 pTdlsLinkEstablishParams->validChannelsLen;
8598
8599 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8600 pTdlsLinkEstablishParams->validOperClasses,
8601 pTdlsLinkEstablishParams->validOperClassesLen);
8602 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8603 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308604
8605 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8606 /* Store msg pointer from PE, as this will be used for response */
8607 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8608 /* store Params pass it to WDI */
8609 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8610 pWdaParams->pWdaContext = pWDA;
8611
8612 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8613 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8614 WDA_SetTDLSLinkEstablishReqParamsCallback,
8615 pWdaParams);
8616 if(IS_WDI_STATUS_FAILURE(status))
8617 {
8618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8619 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8621 vos_mem_free(pWdaParams->wdaMsgParam);
8622 vos_mem_free(pWdaParams);
8623 }
8624 return CONVERT_WDI2VOS_STATUS(status);
8625}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308626
8627// tdlsoffchan
8628void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8629 void* pUserData)
8630{
8631 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8632 tWDA_CbContext *pWDA = NULL;
8633 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8634
8635
8636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8637 "<------ %s " ,__func__);
8638 if(NULL == pWdaParams)
8639 {
8640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8641 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308642 VOS_ASSERT(0) ;
8643 return ;
8644 }
8645 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8646
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308647 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308648 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8650 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8652 vos_mem_free(pWdaParams->wdaMsgParam);
8653 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308654 VOS_ASSERT(0);
8655 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308656 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308657
Atul Mittalc0f739f2014-07-31 13:47:47 +05308658 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308659 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308660 {
8661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8662 "%s: pTdlsChanSwitchParams "
8663 "received NULL " ,__func__);
8664 VOS_ASSERT(0);
8665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8666 vos_mem_free(pWdaParams);
8667 return ;
8668 }
8669 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8670 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8672 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308673 /* send response to UMAC*/
8674 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308675
8676 return ;
8677}
8678VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8679 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8680{
8681 WDI_Status status = WDI_STATUS_SUCCESS ;
8682 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8683 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8684 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8685 tWDA_ReqParams *pWdaParams = NULL;
8686
8687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8688 "Enter: %s ",__func__);
8689 if(NULL == wdiSetTDLSChanSwitchReqParam)
8690 {
8691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8692 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308693 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308694 VOS_ASSERT(0);
8695 return VOS_STATUS_E_NOMEM;
8696 }
8697
8698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8699 if(NULL == pWdaParams)
8700 {
8701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8702 "%s: VOS MEM Alloc Failure", __func__);
8703 vos_mem_free(pTdlsChanSwitchParams);
8704 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8705 VOS_ASSERT(0);
8706 return VOS_STATUS_E_NOMEM;
8707 }
8708 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8709 pTdlsChanSwitchParams->staIdx;
8710 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8711 pTdlsChanSwitchParams->tdlsSwMode;
8712 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8713 pTdlsChanSwitchParams->operClass;
8714 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8715 pTdlsChanSwitchParams->tdlsOffCh;
8716 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8717 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8718
8719
8720 /* Store msg pointer from PE, as this will be used for response */
8721 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8722 /* store Params pass it to WDI */
8723 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8724 pWdaParams->pWdaContext = pWDA;
8725 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8726 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8727 WDA_SetTDLSChanSwitchReqParamsCallback,
8728 pWdaParams);
8729 if(IS_WDI_STATUS_FAILURE(status))
8730 {
8731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8732 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8734 vos_mem_free(pWdaParams->wdaMsgParam);
8735 vos_mem_free(pWdaParams);
8736 }
8737 return CONVERT_WDI2VOS_STATUS(status);
8738}
8739#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308740
8741
Jeff Johnson295189b2012-06-20 16:38:30 -07008742#ifdef WLAN_FEATURE_VOWIFI_11R
8743/*
8744 * FUNCTION: WDA_AggrAddTSReqCallback
8745 * send ADD AGGREGATED TS RSP back to PE
8746 */
8747void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8748{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308750 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008751 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008752 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008754 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008755 if(NULL == pWdaParams)
8756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008759 VOS_ASSERT(0) ;
8760 return ;
8761 }
8762
8763 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308764 if (NULL == pWDA)
8765 {
8766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8767 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8769 vos_mem_free(pWdaParams->wdaMsgParam);
8770 vos_mem_free(pWdaParams);
8771
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308772 VOS_ASSERT(0);
8773 return ;
8774 }
8775
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008776 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777
8778 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8779 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008780 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008783
8784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8785 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008786 return ;
8787}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008788/*
8789 * FUNCTION: WDA_ProcessAddTSReq
8790 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8791 */
8792VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8793 tAggrAddTsParams *pAggrAddTsReqParams)
8794{
8795 WDI_Status status = WDI_STATUS_SUCCESS ;
8796 int i;
8797 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008798 tWDA_ReqParams *pWdaParams = NULL;
8799
8800
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008802 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8804 sizeof(WDI_AggrAddTSReqParamsType)) ;
8805 if(NULL == wdiAggrAddTSReqParam)
8806 {
8807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008808 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308809 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 VOS_ASSERT(0);
8811 return VOS_STATUS_E_NOMEM;
8812 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008813
8814
8815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8816 if(NULL == pWdaParams)
8817 {
8818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008819 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008820 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008821 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008822 VOS_ASSERT(0);
8823 return VOS_STATUS_E_NOMEM;
8824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8826 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8827 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8829 {
8830 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8831 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8832 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8834 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8835 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8836 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8837 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8838 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8839 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8840 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8841 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8842 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8843 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8844 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8845 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8846 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8847 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8848 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8850 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8852 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8853 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8854 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8855 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8856 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8857 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8858 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8859 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8860 pAggrAddTsReqParams->tspec[i].inactInterval;
8861 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8862 pAggrAddTsReqParams->tspec[i].suspendInterval;
8863 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8864 pAggrAddTsReqParams->tspec[i].svcStartTime;
8865 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8866 pAggrAddTsReqParams->tspec[i].minDataRate;
8867 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8868 pAggrAddTsReqParams->tspec[i].meanDataRate;
8869 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8870 pAggrAddTsReqParams->tspec[i].peakDataRate;
8871 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8872 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8873 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8874 pAggrAddTsReqParams->tspec[i].delayBound;
8875 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8876 pAggrAddTsReqParams->tspec[i].minPhyRate;
8877 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8878 pAggrAddTsReqParams->tspec[i].surplusBw;
8879 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8880 pAggrAddTsReqParams->tspec[i].mediumTime;
8881 }
8882
8883 /* TODO: tAggrAddTsParams doesn't have the following fields */
8884#if 0
8885 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8886 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8887 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8888 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8889#endif
8890 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8891
8892 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008893 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008895 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8896
8897 pWdaParams->pWdaContext = pWDA;
8898
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008900 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8901
Jeff Johnson295189b2012-06-20 16:38:30 -07008902 if(IS_WDI_STATUS_FAILURE(status))
8903 {
8904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8905 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008906
8907 /* send the failure response back to PE*/
8908 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8909 {
8910 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8911 }
8912
8913 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8914 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05308915
8916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8917 vos_mem_free(pWdaParams);
8918
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 return CONVERT_WDI2VOS_STATUS(status) ;
8921}
8922#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008923/*
Mihir Shetea4306052014-03-25 00:02:54 +05308924 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 * send Enter IMPS RSP back to PE
8926 */
Mihir Shetea4306052014-03-25 00:02:54 +05308927void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008928{
Mihir Shetea4306052014-03-25 00:02:54 +05308929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308930 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308931
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308933 "<------ %s status=%d" ,__func__,status);
8934 if(NULL == pWdaParams)
8935 {
8936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8937 "%s: pWdaParams received NULL", __func__);
8938 VOS_ASSERT(0);
8939 return;
8940 }
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 }
Mihir Shetea4306052014-03-25 00:02:54 +05308953
8954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8955 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308956 if (WDI_STATUS_SUCCESS != status)
8957 {
8958 pWDA->failureCounts.enterImpsFailureCount++;
8959 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8960 pWDA->failureCounts.enterImpsFailureCount)
8961 {
8962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8963 "%s: Status %d fail count %d", __func__, status,
8964 pWDA->failureCounts.enterImpsFailureCount);
8965 pWDA->failureCounts.enterImpsFailureCount = 0;
8966 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8967 WLAN_LOG_INDICATOR_HOST_DRIVER,
8968 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8969 FALSE, TRUE);
8970 }
8971 }
8972 else
8973 {
8974 pWDA->failureCounts.enterImpsFailureCount = 0;
8975 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008976 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 return ;
8978}
Mihir Shetea4306052014-03-25 00:02:54 +05308979
8980
8981/*
8982 * FUNCTION: WDA_EnterImpsReqCallback
8983 * Free memory and send Enter IMPS RSP back to PE.
8984 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8985 */
8986void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8987{
8988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308989 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308990
8991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8992 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8993
8994 if(NULL == pWdaParams)
8995 {
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8997 "%s: pWdaParams received NULL", __func__);
8998 VOS_ASSERT(0);
8999 return;
9000 }
9001
9002 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309003 if (NULL == pWDA)
9004 {
9005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9006 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9008 vos_mem_free(pWdaParams->wdaMsgParam);
9009 vos_mem_free(pWdaParams);
9010
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309011 VOS_ASSERT(0);
9012 return ;
9013 }
9014
Mihir Shetea4306052014-03-25 00:02:54 +05309015
9016 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9017 {
9018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9019 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309020 pWDA->failureCounts.enterImpsFailureCount++;
9021 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9022 pWDA->failureCounts.enterImpsFailureCount)
9023 {
9024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9025 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9026 pWDA->failureCounts.enterImpsFailureCount);
9027 pWDA->failureCounts.enterImpsFailureCount = 0;
9028 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9029 WLAN_LOG_INDICATOR_HOST_DRIVER,
9030 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9031 FALSE, TRUE);
9032 }
Mihir Shetea4306052014-03-25 00:02:54 +05309033 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9034 CONVERT_WDI2SIR_STATUS(wdiStatus));
9035 }
9036
9037 return;
9038}
Jeff Johnson295189b2012-06-20 16:38:30 -07009039/*
9040 * FUNCTION: WDA_ProcessEnterImpsReq
9041 * Request to WDI to Enter IMPS power state.
9042 */
9043VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9044{
9045 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309046 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9047 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309048 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009050 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309051
9052
9053 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9054 if (NULL == wdiEnterImpsReqParams)
9055 {
9056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9057 "%s: VOS MEM Alloc Failure", __func__);
9058 VOS_ASSERT(0);
9059 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9060 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9061 return VOS_STATUS_E_NOMEM;
9062 }
9063
9064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9065 if (NULL == pWdaParams)
9066 {
9067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9068 "%s: VOS MEM Alloc Failure", __func__);
9069 VOS_ASSERT(0);
9070 vos_mem_free(wdiEnterImpsReqParams);
9071 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9072 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9073 return VOS_STATUS_E_NOMEM;
9074 }
9075
9076 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9077 wdiEnterImpsReqParams->pUserData = pWdaParams;
9078
9079 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9080 pWdaParams->wdaMsgParam = NULL;
9081 pWdaParams->pWdaContext = pWDA;
9082
9083 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9084 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9085 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 if(IS_WDI_STATUS_FAILURE(status))
9087 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309088 if (! (failcnt & 0xF))
9089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9090 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9091 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309092 vos_mem_free(wdiEnterImpsReqParams);
9093 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009094 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 return CONVERT_WDI2VOS_STATUS(status) ;
9097}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309098
9099/*
9100 * FUNCTION: WDA_ExitImpsRespCallback
9101 * send Exit IMPS RSP back to PE
9102 */
9103void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9104{
9105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9106 tWDA_CbContext *pWDA;
9107
9108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9109 "<------ %s " ,__func__);
9110
9111 if (NULL == pWdaParams)
9112 {
9113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9114 "%s: pWdaParams received NULL", __func__);
9115 VOS_ASSERT(0);
9116 return;
9117 }
9118 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9119
9120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9121 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309122 if (WDI_STATUS_SUCCESS != status)
9123 {
9124 pWDA->failureCounts.exitImpsFailureCount++;
9125 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9126 pWDA->failureCounts.exitImpsFailureCount)
9127 {
9128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9129 "%s: Status %d fail count %d", __func__,
9130 status,
9131 pWDA->failureCounts.exitImpsFailureCount);
9132 pWDA->failureCounts.exitImpsFailureCount = 0;
9133 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9134 WLAN_LOG_INDICATOR_HOST_DRIVER,
9135 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9136 FALSE, TRUE);
9137 }
9138 }
9139 else
9140 {
9141 pWDA->failureCounts.exitImpsFailureCount = 0;
9142 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309143
9144 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9145 return;
9146}
9147
Jeff Johnson295189b2012-06-20 16:38:30 -07009148/*
9149 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 */
9151void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9152{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309154 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009156 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309157 if(NULL == pWdaParams)
9158 {
9159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9160 "%s: pWdaParams received NULL", __func__);
9161 VOS_ASSERT(0);
9162 return;
9163 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309164 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309165 if (IS_WDI_STATUS_FAILURE(status))
9166 {
9167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9168 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309169
9170 pWDA->failureCounts.exitImpsFailureCount++;
9171 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9172 pWDA->failureCounts.exitImpsFailureCount)
9173 {
9174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9175 "%s: wdiStatus %d fail count %d", __func__,
9176 status,
9177 pWDA->failureCounts.exitImpsFailureCount);
9178 pWDA->failureCounts.exitImpsFailureCount = 0;
9179 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9180 WLAN_LOG_INDICATOR_HOST_DRIVER,
9181 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9182 FALSE, TRUE);
9183 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309184 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9185 {
9186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9187 FL("reload wlan driver"));
9188 wpalWlanReload();
9189 }
9190 }
9191 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009192}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309193
Jeff Johnson295189b2012-06-20 16:38:30 -07009194/*
9195 * FUNCTION: WDA_ProcessExitImpsReq
9196 * Request to WDI to Exit IMPS power state.
9197 */
9198VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9199{
9200 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309201 tWDA_ReqParams *pWdaParams;
9202 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9203
Jeff Johnson295189b2012-06-20 16:38:30 -07009204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009205 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309206 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9207 sizeof(WDI_ExitImpsReqParamsType));
9208 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009209 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9211 "%s: VOS MEM Alloc Failure", __func__);
9212 VOS_ASSERT(0);
9213 return VOS_STATUS_E_NOMEM;
9214 }
9215 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9216 if(NULL == pWdaParams)
9217 {
9218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9219 "%s: VOS MEM Alloc Failure", __func__);
9220 VOS_ASSERT(0);
9221 vos_mem_free(wdiExitImpsReqParams);
9222 return VOS_STATUS_E_NOMEM;
9223 }
9224 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9225 wdiExitImpsReqParams->pUserData = pWdaParams;
9226
9227 /* Store param pointer as passed in by caller */
9228 /* store Params pass it to WDI */
9229 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9230 pWdaParams->pWdaContext = pWDA;
9231 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9232 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9233 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9234 pWdaParams);
9235 if (IS_WDI_STATUS_FAILURE(status))
9236 {
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9238 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9240 vos_mem_free(pWdaParams);
9241 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 return CONVERT_WDI2VOS_STATUS(status) ;
9244}
Jeff Johnson295189b2012-06-20 16:38:30 -07009245/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009246 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 * send Enter BMPS RSP back to PE
9248 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009249void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009250{
9251 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309252 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009253 tEnterBmpsParams *pEnterBmpsRspParams;
9254
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009256 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 if(NULL == pWdaParams)
9258 {
9259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009260 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 VOS_ASSERT(0) ;
9262 return ;
9263 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009264
9265 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309266 if (NULL == pWDA)
9267 {
9268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9269 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309270
9271 if(pWdaParams->wdaWdiApiMsgParam)
9272 {
9273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9274 }
9275 vos_mem_free(pWdaParams);
9276
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309277 VOS_ASSERT(0);
9278 return ;
9279 }
9280
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009281 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9282
9283 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009284 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009285
9286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309288 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9289 {
9290 pWDA->failureCounts.enterBmpsFailureCount++;
9291 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9292 pWDA->failureCounts.enterBmpsFailureCount)
9293 {
9294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9295 "%s: wdiStatus %d fail count %d", __func__,
9296 pwdiEnterBmpsRsp->wdiStatus,
9297 pWDA->failureCounts.enterBmpsFailureCount);
9298 pWDA->failureCounts.enterBmpsFailureCount = 0;
9299 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9300 WLAN_LOG_INDICATOR_HOST_DRIVER,
9301 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9302 FALSE, TRUE);
9303 }
9304 }
9305 else
9306 {
9307 pWDA->failureCounts.enterBmpsFailureCount = 0;
9308 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009309 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9310
Jeff Johnson295189b2012-06-20 16:38:30 -07009311 return ;
9312}
Jeff Johnson295189b2012-06-20 16:38:30 -07009313/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009314 * FUNCTION: WDA_EnterBmpsReqCallback
9315 * Free memory and send Enter BMPS RSP back to PE.
9316 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9317 */
9318void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9319{
9320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309321 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009322 tEnterBmpsParams *pEnterBmpsRspParams;
9323
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9325 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9326
9327 if(NULL == pWdaParams)
9328 {
9329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9330 "%s: pWdaParams received NULL", __func__);
9331 VOS_ASSERT(0);
9332 return;
9333 }
9334
9335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309336 if (NULL == pWDA)
9337 {
9338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9339 "%s:pWDA is NULL", __func__);
9340 VOS_ASSERT(0);
9341 return ;
9342 }
9343
Yue Ma7f44bbe2013-04-12 11:47:39 -07009344 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9345 pEnterBmpsRspParams->status = wdiStatus;
9346
9347 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9348 {
9349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9350 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309351 pWDA->failureCounts.enterBmpsFailureCount++;
9352 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9353 pWDA->failureCounts.enterBmpsFailureCount)
9354 {
9355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9356 "%s: wdiStatus %d fail count %d", __func__,
9357 wdiStatus,
9358 pWDA->failureCounts.enterBmpsFailureCount);
9359 pWDA->failureCounts.enterBmpsFailureCount = 0;
9360 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9361 WLAN_LOG_INDICATOR_HOST_DRIVER,
9362 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9363 FALSE, TRUE);
9364 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009365 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9366 }
9367
9368 return;
9369}
9370/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 * FUNCTION: WDA_ProcessEnterBmpsReq
9372 * Request to WDI to Enter BMPS power state.
9373 */
9374VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9375 tEnterBmpsParams *pEnterBmpsReqParams)
9376{
9377 WDI_Status status = WDI_STATUS_SUCCESS;
9378 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9379 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009381 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9383 {
9384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009385 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 VOS_ASSERT(0);
9387 return VOS_STATUS_E_FAILURE;
9388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9390 if (NULL == wdiEnterBmpsReqParams)
9391 {
9392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009395 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9396 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009397 return VOS_STATUS_E_NOMEM;
9398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9400 if (NULL == pWdaParams)
9401 {
9402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 VOS_ASSERT(0);
9405 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009406 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9407 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 return VOS_STATUS_E_NOMEM;
9409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9411 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9412 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9413 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009414 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9416 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9417 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009418 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9419 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009420
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 /* Store param pointer as passed in by caller */
9422 /* store Params pass it to WDI */
9423 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009424 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009427 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 if (IS_WDI_STATUS_FAILURE(status))
9429 {
9430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9431 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009433 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009435 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009437 return CONVERT_WDI2VOS_STATUS(status);
9438}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009439
9440
9441static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9442 WDI_Status wdiStatus,
9443 tExitBmpsParams *pExitBmpsReqParams)
9444{
9445 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9446
9447 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9448}
9449
9450
Jeff Johnson295189b2012-06-20 16:38:30 -07009451/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009452 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 * send Exit BMPS RSP back to PE
9454 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009455void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009456{
9457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309458 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009459 tExitBmpsParams *pExitBmpsRspParams;
9460
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009462 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 if(NULL == pWdaParams)
9464 {
9465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009466 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 VOS_ASSERT(0) ;
9468 return ;
9469 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009470
9471 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309472 if (NULL == pWDA)
9473 {
9474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9475 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309476
9477 if(pWdaParams->wdaWdiApiMsgParam)
9478 {
9479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9480 }
9481 vos_mem_free(pWdaParams);
9482
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309483 VOS_ASSERT(0);
9484 return ;
9485 }
9486
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009487 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9488
9489 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009490 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009491
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309493 vos_mem_free(pWdaParams);
9494
9495 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9496 {
9497 pWDA->failureCounts.exitBmpsFailureCount++;
9498 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9499 pWDA->failureCounts.exitBmpsFailureCount)
9500 {
9501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9502 "%s: Status %d fail count %d", __func__,
9503 pExitBmpsRspParams->status,
9504 pWDA->failureCounts.exitBmpsFailureCount);
9505 pWDA->failureCounts.exitBmpsFailureCount = 0;
9506 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9507 WLAN_LOG_INDICATOR_HOST_DRIVER,
9508 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9509 FALSE, TRUE);
9510 }
9511 }
9512 else
9513 {
9514 pWDA->failureCounts.exitBmpsFailureCount = 0;
9515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009516
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009517 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 return ;
9519}
Jeff Johnson295189b2012-06-20 16:38:30 -07009520/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009521 * FUNCTION: WDA_ExitBmpsReqCallback
9522 * Free memory and send Exit BMPS RSP back to PE.
9523 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9524 */
9525void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9526{
9527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309528 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009529 tExitBmpsParams *pExitBmpsRspParams;
9530
9531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9532 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9533
9534 if(NULL == pWdaParams)
9535 {
9536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9537 "%s: pWdaParams received NULL", __func__);
9538 VOS_ASSERT(0);
9539 return;
9540 }
9541
9542 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309543 if (NULL == pWDA)
9544 {
9545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9546 "%s:pWDA is NULL", __func__);
9547 VOS_ASSERT(0);
9548 return ;
9549 }
9550
Yue Ma7f44bbe2013-04-12 11:47:39 -07009551 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9552 pExitBmpsRspParams->status = wdiStatus;
9553
9554 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9555 {
9556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9557 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309558 pWDA->failureCounts.exitBmpsFailureCount++;
9559 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9560 pWDA->failureCounts.exitBmpsFailureCount)
9561 {
9562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9563 "%s: wdiStatus %d fail count %d", __func__,
9564 wdiStatus,
9565 pWDA->failureCounts.exitBmpsFailureCount);
9566 pWDA->failureCounts.exitBmpsFailureCount = 0;
9567 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9568 WLAN_LOG_INDICATOR_HOST_DRIVER,
9569 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9570 FALSE, TRUE);
9571 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009572 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9573 }
9574
9575 return;
9576}
9577/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 * FUNCTION: WDA_ProcessExitBmpsReq
9579 * Request to WDI to Exit BMPS power state.
9580 */
9581VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9582 tExitBmpsParams *pExitBmpsReqParams)
9583{
9584 WDI_Status status = WDI_STATUS_SUCCESS ;
9585 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9586 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9587 sizeof(WDI_ExitBmpsReqParamsType)) ;
9588 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009590 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 if(NULL == wdiExitBmpsReqParams)
9592 {
9593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009595 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009596 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009597 return VOS_STATUS_E_NOMEM;
9598 }
9599 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9600 if(NULL == pWdaParams)
9601 {
9602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009603 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 VOS_ASSERT(0);
9605 vos_mem_free(wdiExitBmpsReqParams);
9606 return VOS_STATUS_E_NOMEM;
9607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009609
9610 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9611
Yue Ma7f44bbe2013-04-12 11:47:39 -07009612 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9613 wdiExitBmpsReqParams->pUserData = pWdaParams;
9614
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 /* Store param pointer as passed in by caller */
9616 /* store Params pass it to WDI */
9617 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9618 pWdaParams->pWdaContext = pWDA;
9619 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009621 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 if(IS_WDI_STATUS_FAILURE(status))
9623 {
9624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9625 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9627 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009628 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 return CONVERT_WDI2VOS_STATUS(status) ;
9631}
Jeff Johnson295189b2012-06-20 16:38:30 -07009632/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009633 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 * send Enter UAPSD RSP back to PE
9635 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009636void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009637{
9638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309639 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009640 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009642 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 if(NULL == pWdaParams)
9644 {
9645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009646 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009647 VOS_ASSERT(0) ;
9648 return ;
9649 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009650
9651 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309652 if (NULL == pWDA)
9653 {
9654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9655 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309656
9657 if(pWdaParams->wdaWdiApiMsgParam)
9658 {
9659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9660 }
9661 vos_mem_free(pWdaParams);
9662
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309663 VOS_ASSERT(0);
9664 return ;
9665 }
9666
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009667 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9668
9669 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009670 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009671
Jeff Johnson295189b2012-06-20 16:38:30 -07009672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9673 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009674 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 return ;
9676}
Jeff Johnson295189b2012-06-20 16:38:30 -07009677/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009678 * FUNCTION: WDA_EnterUapsdReqCallback
9679 * Free memory and send Enter UAPSD RSP back to PE.
9680 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9681 */
9682void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9683{
9684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9685 tWDA_CbContext *pWDA;
9686 tUapsdParams *pEnterUapsdRsqParams;
9687
9688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9689 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9690
9691 if(NULL == pWdaParams)
9692 {
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9694 "%s: pWdaParams received NULL", __func__);
9695 VOS_ASSERT(0);
9696 return;
9697 }
9698
9699 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309700 if (NULL == pWDA)
9701 {
9702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9703 "%s:pWDA is NULL", __func__);
9704 VOS_ASSERT(0);
9705 return ;
9706 }
9707
Yue Ma7f44bbe2013-04-12 11:47:39 -07009708 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9709 pEnterUapsdRsqParams->status = wdiStatus;
9710
9711 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9712 {
9713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9714 vos_mem_free(pWdaParams);
9715 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9716 }
9717
9718 return;
9719}
9720/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 * FUNCTION: WDA_ProcessEnterUapsdReq
9722 * Request to WDI to Enter UAPSD power state.
9723 */
9724VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9725 tUapsdParams *pEnterUapsdReqParams)
9726{
9727 WDI_Status status = WDI_STATUS_SUCCESS ;
9728 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9729 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9730 sizeof(WDI_EnterUapsdReqParamsType)) ;
9731 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009733 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 if(NULL == wdiEnterUapsdReqParams)
9735 {
9736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 VOS_ASSERT(0);
9739 return VOS_STATUS_E_NOMEM;
9740 }
9741 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9742 if(NULL == pWdaParams)
9743 {
9744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009746 VOS_ASSERT(0);
9747 vos_mem_free(wdiEnterUapsdReqParams);
9748 return VOS_STATUS_E_NOMEM;
9749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009750 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9751 pEnterUapsdReqParams->beDeliveryEnabled;
9752 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9753 pEnterUapsdReqParams->beTriggerEnabled;
9754 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9755 pEnterUapsdReqParams->bkDeliveryEnabled;
9756 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9757 pEnterUapsdReqParams->bkTriggerEnabled;
9758 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9759 pEnterUapsdReqParams->viDeliveryEnabled;
9760 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9761 pEnterUapsdReqParams->viTriggerEnabled;
9762 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9763 pEnterUapsdReqParams->voDeliveryEnabled;
9764 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9765 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009766 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009767
Yue Ma7f44bbe2013-04-12 11:47:39 -07009768 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9769 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009770
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 /* Store param pointer as passed in by caller */
9772 /* store Params pass it to WDI */
9773 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9774 pWdaParams->pWdaContext = pWDA;
9775 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009776 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009777 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009778 if(IS_WDI_STATUS_FAILURE(status))
9779 {
9780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9781 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9782 vos_mem_free(pWdaParams->wdaMsgParam) ;
9783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9784 vos_mem_free(pWdaParams) ;
9785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009786 return CONVERT_WDI2VOS_STATUS(status) ;
9787}
Jeff Johnson295189b2012-06-20 16:38:30 -07009788/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009789 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009790 * send Exit UAPSD RSP back to PE
9791 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009792void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009793{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009794
9795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9796 tWDA_CbContext *pWDA;
9797 tExitUapsdParams *pExitUapsdRspParams;
9798
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009800 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009801 if(NULL == pWdaParams)
9802 {
9803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009804 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009805 VOS_ASSERT(0);
9806 return;
9807 }
9808
9809 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9810 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9811
9812 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009813 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009814
9815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9816 vos_mem_free(pWdaParams) ;
9817
9818 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009819 return ;
9820}
Jeff Johnson295189b2012-06-20 16:38:30 -07009821/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009822 * FUNCTION: WDA_ExitUapsdReqCallback
9823 * Free memory and send Exit UAPSD RSP back to PE.
9824 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9825 */
9826void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9827{
9828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309829 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009830 tExitUapsdParams *pExitUapsdRspParams;
9831
9832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9833 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9834
9835 if(NULL == pWdaParams)
9836 {
9837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9838 "%s: pWdaParams received NULL", __func__);
9839 VOS_ASSERT(0);
9840 return;
9841 }
9842
9843 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309844 if (NULL == pWDA)
9845 {
9846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9847 "%s:pWDA is NULL", __func__);
9848 VOS_ASSERT(0);
9849 return ;
9850 }
9851
Yue Ma7f44bbe2013-04-12 11:47:39 -07009852 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9853 pExitUapsdRspParams->status = wdiStatus;
9854
9855 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9856 {
9857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9858 vos_mem_free(pWdaParams);
9859 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9860 }
9861
9862 return;
9863}
9864/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009865 * FUNCTION: WDA_ProcessExitUapsdReq
9866 * Request to WDI to Exit UAPSD power state.
9867 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009868VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9869 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009870{
9871 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009872 tWDA_ReqParams *pWdaParams ;
9873 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9874 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9875 sizeof(WDI_ExitUapsdReqParamsType)) ;
9876
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009878 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009879
9880 if(NULL == wdiExitUapsdReqParams)
9881 {
9882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009883 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009884 VOS_ASSERT(0);
9885 return VOS_STATUS_E_NOMEM;
9886 }
9887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9888 if(NULL == pWdaParams)
9889 {
9890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009891 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009892 VOS_ASSERT(0);
9893 vos_mem_free(wdiExitUapsdReqParams);
9894 return VOS_STATUS_E_NOMEM;
9895 }
9896
9897 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009898 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9899 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009900
9901 /* Store param pointer as passed in by caller */
9902 /* store Params pass it to WDI */
9903 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9904 pWdaParams->pWdaContext = pWDA;
9905 pWdaParams->wdaMsgParam = pExitUapsdParams;
9906
Yue Ma7f44bbe2013-04-12 11:47:39 -07009907 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 if(IS_WDI_STATUS_FAILURE(status))
9909 {
9910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9911 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009912 vos_mem_free(pWdaParams->wdaMsgParam) ;
9913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9914 vos_mem_free(pWdaParams) ;
9915
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 return CONVERT_WDI2VOS_STATUS(status) ;
9918}
9919
Jeff Johnson295189b2012-06-20 16:38:30 -07009920/*
9921 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9922 *
9923 */
9924void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9925{
9926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009928 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 if(NULL == pWdaParams)
9930 {
9931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009932 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009933 VOS_ASSERT(0) ;
9934 return ;
9935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 if( pWdaParams != NULL )
9937 {
9938 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9939 {
9940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9941 }
9942 if( pWdaParams->wdaMsgParam != NULL )
9943 {
9944 vos_mem_free(pWdaParams->wdaMsgParam) ;
9945 }
9946 vos_mem_free(pWdaParams) ;
9947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 return ;
9949}
Jeff Johnson295189b2012-06-20 16:38:30 -07009950/*
9951 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9952 * Request to WDI to set the power save params at start.
9953 */
9954VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9955 tSirPowerSaveCfg *pPowerSaveCfg)
9956{
9957 WDI_Status status = WDI_STATUS_SUCCESS ;
9958 tHalCfg *tlvStruct = NULL ;
9959 tANI_U8 *tlvStructStart = NULL ;
9960 v_PVOID_t *configParam;
9961 tANI_U32 configParamSize;
9962 tANI_U32 *configDataValue;
9963 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9964 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009966 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9968 {
9969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009970 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009971 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009972 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 return VOS_STATUS_E_FAILURE;
9974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9976 if (NULL == wdiPowerSaveCfg)
9977 {
9978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009981 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 return VOS_STATUS_E_NOMEM;
9983 }
9984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9985 if(NULL == pWdaParams)
9986 {
9987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 VOS_ASSERT(0);
9990 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009991 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 return VOS_STATUS_E_NOMEM;
9993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9995 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 if(NULL == configParam)
9997 {
9998 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009999 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010000 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 vos_mem_free(pWdaParams);
10002 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010003 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 return VOS_STATUS_E_NOMEM;
10005 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 vos_mem_set(configParam, configParamSize, 0);
10007 wdiPowerSaveCfg->pConfigBuffer = configParam;
10008 tlvStruct = (tHalCfg *)configParam;
10009 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10011 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10012 tlvStruct->length = sizeof(tANI_U32);
10013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10014 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010015 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10016 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10018 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10019 tlvStruct->length = sizeof(tANI_U32);
10020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10021 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10023 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10025 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10026 tlvStruct->length = sizeof(tANI_U32);
10027 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10028 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010029 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10030 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010031 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10032 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10033 tlvStruct->length = sizeof(tANI_U32);
10034 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10035 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10037 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010038 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10039 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10040 tlvStruct->length = sizeof(tANI_U32);
10041 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10042 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10044 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10046 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10047 tlvStruct->length = sizeof(tANI_U32);
10048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10049 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010050 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10051 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10053 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10054 tlvStruct->length = sizeof(tANI_U32);
10055 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10056 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10058 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10060 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10061 tlvStruct->length = sizeof(tANI_U32);
10062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10063 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10064 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10065 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10067 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10068 tlvStruct->length = sizeof(tANI_U32);
10069 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10070 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10071 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10072 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10074 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10075 tlvStruct->length = sizeof(tANI_U32);
10076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10077 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10079 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010080 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10081 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10082 tlvStruct->length = sizeof(tANI_U32);
10083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10084 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010085 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10086 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010088 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 /* store Params pass it to WDI */
10090 pWdaParams->wdaMsgParam = configParam;
10091 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10092 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10094 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010095 if(IS_WDI_STATUS_FAILURE(status))
10096 {
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10098 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10099 vos_mem_free(pWdaParams->wdaMsgParam);
10100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10101 vos_mem_free(pWdaParams);
10102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 return CONVERT_WDI2VOS_STATUS(status);
10105}
Jeff Johnson295189b2012-06-20 16:38:30 -070010106/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010107 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 *
10109 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010110void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010111{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10113
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010115 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010116
10117 if(NULL == pWdaParams)
10118 {
10119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10120 "%s: pWdaParams received NULL", __func__);
10121 VOS_ASSERT(0);
10122 return ;
10123 }
10124
10125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 vos_mem_free(pWdaParams);
10127
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 return ;
10129}
Jeff Johnson295189b2012-06-20 16:38:30 -070010130/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010131 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10132 * Free memory.
10133 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10134 */
10135void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10136{
10137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10138
10139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10140 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10141
10142 if(NULL == pWdaParams)
10143 {
10144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10145 "%s: pWdaParams received NULL", __func__);
10146 VOS_ASSERT(0);
10147 return;
10148 }
10149
10150 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10151 {
10152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10153 vos_mem_free(pWdaParams);
10154 }
10155
10156 return;
10157}
10158/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010159 * FUNCTION: WDA_SetUapsdAcParamsReq
10160 * Request to WDI to set the UAPSD params for an ac (sta mode).
10161 */
10162VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10163 tUapsdInfo *pUapsdInfo)
10164{
10165 WDI_Status status = WDI_STATUS_SUCCESS;
10166 tWDA_CbContext *pWDA = NULL ;
10167 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10168 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10169 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10170 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010172 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 if(NULL == wdiUapsdParams)
10174 {
10175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010177 VOS_ASSERT(0);
10178 return VOS_STATUS_E_NOMEM;
10179 }
10180 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10181 if(NULL == pWdaParams)
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010185 VOS_ASSERT(0);
10186 vos_mem_free(wdiUapsdParams);
10187 return VOS_STATUS_E_NOMEM;
10188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010189 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10190 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10191 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10192 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10193 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10194 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010195 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10196 wdiUapsdParams->pUserData = pWdaParams;
10197
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 pWdaParams->pWdaContext = pWDA;
10200 /* Store param pointer as passed in by caller */
10201 pWdaParams->wdaMsgParam = pUapsdInfo;
10202 /* store Params pass it to WDI */
10203 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010205 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 if(IS_WDI_STATUS_FAILURE(status))
10208 {
10209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10210 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10212 vos_mem_free(pWdaParams);
10213 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10215 return VOS_STATUS_SUCCESS;
10216 else
10217 return VOS_STATUS_E_FAILURE;
10218
Jeff Johnson295189b2012-06-20 16:38:30 -070010219}
10220/*
10221 * FUNCTION: WDA_ClearUapsdAcParamsReq
10222 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10223 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10224 * and again enter the UPASD with the modified params. Hence the disable
10225 * function was kept empty.
10226 *
10227 */
10228VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10229{
10230 /* do nothing */
10231 return VOS_STATUS_SUCCESS;
10232}
Jeff Johnson295189b2012-06-20 16:38:30 -070010233/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010234 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 *
10236 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010237void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010238{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10240
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010242 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010243
10244 if(NULL == pWdaParams)
10245 {
10246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010247 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010248 VOS_ASSERT(0) ;
10249 return ;
10250 }
10251
10252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10253 vos_mem_free(pWdaParams->wdaMsgParam);
10254 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010255
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 //print a msg, nothing else to do
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010258 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 return ;
10260}
Jeff Johnson295189b2012-06-20 16:38:30 -070010261/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010262 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10263 * Free memory.
10264 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10265 */
10266void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10267{
10268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10269
10270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10271 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10272
10273 if(NULL == pWdaParams)
10274 {
10275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10276 "%s: pWdaParams received NULL", __func__);
10277 VOS_ASSERT(0);
10278 return;
10279 }
10280
10281 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10282 {
10283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10284 vos_mem_free(pWdaParams->wdaMsgParam);
10285 vos_mem_free(pWdaParams);
10286 }
10287
10288 return;
10289}
10290/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 * FUNCTION: WDA_UpdateUapsdParamsReq
10292 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10293 */
10294VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10295 tUpdateUapsdParams* pUpdateUapsdInfo)
10296{
10297 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010298 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10300 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10301 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010302 tWDA_ReqParams *pWdaParams = NULL;
10303
Jeff Johnson295189b2012-06-20 16:38:30 -070010304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 if(NULL == wdiUpdateUapsdParams)
10307 {
10308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 VOS_ASSERT(0);
10311 return VOS_STATUS_E_NOMEM;
10312 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10314 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10315 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010316 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10317 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010318
10319 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10320 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 {
10322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010324 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010325 vos_mem_free(pUpdateUapsdInfo);
10326 vos_mem_free(wdiUpdateUapsdParams);
10327 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010330 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010332 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10333 pWdaParams->pWdaContext = pWDA;
10334
Jeff Johnson43971f52012-07-17 12:26:56 -070010335 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010336 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010337 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010338
Jeff Johnson43971f52012-07-17 12:26:56 -070010339 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 {
10341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10342 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010343 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10345 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010346 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010348 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010349}
Jeff Johnson295189b2012-06-20 16:38:30 -070010350/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010351 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 *
10353 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010354void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010355{
10356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010358 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 if(WDI_STATUS_SUCCESS != wdiStatus)
10360 {
10361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010362 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010364 if(NULL == pWdaParams)
10365 {
10366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010367 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 VOS_ASSERT(0) ;
10369 return ;
10370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10372 vos_mem_free(pWdaParams->wdaMsgParam);
10373 vos_mem_free(pWdaParams);
10374 return ;
10375}
Jeff Johnson295189b2012-06-20 16:38:30 -070010376/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010377 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10378 * Free memory.
10379 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10380 */
10381void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10382{
10383 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10384
10385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10386 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10387
10388 if(NULL == pWdaParams)
10389 {
10390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10391 "%s: pWdaParams received NULL", __func__);
10392 VOS_ASSERT(0);
10393 return;
10394 }
10395
10396 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10397 {
10398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10399 vos_mem_free(pWdaParams->wdaMsgParam);
10400 vos_mem_free(pWdaParams);
10401 }
10402
10403 return;
10404}
10405/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10407 *
10408 */
10409VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10410 tSirWlanSetRxpFilters *pWlanSuspendParam)
10411{
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010413 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010414 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010416 /* Sanity Check
10417 * This is very unlikely and add assert to collect more info next time */
10418 if(NULL == pWlanSuspendParam)
10419 {
10420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10421 "%s: pWlanSuspendParam received NULL", __func__);
10422 VOS_ASSERT(0) ;
10423 return VOS_STATUS_E_FAULT;
10424 }
10425 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10426 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010428 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 if(NULL == wdiRxpFilterParams)
10430 {
10431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010433 VOS_ASSERT(0);
10434 vos_mem_free(pWlanSuspendParam);
10435 return VOS_STATUS_E_NOMEM;
10436 }
10437 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10438 if(NULL == pWdaParams)
10439 {
10440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 VOS_ASSERT(0);
10443 vos_mem_free(wdiRxpFilterParams);
10444 vos_mem_free(pWlanSuspendParam);
10445 return VOS_STATUS_E_NOMEM;
10446 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010447 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10448 pWlanSuspendParam->setMcstBcstFilter;
10449 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10450 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10451
Yue Ma7f44bbe2013-04-12 11:47:39 -070010452 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10453 wdiRxpFilterParams->pUserData = pWdaParams;
10454
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 pWdaParams->pWdaContext = pWDA;
10456 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10457 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010458 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010459 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010460 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010461 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010462 {
10463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10464 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010465 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10467 vos_mem_free(pWdaParams->wdaMsgParam);
10468 vos_mem_free(pWdaParams);
10469 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010470 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010471}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010472
10473/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010474 * FUNCTION: WDA_ProcessGetFrameLogReq
10475 * Request to WDI to get the Frame Log.
10476 */
10477VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10478 tAniGetFrameLogReq *pGetFrameLog)
10479{
10480 VOS_STATUS status = VOS_STATUS_SUCCESS;
10481 WDI_Status wstatus;
10482 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10483 tWDA_ReqParams *pWdaParams ;
10484
10485 /* Sanity Check*/
10486 if(NULL == pGetFrameLog)
10487 {
10488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010489 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010490 VOS_ASSERT(0) ;
10491 return VOS_STATUS_E_FAULT;
10492 }
10493
10494 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10495 sizeof(WDI_GetFrameLogReqInfoType));
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10497 "------> %s " ,__func__);
10498
10499 if(NULL == wdiGetFrameLogInfo)
10500 {
10501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10502 "%s: VOS MEM Alloc Failure", __func__);
10503 VOS_ASSERT(0);
10504 vos_mem_free(pGetFrameLog);
10505 return VOS_STATUS_E_NOMEM;
10506 }
10507
10508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10509 if(NULL == pWdaParams)
10510 {
10511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10512 "%s: VOS MEM Alloc Failure", __func__);
10513 VOS_ASSERT(0);
10514 vos_mem_free(wdiGetFrameLogInfo);
10515 vos_mem_free(pGetFrameLog);
10516 return VOS_STATUS_E_NOMEM;
10517 }
10518
10519 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10520
10521 pWdaParams->pWdaContext = pWDA;
10522 pWdaParams->wdaMsgParam = pGetFrameLog;
10523 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10524
10525 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10526 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10527 pWdaParams);
10528 if(IS_WDI_STATUS_FAILURE(wstatus))
10529 {
10530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10531 "Failure in get frame log REQ WDI API, free all the memory" );
10532 status = CONVERT_WDI2VOS_STATUS(wstatus);
10533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10534 vos_mem_free(pWdaParams->wdaMsgParam);
10535 vos_mem_free(pWdaParams);
10536 }
10537 return status;
10538}
10539
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010540
10541/*
10542 * FUNCTION: WDA_FatalEventLogsRspCallback
10543 * recieves Flush Logs response from FW
10544 */
10545
10546void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10547 void* pUserData)
10548{
10549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10550
10551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10552 "<------ %s,wdiStatus:%d " ,
10553 __func__, wdiRsp->wdiStatus);
10554 if(NULL == pWdaParams)
10555 {
10556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10557 "%s: pWdaParams received NULL", __func__);
10558 VOS_ASSERT(0);
10559 return ;
10560 }
10561
10562 if(NULL == pWdaParams->wdaMsgParam)
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10565 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10566 VOS_ASSERT(0);
10567 vos_mem_free(pWdaParams);
10568 return ;
10569 }
10570
10571 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10572 {
10573 /*
10574 * If it is failure, it means JOb is already posted by FW
10575 * for logging, so for failure scenario also we will get the
10576 * done indication
10577 */
10578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10579 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10580 __func__, wdiRsp->wdiStatus);
10581 }
10582
10583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10584 vos_mem_free(pWdaParams->wdaMsgParam);
10585 vos_mem_free(pWdaParams);
10586
10587 return;
10588
10589}
10590
10591/*
10592 * FUNCTION: WDA_ProcessFatalEventLogsReq
10593 * Request to WDI to send the fatal Event Logs Req.
10594 */
10595
10596VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10597 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10598{
10599 VOS_STATUS status = VOS_STATUS_SUCCESS;
10600 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10601 tWDA_ReqParams *pWdaParams ;
10602 WDI_Status wstatus;
10603
10604
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10606 "------> %s " ,__func__);
10607 if (NULL == pFatalEventLogsReqParam)
10608 {
10609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10610 "%s: pMgmtLoggingInitParam received NULL", __func__);
10611 VOS_ASSERT(0) ;
10612 return VOS_STATUS_E_FAULT;
10613 }
10614 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10615 sizeof(WDI_FatalEventLogsReqInfoType));
10616 if(NULL == wdiFatalEventLogsReqInfo)
10617 {
10618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10619 "%s: VOS MEM Alloc Failure", __func__);
10620 VOS_ASSERT(0);
10621 vos_mem_free(pFatalEventLogsReqParam);
10622 return VOS_STATUS_E_NOMEM;
10623 }
10624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10625 if(NULL == pWdaParams)
10626 {
10627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10628 "%s: VOS MEM Alloc Failure", __func__);
10629 VOS_ASSERT(0);
10630 vos_mem_free(wdiFatalEventLogsReqInfo);
10631 vos_mem_free(pFatalEventLogsReqParam);
10632 return VOS_STATUS_E_NOMEM;
10633 }
10634 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10635 pWdaParams->pWdaContext = pWDA;
10636 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10637 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10638
10639 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10640 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10641 pWdaParams);
10642 if(IS_WDI_STATUS_FAILURE(wstatus))
10643 {
10644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10645 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10646 status = CONVERT_WDI2VOS_STATUS(wstatus);
10647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10648 vos_mem_free(pWdaParams->wdaMsgParam);
10649 vos_mem_free(pWdaParams);
10650 }
10651
10652 return status;
10653
10654}
10655
Siddharth Bhal64246172015-02-27 01:04:37 +053010656/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010657 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010658 *
10659 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010660VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10661 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010662{
10663 VOS_STATUS status = VOS_STATUS_SUCCESS;
10664 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010665 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010666 tWDA_ReqParams *pWdaParams ;
10667
10668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10669 "------> %s " ,__func__);
10670
10671 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010672 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010673 {
10674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010675 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010676 VOS_ASSERT(0) ;
10677 return VOS_STATUS_E_FAULT;
10678 }
10679
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010680 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10681 sizeof(WDI_FWLoggingInitReqInfoType));
10682 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010683 {
10684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10685 "%s: VOS MEM Alloc Failure", __func__);
10686 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010687 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010688 return VOS_STATUS_E_NOMEM;
10689 }
10690
10691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10692 if(NULL == pWdaParams)
10693 {
10694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10695 "%s: VOS MEM Alloc Failure", __func__);
10696 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010697 vos_mem_free(wdiFWLoggingInitInfo);
10698 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010699 return VOS_STATUS_E_NOMEM;
10700 }
10701
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010702 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10703 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10704 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10705 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10706 wdiFWLoggingInitInfo->continuousFrameLogging =
10707 pFWLoggingInitParam->continuousFrameLogging;
10708 wdiFWLoggingInitInfo->minLogBufferSize=
10709 pFWLoggingInitParam->minLogBufferSize;
10710 wdiFWLoggingInitInfo->maxLogBufferSize=
10711 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010712
10713 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010714 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10715 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010716
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010717 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10718 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010719 pWdaParams);
10720 if(IS_WDI_STATUS_FAILURE(wstatus))
10721 {
10722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10723 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10724 status = CONVERT_WDI2VOS_STATUS(wstatus);
10725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10726 vos_mem_free(pWdaParams->wdaMsgParam);
10727 vos_mem_free(pWdaParams);
10728 }
10729
10730 return status;
10731}
10732
Jeff Johnson295189b2012-06-20 16:38:30 -070010733/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010734 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10735 *
10736 */
10737VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10738 tSirRssiMonitorReq *pRssiMonitorReqParam)
10739{
10740 VOS_STATUS status = VOS_STATUS_SUCCESS;
10741 WDI_Status wstatus;
10742 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10743 tWDA_ReqParams *pWdaParams ;
10744
10745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10746 "------> %s " ,__func__);
10747
10748 /* Sanity Check*/
10749 if(NULL == pRssiMonitorReqParam)
10750 {
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10752 "%s: pRssiMonitorReqParam received NULL", __func__);
10753 VOS_ASSERT(0) ;
10754 return VOS_STATUS_E_FAULT;
10755 }
10756
10757 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10758 sizeof(WDI_RssiMonitorReqInfoType));
10759 if(NULL == wdiRssiMonitorInfo)
10760 {
10761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10762 "%s: VOS MEM Alloc Failure", __func__);
10763 VOS_ASSERT(0);
10764 vos_mem_free(pRssiMonitorReqParam);
10765 return VOS_STATUS_E_NOMEM;
10766 }
10767
10768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10769 if(NULL == pWdaParams)
10770 {
10771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10772 "%s: VOS MEM Alloc Failure", __func__);
10773 VOS_ASSERT(0);
10774 vos_mem_free(wdiRssiMonitorInfo);
10775 vos_mem_free(pRssiMonitorReqParam);
10776 return VOS_STATUS_E_NOMEM;
10777 }
10778
10779 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10780 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10781 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10782 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10783 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10784
10785 pWdaParams->pWdaContext = pWDA;
10786 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10787 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10788
10789 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10790 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10791 pWdaParams);
10792 if(IS_WDI_STATUS_FAILURE(wstatus))
10793 {
10794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10795 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10796 status = CONVERT_WDI2VOS_STATUS(wstatus);
10797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10798 vos_mem_free(pWdaParams->wdaMsgParam);
10799 vos_mem_free(pWdaParams);
10800 }
10801
10802 return status;
10803}
10804
10805/*
10806 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10807 *
10808 */
10809VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10810 tSirRssiMonitorReq *pRssiMonitorReqParam)
10811{
10812 VOS_STATUS status = VOS_STATUS_SUCCESS;
10813 WDI_Status wstatus;
10814 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10815 tWDA_ReqParams *pWdaParams ;
10816
10817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10818 "------> %s " ,__func__);
10819
10820 /* Sanity Check*/
10821 if(NULL == pRssiMonitorReqParam)
10822 {
10823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10824 "%s: pRssiMonitorReqParam received NULL", __func__);
10825 VOS_ASSERT(0) ;
10826 return VOS_STATUS_E_FAULT;
10827 }
10828
10829 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10830 sizeof(WDI_RssiMonitorReqInfoType));
10831 if(NULL == wdiRssiMonitorInfo)
10832 {
10833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10834 "%s: VOS MEM Alloc Failure", __func__);
10835 VOS_ASSERT(0);
10836 vos_mem_free(pRssiMonitorReqParam);
10837 return VOS_STATUS_E_NOMEM;
10838 }
10839
10840 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10841 if(NULL == pWdaParams)
10842 {
10843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10844 "%s: VOS MEM Alloc Failure", __func__);
10845 VOS_ASSERT(0);
10846 vos_mem_free(wdiRssiMonitorInfo);
10847 vos_mem_free(pRssiMonitorReqParam);
10848 return VOS_STATUS_E_NOMEM;
10849 }
10850
10851 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10852 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10853 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10854
10855 pWdaParams->pWdaContext = pWDA;
10856 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10857 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10858
10859 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10860 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10861 pWdaParams);
10862 if(IS_WDI_STATUS_FAILURE(wstatus))
10863 {
10864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10865 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10866 status = CONVERT_WDI2VOS_STATUS(wstatus);
10867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10868 vos_mem_free(pWdaParams->wdaMsgParam);
10869 vos_mem_free(pWdaParams);
10870 }
10871
10872 return status;
10873}
10874
10875
10876/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010877 * FUNCTION: WDA_WdiIndicationCallback
10878 *
10879 */
10880void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10881 void* pUserData)
10882{
10883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010884 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010885}
Jeff Johnson295189b2012-06-20 16:38:30 -070010886/*
10887 * FUNCTION: WDA_ProcessWlanSuspendInd
10888 *
10889 */
10890VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10891 tSirWlanSuspendParam *pWlanSuspendParam)
10892{
10893 WDI_Status wdiStatus;
10894 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010896 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10898 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10899 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10900 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10903 if(WDI_STATUS_PENDING == wdiStatus)
10904 {
10905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010906 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010907 }
10908 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10909 {
10910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010911 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010913 vos_mem_free(pWlanSuspendParam);
10914 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10915}
10916
Chet Lanctot186b5732013-03-18 10:26:30 -070010917#ifdef WLAN_FEATURE_11W
10918/*
10919 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10920 *
10921 */
10922VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10923 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10924{
10925 WDI_Status wdiStatus;
10926 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10928 "------> %s ", __func__);
10929
10930 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10931 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10932 sizeof(tSirMacAddr));
10933
10934 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10935 wdiExclUnencryptParams.pUserData = pWDA;
10936
10937 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10938 if(WDI_STATUS_PENDING == wdiStatus)
10939 {
10940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10941 "Pending received for %s:%d ", __func__, __LINE__ );
10942 }
10943 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10944 {
10945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10946 "Failure in %s:%d ", __func__, __LINE__ );
10947 }
10948 vos_mem_free(pExclUnencryptParam);
10949 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10950}
10951#endif
10952
Jeff Johnson295189b2012-06-20 16:38:30 -070010953/*
10954 * FUNCTION: WDA_ProcessWlanResumeCallback
10955 *
10956 */
10957void WDA_ProcessWlanResumeCallback(
10958 WDI_SuspendResumeRspParamsType *resumeRspParams,
10959 void* pUserData)
10960{
10961 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010963 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 if(NULL == pWdaParams)
10965 {
10966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010967 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 VOS_ASSERT(0) ;
10969 return ;
10970 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010971 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10972 {
10973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010974 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010975 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10977 vos_mem_free(pWdaParams->wdaMsgParam);
10978 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 return ;
10980}
Jeff Johnson295189b2012-06-20 16:38:30 -070010981/*
10982 * FUNCTION: WDA_ProcessWlanResumeReq
10983 *
10984 */
10985VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10986 tSirWlanResumeParam *pWlanResumeParam)
10987{
10988 WDI_Status wdiStatus;
10989 WDI_ResumeParamsType *wdiResumeParams =
10990 (WDI_ResumeParamsType *)vos_mem_malloc(
10991 sizeof(WDI_ResumeParamsType) ) ;
10992 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010994 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 if(NULL == wdiResumeParams)
10996 {
10997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010999 VOS_ASSERT(0);
11000 return VOS_STATUS_E_NOMEM;
11001 }
11002 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11003 if(NULL == pWdaParams)
11004 {
11005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011007 VOS_ASSERT(0);
11008 vos_mem_free(wdiResumeParams);
11009 return VOS_STATUS_E_NOMEM;
11010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011011 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11012 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 wdiResumeParams->wdiReqStatusCB = NULL;
11015 pWdaParams->wdaMsgParam = pWlanResumeParam;
11016 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11017 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011018 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11019 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11020 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11022 {
11023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11024 "Failure in Host Resume REQ WDI API, free all the memory " );
11025 VOS_ASSERT(0);
11026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11027 vos_mem_free(pWdaParams->wdaMsgParam);
11028 vos_mem_free(pWdaParams);
11029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11031}
11032
Jeff Johnson295189b2012-06-20 16:38:30 -070011033/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011034 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 *
11036 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011037void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011038{
11039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011041 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 if(NULL == pWdaParams)
11043 {
11044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011045 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 VOS_ASSERT(0) ;
11047 return ;
11048 }
11049
11050 vos_mem_free(pWdaParams->wdaMsgParam) ;
11051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11052 vos_mem_free(pWdaParams) ;
11053 /*
11054 * No respone required for SetBeaconFilter req so just free the request
11055 * param here
11056 */
11057
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 return ;
11059}
Jeff Johnson295189b2012-06-20 16:38:30 -070011060/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011061 * FUNCTION: WDA_SetBeaconFilterReqCallback
11062 * Free memory.
11063 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11064 */
11065void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11066{
11067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11068
11069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11070 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11071
11072 if(NULL == pWdaParams)
11073 {
11074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11075 "%s: pWdaParams received NULL", __func__);
11076 VOS_ASSERT(0);
11077 return;
11078 }
11079
11080 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11081 {
11082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11083 vos_mem_free(pWdaParams->wdaMsgParam);
11084 vos_mem_free(pWdaParams);
11085 }
11086
11087 return;
11088}
11089/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 * FUNCTION: WDA_SetBeaconFilterReq
11091 * Request to WDI to send the beacon filtering related information.
11092 */
11093VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11094 tBeaconFilterMsg* pBeaconFilterInfo)
11095{
11096 WDI_Status status = WDI_STATUS_SUCCESS;
11097 tANI_U8 *dstPtr, *srcPtr;
11098 tANI_U8 filterLength;
11099 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11100 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11101 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11102 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011104 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 if(NULL == wdiBeaconFilterInfo)
11106 {
11107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 VOS_ASSERT(0);
11110 return VOS_STATUS_E_NOMEM;
11111 }
11112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11113 if(NULL == pWdaParams)
11114 {
11115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 VOS_ASSERT(0);
11118 vos_mem_free(wdiBeaconFilterInfo);
11119 return VOS_STATUS_E_NOMEM;
11120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11122 pBeaconFilterInfo->beaconInterval;
11123 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11124 pBeaconFilterInfo->capabilityInfo;
11125 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11126 pBeaconFilterInfo->capabilityMask;
11127 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011128
11129 //Fill the BssIdx
11130 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11131
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 //Fill structure with info contained in the beaconFilterTable
11133 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11134 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11135 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11136 if(WDI_BEACON_FILTER_LEN < filterLength)
11137 {
11138 filterLength = WDI_BEACON_FILTER_LEN;
11139 }
11140 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011141 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11142 wdiBeaconFilterInfo->pUserData = pWdaParams;
11143
Jeff Johnson295189b2012-06-20 16:38:30 -070011144 /* Store param pointer as passed in by caller */
11145 /* store Params pass it to WDI */
11146 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11147 pWdaParams->pWdaContext = pWDA;
11148 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11149
Jeff Johnson295189b2012-06-20 16:38:30 -070011150 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011151 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 if(IS_WDI_STATUS_FAILURE(status))
11153 {
11154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11155 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11156 vos_mem_free(pWdaParams->wdaMsgParam) ;
11157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11158 vos_mem_free(pWdaParams) ;
11159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011160 return CONVERT_WDI2VOS_STATUS(status) ;
11161}
Jeff Johnson295189b2012-06-20 16:38:30 -070011162/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011163 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011164 *
11165 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011166void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011167{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11169
Jeff Johnson295189b2012-06-20 16:38:30 -070011170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011171 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011172
11173 if(NULL == pWdaParams)
11174 {
11175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011176 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011177 VOS_ASSERT(0) ;
11178 return ;
11179 }
11180
11181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11182 vos_mem_free(pWdaParams->wdaMsgParam);
11183 vos_mem_free(pWdaParams);
11184
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 //print a msg, nothing else to do
11186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011187 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011188 return ;
11189}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011190/*
11191 * FUNCTION: WDA_RemBeaconFilterReqCallback
11192 * Free memory.
11193 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11194 */
11195void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11196{
11197 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11198
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11200 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11201
11202 if(NULL == pWdaParams)
11203 {
11204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11205 "%s: pWdaParams received NULL", __func__);
11206 VOS_ASSERT(0);
11207 return;
11208 }
11209
11210 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11211 {
11212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11213 vos_mem_free(pWdaParams->wdaMsgParam);
11214 vos_mem_free(pWdaParams);
11215 }
11216
11217 return;
11218}
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 // TODO: PE does not have this feature for now implemented,
11220 // but the support for removing beacon filter exists between
11221 // HAL and FW. This function can be called whenever PE defines
11222 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011223/*
11224 * FUNCTION: WDA_RemBeaconFilterReq
11225 * Request to WDI to send the removal of beacon filtering related information.
11226 */
11227VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11228 tRemBeaconFilterMsg* pBeaconFilterInfo)
11229{
11230 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011231 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11233 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11234 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011235 tWDA_ReqParams *pWdaParams ;
11236
Jeff Johnson295189b2012-06-20 16:38:30 -070011237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011239 if(NULL == wdiBeaconFilterInfo)
11240 {
11241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 VOS_ASSERT(0);
11244 return VOS_STATUS_E_NOMEM;
11245 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11247 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011248 {
11249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011252 vos_mem_free(wdiBeaconFilterInfo);
11253 vos_mem_free(pBeaconFilterInfo);
11254 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011255 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011256
11257 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11258 pBeaconFilterInfo->ucIeCount;
11259 //Fill structure with info contained in the ucRemIeId
11260 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11261 pBeaconFilterInfo->ucRemIeId,
11262 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11263 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11264 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011265
11266 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011267 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011268 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011269 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11270
11271 pWdaParams->pWdaContext = pWDA;
11272
Jeff Johnson43971f52012-07-17 12:26:56 -070011273 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011274 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011275 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011276 {
11277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11278 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011279 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11281 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011282 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011284 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011285}
Jeff Johnson295189b2012-06-20 16:38:30 -070011286/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011287 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 *
11289 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011290void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011291{
11292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011294 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011295 if(NULL == pWdaParams)
11296 {
11297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011298 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011299 VOS_ASSERT(0) ;
11300 return ;
11301 }
11302
11303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11304 vos_mem_free(pWdaParams) ;
11305
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 return ;
11307}
Jeff Johnson295189b2012-06-20 16:38:30 -070011308/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011309 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11310 * Free memory.
11311 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11312 */
11313void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11314{
11315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11316
11317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11318 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11319
11320 if(NULL == pWdaParams)
11321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11323 "%s: pWdaParams received NULL", __func__);
11324 VOS_ASSERT(0);
11325 return;
11326 }
11327
11328 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11329 {
11330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11331 vos_mem_free(pWdaParams);
11332 }
11333
11334 return;
11335}
11336/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 * FUNCTION: WDA_SetRSSIThresholdsReq
11338 * Request to WDI to set the RSSI thresholds (sta mode).
11339 */
11340VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11341{
11342 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011343 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011344 tWDA_CbContext *pWDA = NULL ;
11345 v_PVOID_t pVosContext = NULL;
11346 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11347 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11348 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11349 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011351 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 if(NULL == wdiRSSIThresholdsInfo)
11353 {
11354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011356 VOS_ASSERT(0);
11357 return VOS_STATUS_E_NOMEM;
11358 }
11359 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11360 if(NULL == pWdaParams)
11361 {
11362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011363 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 VOS_ASSERT(0);
11365 vos_mem_free(wdiRSSIThresholdsInfo);
11366 return VOS_STATUS_E_NOMEM;
11367 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011368 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11370 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11371 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11373 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11374 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11376 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11377 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011378 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11379 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11381 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11382
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 /* Store param pointer as passed in by caller */
11384 /* store Params pass it to WDI */
11385 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11386 pWdaParams->pWdaContext = pWDA;
11387 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011388 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011389 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011390 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011391 {
11392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11393 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011394 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11396 vos_mem_free(pWdaParams) ;
11397 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011398 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011399
11400}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011401/*
Yue Madb90ac12013-04-04 13:39:13 -070011402 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 *
11404 */
Yue Madb90ac12013-04-04 13:39:13 -070011405void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011406{
11407 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11408
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011410 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011411 if(NULL == pWdaParams)
11412 {
11413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011414 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 VOS_ASSERT(0) ;
11416 return ;
11417 }
11418
11419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11420 vos_mem_free(pWdaParams->wdaMsgParam);
11421 vos_mem_free(pWdaParams) ;
11422
11423 //print a msg, nothing else to do
11424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011425 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 return ;
11427}
Jeff Johnson295189b2012-06-20 16:38:30 -070011428/*
Yue Madb90ac12013-04-04 13:39:13 -070011429 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011430 * Free memory.
11431 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011432 */
11433void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11434{
11435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11436
11437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11438 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11439
11440 if(NULL == pWdaParams)
11441 {
11442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11443 "%s: Invalid pWdaParams pointer", __func__);
11444 VOS_ASSERT(0);
11445 return;
11446 }
11447
11448 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11449 {
11450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11451 vos_mem_free(pWdaParams->wdaMsgParam);
11452 vos_mem_free(pWdaParams);
11453 }
11454
11455 return;
11456}
11457/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 * FUNCTION: WDA_ProcessHostOffloadReq
11459 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11460 * to broadcast traffic (sta mode).
11461 */
11462VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11463 tSirHostOffloadReq *pHostOffloadParams)
11464{
11465 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011466 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11468 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11469 sizeof(WDI_HostOffloadReqParamsType)) ;
11470 tWDA_ReqParams *pWdaParams ;
11471
11472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011473 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011474
11475 if(NULL == wdiHostOffloadInfo)
11476 {
11477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011478 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011479 VOS_ASSERT(0);
11480 return VOS_STATUS_E_NOMEM;
11481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11483 if(NULL == pWdaParams)
11484 {
11485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011487 VOS_ASSERT(0);
11488 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011489 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 return VOS_STATUS_E_NOMEM;
11491 }
11492
11493 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11494 pHostOffloadParams->offloadType;
11495 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11496 pHostOffloadParams->enableOrDisable;
11497
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011498 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11499 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11500
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11502 {
11503 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11504 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11505 pHostOffloadParams->params.hostIpv4Addr,
11506 4);
11507 break;
11508 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11509 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11510 pHostOffloadParams->params.hostIpv6Addr,
11511 16);
11512 break;
11513 case SIR_IPV6_NS_OFFLOAD:
11514 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11515 pHostOffloadParams->params.hostIpv6Addr,
11516 16);
11517
11518#ifdef WLAN_NS_OFFLOAD
11519 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11520 {
11521 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11522 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11523 16);
11524 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11525 }
11526 else
11527 {
11528 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11529 }
11530
11531 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11532 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11533 16);
11534 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11535 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11536 6);
11537
11538 //Only two are supported so let's go through them without a loop
11539 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11540 {
11541 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11542 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11543 16);
11544 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11545 }
11546 else
11547 {
11548 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11549 }
11550
11551 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11552 {
11553 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11554 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11555 16);
11556 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11557 }
11558 else
11559 {
11560 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11561 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011562 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11563 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011564 break;
11565#endif //WLAN_NS_OFFLOAD
11566 default:
11567 {
11568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11569 "No Handling for Offload Type %x in WDA "
11570 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11571 //WDA_VOS_ASSERT(0) ;
11572 }
11573 }
Yue Madb90ac12013-04-04 13:39:13 -070011574 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11575 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011576
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011578 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011579 /* store Params pass it to WDI */
11580 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11581 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011582
Jeff Johnson295189b2012-06-20 16:38:30 -070011583
Jeff Johnson43971f52012-07-17 12:26:56 -070011584 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011585 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011586
Jeff Johnson43971f52012-07-17 12:26:56 -070011587 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053011589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053011590 "Failure in host offload REQ WDI API, free all the memory %d",
11591 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011592 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11594 vos_mem_free(pWdaParams->wdaMsgParam);
11595 vos_mem_free(pWdaParams) ;
11596 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011597 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011598
11599}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011600/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011601 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011602 *
11603 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011604void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011605{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11607
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011609 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011610
11611 if(NULL == pWdaParams)
11612 {
11613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011614 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011615 VOS_ASSERT(0) ;
11616 return ;
11617 }
11618
11619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11620 vos_mem_free(pWdaParams->wdaMsgParam);
11621 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011622
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 //print a msg, nothing else to do
11624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011625 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 return ;
11627}
Jeff Johnson295189b2012-06-20 16:38:30 -070011628/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011629 * FUNCTION: WDA_KeepAliveReqCallback
11630 * Free memory.
11631 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11632 */
11633void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11634{
11635 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11636
11637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11638 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11639
11640 if(NULL == pWdaParams)
11641 {
11642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11643 "%s: pWdaParams received NULL", __func__);
11644 VOS_ASSERT(0);
11645 return;
11646 }
11647
11648 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11649 {
11650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11651 vos_mem_free(pWdaParams->wdaMsgParam);
11652 vos_mem_free(pWdaParams);
11653 }
11654
11655 return;
11656}
11657/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 * FUNCTION: WDA_ProcessKeepAliveReq
11659 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11660 * wakeup due to broadcast traffic (sta mode).
11661 */
11662VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11663 tSirKeepAliveReq *pKeepAliveParams)
11664{
11665 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011666 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11668 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11669 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011670 tWDA_ReqParams *pWdaParams;
11671
Jeff Johnson295189b2012-06-20 16:38:30 -070011672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011673 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 if(NULL == wdiKeepAliveInfo)
11675 {
11676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011679 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 return VOS_STATUS_E_NOMEM;
11681 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011682
11683 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11684 if(NULL == pWdaParams)
11685 {
11686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011687 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011688 VOS_ASSERT(0);
11689 vos_mem_free(wdiKeepAliveInfo);
11690 vos_mem_free(pKeepAliveParams);
11691 return VOS_STATUS_E_NOMEM;
11692 }
11693
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11695 pKeepAliveParams->packetType;
11696 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11697 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011698
11699 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11700 pKeepAliveParams->bssId,
11701 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011702
11703 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11704 {
11705 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11706 pKeepAliveParams->hostIpv4Addr,
11707 SIR_IPV4_ADDR_LEN);
11708 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11709 pKeepAliveParams->destIpv4Addr,
11710 SIR_IPV4_ADDR_LEN);
11711 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11712 pKeepAliveParams->destMacAddr,
11713 SIR_MAC_ADDR_LEN);
11714 }
11715 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11716 {
11717 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11718 SIR_IPV4_ADDR_LEN,
11719 0);
11720 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11721 SIR_IPV4_ADDR_LEN,
11722 0);
11723 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11724 SIR_MAC_ADDR_LEN,
11725 0);
11726 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011727 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11728 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011729
Jeff Johnson295189b2012-06-20 16:38:30 -070011730 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011731 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011733 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11734 pWdaParams->pWdaContext = pWDA;
11735
Jeff Johnson295189b2012-06-20 16:38:30 -070011736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11737 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11738 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11739 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11740 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11742 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11743 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11744 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11745 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11747 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11748 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11749 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11750 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11751 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11752 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11753 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11755 "TimePeriod %d PacketType %d",
11756 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11757 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011758 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011759 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011760
Jeff Johnson43971f52012-07-17 12:26:56 -070011761 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011762 {
11763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11764 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011765 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11767 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011768 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011769 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011770 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011771
11772}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011773/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011774 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 *
11776 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011777void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011778 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11779 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011780{
11781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011784 if(NULL == pWdaParams)
11785 {
11786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 VOS_ASSERT(0) ;
11789 return ;
11790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11792 vos_mem_free(pWdaParams->wdaMsgParam);
11793 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011794 return ;
11795}
Jeff Johnson295189b2012-06-20 16:38:30 -070011796/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011797 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11798 * Free memory.
11799 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11800 */
11801void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11802{
11803 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11804
11805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11806 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11807
11808 if(NULL == pWdaParams)
11809 {
11810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11811 "%s: pWdaParams received NULL", __func__);
11812 VOS_ASSERT(0);
11813 return;
11814 }
11815
11816 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11817 {
11818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11819 vos_mem_free(pWdaParams->wdaMsgParam);
11820 vos_mem_free(pWdaParams);
11821 }
11822
11823 return;
11824}
11825
11826/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011827 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11828 * Request to WDI to add WOWL Bcast pattern
11829 */
11830VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11831 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11832{
11833 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011834 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11836 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11837 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11838 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011840 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 if(NULL == wdiWowlAddBcPtrnInfo)
11842 {
11843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 VOS_ASSERT(0);
11846 return VOS_STATUS_E_NOMEM;
11847 }
11848 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11849 if(NULL == pWdaParams)
11850 {
11851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011852 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011853 VOS_ASSERT(0);
11854 vos_mem_free(wdiWowlAddBcPtrnInfo);
11855 return VOS_STATUS_E_NOMEM;
11856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11858 pWowlAddBcPtrnParams->ucPatternId;
11859 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11860 pWowlAddBcPtrnParams->ucPatternByteOffset;
11861 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11862 pWowlAddBcPtrnParams->ucPatternMaskSize;
11863 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11864 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11866 {
11867 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11868 pWowlAddBcPtrnParams->ucPattern,
11869 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11870 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11871 pWowlAddBcPtrnParams->ucPatternMask,
11872 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11873 }
11874 else
11875 {
11876 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11877 pWowlAddBcPtrnParams->ucPattern,
11878 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11879 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11880 pWowlAddBcPtrnParams->ucPatternMask,
11881 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11882
11883 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11884 pWowlAddBcPtrnParams->ucPatternExt,
11885 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11886 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11887 pWowlAddBcPtrnParams->ucPatternMaskExt,
11888 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11889 }
11890
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011891 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11892 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11893
Yue Ma7f44bbe2013-04-12 11:47:39 -070011894 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11895 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 /* Store param pointer as passed in by caller */
11897 /* store Params pass it to WDI */
11898 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11899 pWdaParams->pWdaContext = pWDA;
11900 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011901 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011902 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011903 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 {
11905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11906 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011907 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 vos_mem_free(pWdaParams->wdaMsgParam) ;
11909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11910 vos_mem_free(pWdaParams) ;
11911 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011912 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011913
11914}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011915/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011916 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011917 *
11918 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011919void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011920 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11921 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011922{
11923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011925 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011926 if(NULL == pWdaParams)
11927 {
11928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011929 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011930 VOS_ASSERT(0) ;
11931 return ;
11932 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11934 vos_mem_free(pWdaParams->wdaMsgParam);
11935 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 return ;
11937}
Jeff Johnson295189b2012-06-20 16:38:30 -070011938/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011939 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11940 * Free memory.
11941 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11942 */
11943void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11944{
11945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11946
11947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11948 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11949
11950 if(NULL == pWdaParams)
11951 {
11952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11953 "%s: pWdaParams received NULL", __func__);
11954 VOS_ASSERT(0);
11955 return;
11956 }
11957
11958 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11959 {
11960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11961 vos_mem_free(pWdaParams->wdaMsgParam);
11962 vos_mem_free(pWdaParams);
11963 }
11964
11965 return;
11966}
11967/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11969 * Request to WDI to delete WOWL Bcast pattern
11970 */
11971VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11972 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11973{
11974 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011975 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011976 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11977 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11978 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11979 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011981 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 if(NULL == wdiWowlDelBcPtrnInfo)
11983 {
11984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 VOS_ASSERT(0);
11987 return VOS_STATUS_E_NOMEM;
11988 }
11989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11990 if(NULL == pWdaParams)
11991 {
11992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011994 VOS_ASSERT(0);
11995 vos_mem_free(wdiWowlDelBcPtrnInfo);
11996 return VOS_STATUS_E_NOMEM;
11997 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011998 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11999 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012000
12001 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12002 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12003
Yue Ma7f44bbe2013-04-12 11:47:39 -070012004 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12005 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 /* Store param pointer as passed in by caller */
12007 /* store Params pass it to WDI */
12008 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12009 pWdaParams->pWdaContext = pWDA;
12010 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012011 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012012 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012013 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 {
12015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12016 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012017 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012018 vos_mem_free(pWdaParams->wdaMsgParam) ;
12019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12020 vos_mem_free(pWdaParams) ;
12021 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012022 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012023
12024}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012025/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012026 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012027 *
12028 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012029void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012030{
12031 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012032 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012033 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012035 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012036 if(NULL == pWdaParams)
12037 {
12038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012039 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012040 VOS_ASSERT(0) ;
12041 return ;
12042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012044 if (NULL == pWDA)
12045 {
12046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12047 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012048
12049 if(pWdaParams->wdaWdiApiMsgParam)
12050 {
12051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12052 }
12053 vos_mem_free(pWdaParams);
12054
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012055 VOS_ASSERT(0);
12056 return ;
12057 }
12058
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12060
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012061 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12062
Jeff Johnson295189b2012-06-20 16:38:30 -070012063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12064 vos_mem_free(pWdaParams) ;
12065
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012066 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012067 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012068 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 return ;
12070}
Jeff Johnson295189b2012-06-20 16:38:30 -070012071/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012072 * FUNCTION: WDA_WowlEnterReqCallback
12073 * Free memory and send WOWL Enter RSP back to PE.
12074 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12075 */
12076void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12077{
12078 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012079 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012080 tSirHalWowlEnterParams *pWowlEnterParams;
12081
12082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12083 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12084
12085 if(NULL == pWdaParams)
12086 {
12087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12088 "%s: pWdaParams received NULL", __func__);
12089 VOS_ASSERT(0);
12090 return;
12091 }
12092
12093 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012094 if (NULL == pWDA)
12095 {
12096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12097 "%s:pWDA is NULL", __func__);
12098 VOS_ASSERT(0);
12099 return ;
12100 }
12101
Yue Ma7f44bbe2013-04-12 11:47:39 -070012102 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12103 pWowlEnterParams->status = wdiStatus;
12104
12105 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12106 {
12107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12108 vos_mem_free(pWdaParams);
12109 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12110 }
12111
12112 return;
12113}
12114/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 * FUNCTION: WDA_ProcessWowlEnterReq
12116 * Request to WDI to enter WOWL
12117 */
12118VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12119 tSirHalWowlEnterParams *pWowlEnterParams)
12120{
12121 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012122 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12124 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12125 sizeof(WDI_WowlEnterReqParamsType)) ;
12126 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 if(NULL == wdiWowlEnterInfo)
12130 {
12131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012133 VOS_ASSERT(0);
12134 return VOS_STATUS_E_NOMEM;
12135 }
12136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12137 if(NULL == pWdaParams)
12138 {
12139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012141 VOS_ASSERT(0);
12142 vos_mem_free(wdiWowlEnterInfo);
12143 return VOS_STATUS_E_NOMEM;
12144 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012145
12146 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12147
Jeff Johnson295189b2012-06-20 16:38:30 -070012148 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12149 pWowlEnterParams->magicPtrn,
12150 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012151 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12152 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012153 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12154 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012155 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12156 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012157 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12158 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12160 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012161 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12162 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12164 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012165 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12166 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012167#ifdef WLAN_WAKEUP_EVENTS
12168 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12169 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12170
12171 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12172 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12173
12174 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12175 pWowlEnterParams->ucWowNetScanOffloadMatch;
12176
12177 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12178 pWowlEnterParams->ucWowGTKRekeyError;
12179
12180 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12181 pWowlEnterParams->ucWoWBSSConnLoss;
12182#endif // WLAN_WAKEUP_EVENTS
12183
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012184 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12185 pWowlEnterParams->bssIdx;
12186
Yue Ma7f44bbe2013-04-12 11:47:39 -070012187 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12188 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012189 /* Store param pointer as passed in by caller */
12190 /* store Params pass it to WDI */
12191 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12192 pWdaParams->pWdaContext = pWDA;
12193 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012194 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012195 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012196 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012197 {
12198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12199 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012200 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012201 vos_mem_free(pWdaParams->wdaMsgParam) ;
12202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12203 vos_mem_free(pWdaParams) ;
12204 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012205 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012206
12207}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012208/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012209 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012210 *
12211 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012212void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012213{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012215 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012216 tSirHalWowlExitParams *pWowlExitParams;
12217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012218 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012219 if(NULL == pWdaParams)
12220 {
12221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012222 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012223 VOS_ASSERT(0) ;
12224 return ;
12225 }
12226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012227 if (NULL == pWDA)
12228 {
12229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12230 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012231
12232 if(pWdaParams->wdaWdiApiMsgParam)
12233 {
12234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12235 }
12236 vos_mem_free(pWdaParams);
12237
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012238 VOS_ASSERT(0);
12239 return ;
12240 }
12241
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012242 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12243
12244 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012245 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012246
12247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12248 vos_mem_free(pWdaParams) ;
12249
Jeff Johnson295189b2012-06-20 16:38:30 -070012250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012251 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012252 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012253 return ;
12254}
Jeff Johnson295189b2012-06-20 16:38:30 -070012255/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012256 * FUNCTION: WDA_WowlExitReqCallback
12257 * Free memory and send WOWL Exit RSP back to PE.
12258 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12259 */
12260void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12261{
12262 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012263 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012264 tSirHalWowlExitParams *pWowlExitParams;
12265
12266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12267 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12268
12269 if(NULL == pWdaParams)
12270 {
12271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12272 "%s: pWdaParams received NULL", __func__);
12273 VOS_ASSERT(0);
12274 return;
12275 }
12276
12277 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012278 if (NULL == pWDA)
12279 {
12280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12281 "%s:pWDA is NULL", __func__);
12282 VOS_ASSERT(0);
12283 return ;
12284 }
12285
Yue Ma7f44bbe2013-04-12 11:47:39 -070012286 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12287 pWowlExitParams->status = wdiStatus;
12288
12289 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12290 {
12291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12292 vos_mem_free(pWdaParams);
12293 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12294 }
12295
12296 return;
12297}
12298/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 * FUNCTION: WDA_ProcessWowlExitReq
12300 * Request to WDI to add WOWL Bcast pattern
12301 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012302VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12303 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012304{
12305 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012306 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012307 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12308 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12309 sizeof(WDI_WowlExitReqParamsType)) ;
12310 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012312 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012313 if(NULL == wdiWowlExitInfo)
12314 {
12315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012316 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012317 VOS_ASSERT(0);
12318 return VOS_STATUS_E_NOMEM;
12319 }
12320 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12321 if(NULL == pWdaParams)
12322 {
12323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012324 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012325 VOS_ASSERT(0);
12326 vos_mem_free(wdiWowlExitInfo);
12327 return VOS_STATUS_E_NOMEM;
12328 }
12329
12330 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12331 pWowlExitParams->bssIdx;
12332
Yue Ma7f44bbe2013-04-12 11:47:39 -070012333 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12334 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012335
12336 /* Store param pointer as passed in by caller */
12337 /* store Params pass it to WDI */
12338 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12339 pWdaParams->pWdaContext = pWDA;
12340 pWdaParams->wdaMsgParam = pWowlExitParams;
12341
12342 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012343 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012344
Jeff Johnson43971f52012-07-17 12:26:56 -070012345 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 {
12347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12348 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012349 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12351 vos_mem_free(pWdaParams->wdaMsgParam);
12352 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012353 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012354 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012355}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012356/*
12357 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12358 * Request to WDI to determine whether a given station is capable of
12359 * using HW-based frame translation
12360 */
12361v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12362 tANI_U8 staIdx)
12363{
12364 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12365}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012366
12367/*
12368 * FUNCTION: WDA_IsSelfSTA
12369 * Request to WDI to determine whether a given STAID is self station
12370 * index.
12371 */
12372v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12373{
12374
12375 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12376
Girish Gowli05cf44e2014-06-12 21:53:37 +053012377 if (NULL != pWDA)
12378 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12379 else
12380 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012381}
Jeff Johnson295189b2012-06-20 16:38:30 -070012382/*
12383 * FUNCTION: WDA_NvDownloadReqCallback
12384 * send NV Download RSP back to PE
12385 */
12386void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12387 void* pUserData)
12388{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012389
12390 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012391 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012392
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012394 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012395
12396 if(NULL == pWdaParams)
12397 {
12398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012399 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012400 VOS_ASSERT(0) ;
12401 return ;
12402 }
12403
12404 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012405 if (NULL == pWDA)
12406 {
12407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12408 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012409
12410 if(pWdaParams->wdaWdiApiMsgParam)
12411 {
12412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12413 }
12414 vos_mem_free(pWdaParams);
12415
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012416 VOS_ASSERT(0);
12417 return ;
12418 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012419
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12422 vos_mem_free(pWdaParams);
12423
Jeff Johnson295189b2012-06-20 16:38:30 -070012424 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012425 return ;
12426}
Jeff Johnson295189b2012-06-20 16:38:30 -070012427/*
12428 * FUNCTION: WDA_ProcessNvDownloadReq
12429 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12430 */
12431VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12432{
12433 /* Initialize the local Variables*/
12434 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12435 v_VOID_t *pNvBuffer=NULL;
12436 v_SIZE_t bufferSize = 0;
12437 WDI_Status status = WDI_STATUS_E_FAILURE;
12438 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012439 tWDA_ReqParams *pWdaParams ;
12440
Jeff Johnson295189b2012-06-20 16:38:30 -070012441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012442 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012443 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012444 {
12445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012446 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012447 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012448 return VOS_STATUS_E_FAILURE;
12449 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012450
Jeff Johnson295189b2012-06-20 16:38:30 -070012451 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012452 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12453
Jeff Johnson295189b2012-06-20 16:38:30 -070012454 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12455 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 if(NULL == wdiNvDownloadReqParam)
12457 {
12458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012460 VOS_ASSERT(0);
12461 return VOS_STATUS_E_NOMEM;
12462 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012463 /* Copy Params to wdiNvDownloadReqParam*/
12464 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12465 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012466
12467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12468 if(NULL == pWdaParams)
12469 {
12470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012471 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012472 VOS_ASSERT(0);
12473 vos_mem_free(wdiNvDownloadReqParam);
12474 return VOS_STATUS_E_NOMEM;
12475 }
12476
Jeff Johnson295189b2012-06-20 16:38:30 -070012477 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012478 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12479 pWdaParams->wdaMsgParam = NULL;
12480 pWdaParams->pWdaContext = pWDA;
12481
12482
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012484
Jeff Johnson295189b2012-06-20 16:38:30 -070012485 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012486 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12487
Jeff Johnson295189b2012-06-20 16:38:30 -070012488 if(IS_WDI_STATUS_FAILURE(status))
12489 {
12490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12491 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12493 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012496}
12497/*
12498 * FUNCTION: WDA_FlushAcReqCallback
12499 * send Flush AC RSP back to TL
12500 */
12501void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12502{
12503 vos_msg_t wdaMsg = {0} ;
12504 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12505 tFlushACReq *pFlushACReqParams;
12506 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012508 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 if(NULL == pWdaParams)
12510 {
12511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012512 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012513 VOS_ASSERT(0) ;
12514 return ;
12515 }
12516
12517 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12518 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12519 if(NULL == pFlushACRspParams)
12520 {
12521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012523 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012524 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 return ;
12526 }
12527 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12528 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12529 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12530 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12531 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012532 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012533 vos_mem_free(pWdaParams->wdaMsgParam) ;
12534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12535 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012536 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12537 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12538 // POST message to TL
12539 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12540
Jeff Johnson295189b2012-06-20 16:38:30 -070012541 return ;
12542}
Jeff Johnson295189b2012-06-20 16:38:30 -070012543/*
12544 * FUNCTION: WDA_ProcessFlushAcReq
12545 * Request to WDI to Update the DELBA REQ params.
12546 */
12547VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12548 tFlushACReq *pFlushAcReqParams)
12549{
12550 WDI_Status status = WDI_STATUS_SUCCESS ;
12551 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12552 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12553 sizeof(WDI_FlushAcReqParamsType)) ;
12554 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012555 if(NULL == wdiFlushAcReqParam)
12556 {
12557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012558 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012559 VOS_ASSERT(0);
12560 return VOS_STATUS_E_NOMEM;
12561 }
12562 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12563 if(NULL == pWdaParams)
12564 {
12565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012566 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012567 VOS_ASSERT(0);
12568 vos_mem_free(wdiFlushAcReqParam);
12569 return VOS_STATUS_E_NOMEM;
12570 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012572 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012573 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12574 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12575 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12576 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012577 /* Store Flush AC pointer, as this will be used for response */
12578 /* store Params pass it to WDI */
12579 pWdaParams->pWdaContext = pWDA;
12580 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12581 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012582 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12583 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012584 if(IS_WDI_STATUS_FAILURE(status))
12585 {
12586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12587 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12588 vos_mem_free(pWdaParams->wdaMsgParam) ;
12589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12590 vos_mem_free(pWdaParams) ;
12591 //TODO: respond to TL with failure
12592 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012593 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012594}
Jeff Johnson295189b2012-06-20 16:38:30 -070012595/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012596 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012597 *
12598 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012599void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012600{
12601 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012602 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012603 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012604
12605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012606 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012607 if(NULL == pWdaParams)
12608 {
12609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012610 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012611 VOS_ASSERT(0) ;
12612 return ;
12613 }
12614 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012615 if (NULL == pWDA)
12616 {
12617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12618 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012619 vos_mem_free(pWdaParams->wdaMsgParam) ;
12620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12621 vos_mem_free(pWdaParams) ;
12622
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012623 VOS_ASSERT(0);
12624 return ;
12625 }
12626
Jeff Johnson295189b2012-06-20 16:38:30 -070012627 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12628 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12629 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12630 {
12631 pWDA->wdaAmpSessionOn = VOS_FALSE;
12632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012633 vos_mem_free(pWdaParams->wdaMsgParam) ;
12634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12635 vos_mem_free(pWdaParams) ;
12636 /*
12637 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12638 * param here
12639 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 return ;
12641}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012642/*
12643 * FUNCTION: WDA_BtAmpEventReqCallback
12644 * Free memory.
12645 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12646 */
12647void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12648{
12649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012650 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012651 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012652
Yue Ma7f44bbe2013-04-12 11:47:39 -070012653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12654 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12655
12656 if(NULL == pWdaParams)
12657 {
12658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12659 "%s: pWdaParams received NULL", __func__);
12660 VOS_ASSERT(0);
12661 return;
12662 }
12663
12664 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012665 if (NULL == pWDA)
12666 {
12667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12668 "%s:pWDA is NULL", __func__);
12669 VOS_ASSERT(0);
12670 return ;
12671 }
12672
Yue Ma7f44bbe2013-04-12 11:47:39 -070012673 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12674
12675 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12676 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12677 {
12678 pWDA->wdaAmpSessionOn = VOS_FALSE;
12679 }
12680
12681 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12682 {
12683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12684 vos_mem_free(pWdaParams->wdaMsgParam);
12685 vos_mem_free(pWdaParams);
12686 }
12687
12688 return;
12689}
Jeff Johnson295189b2012-06-20 16:38:30 -070012690/*
12691 * FUNCTION: WDA_ProcessBtAmpEventReq
12692 * Request to WDI to Update with BT AMP events.
12693 */
12694VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12695 tSmeBtAmpEvent *pBtAmpEventParams)
12696{
12697 WDI_Status status = WDI_STATUS_SUCCESS ;
12698 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12699 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12700 sizeof(WDI_BtAmpEventParamsType)) ;
12701 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012703 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 if(NULL == wdiBtAmpEventParam)
12705 {
12706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012708 VOS_ASSERT(0);
12709 return VOS_STATUS_E_NOMEM;
12710 }
12711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12712 if(NULL == pWdaParams)
12713 {
12714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012716 VOS_ASSERT(0);
12717 vos_mem_free(wdiBtAmpEventParam);
12718 return VOS_STATUS_E_NOMEM;
12719 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012720 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12721 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012722 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12723 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012724 /* Store BT AMP event pointer, as this will be used for response */
12725 /* store Params pass it to WDI */
12726 pWdaParams->pWdaContext = pWDA;
12727 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12728 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012729 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012730 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012731 if(IS_WDI_STATUS_FAILURE(status))
12732 {
12733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12734 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12735 vos_mem_free(pWdaParams->wdaMsgParam) ;
12736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12737 vos_mem_free(pWdaParams) ;
12738 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012739 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12740 {
12741 pWDA->wdaAmpSessionOn = VOS_TRUE;
12742 }
12743 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012744}
12745
Jeff Johnson295189b2012-06-20 16:38:30 -070012746/*
12747 * FUNCTION: WDA_FTMCommandReqCallback
12748 * Handle FTM CMD response came from HAL
12749 * Route responce to HDD FTM
12750 */
12751void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12752 void *usrData)
12753{
12754 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012755 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12756 {
12757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012758 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012759 return;
12760 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012761 /* Release Current FTM Command Request */
12762 vos_mem_free(pWDA->wdaFTMCmdReq);
12763 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012764 /* Post FTM Responce to HDD FTM */
12765 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012766 return;
12767}
Jeff Johnson295189b2012-06-20 16:38:30 -070012768/*
12769 * FUNCTION: WDA_ProcessFTMCommand
12770 * Send FTM command to WDI
12771 */
12772VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12773 tPttMsgbuffer *pPTTFtmCmd)
12774{
12775 WDI_Status status = WDI_STATUS_SUCCESS;
12776 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012777 ftmCMDReq = (WDI_FTMCommandReqType *)
12778 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12779 if(NULL == ftmCMDReq)
12780 {
12781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12782 "WDA FTM Command buffer alloc fail");
12783 return VOS_STATUS_E_NOMEM;
12784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012785 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12786 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012787 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012788 /* Send command to WDI */
12789 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012790 return status;
12791}
Jeff Johnsone7245742012-09-05 17:12:55 -070012792#ifdef FEATURE_OEM_DATA_SUPPORT
12793/*
12794 * FUNCTION: WDA_StartOemDataReqCallback
12795 *
12796 */
12797void WDA_StartOemDataReqCallback(
12798 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12799 void* pUserData)
12800{
12801 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012802 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012803 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012804 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012805
Jeff Johnsone7245742012-09-05 17:12:55 -070012806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012807 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012808
12809 if(NULL == pWdaParams)
12810 {
12811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012812 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012813 VOS_ASSERT(0) ;
12814 return ;
12815 }
12816 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12817
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012818 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012819 {
12820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012821 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012822 VOS_ASSERT(0);
12823 return ;
12824 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012825
Jeff Johnsone7245742012-09-05 17:12:55 -070012826 /*
12827 * Allocate memory for response params sent to PE
12828 */
12829 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12830
12831 // Check if memory is allocated for OemdataMeasRsp Params.
12832 if(NULL == pOemDataRspParams)
12833 {
12834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12835 "OEM DATA WDA callback alloc fail");
12836 VOS_ASSERT(0) ;
12837 return;
12838 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012839
Jeff Johnsone7245742012-09-05 17:12:55 -070012840 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12842 vos_mem_free(pWdaParams->wdaMsgParam);
12843 vos_mem_free(pWdaParams) ;
12844
Jeff Johnsone7245742012-09-05 17:12:55 -070012845 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012846 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012847 * Also, here success always means that we have atleast one BSSID.
12848 */
12849 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12850
12851 //enable Tx
12852 status = WDA_ResumeDataTx(pWDA);
12853 if(status != VOS_STATUS_SUCCESS)
12854 {
12855 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12856 }
12857 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12858 return ;
12859}
12860/*
12861 * FUNCTION: WDA_ProcessStartOemDataReq
12862 * Send Start Oem Data Req to WDI
12863 */
12864VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12865 tStartOemDataReq *pOemDataReqParams)
12866{
12867 WDI_Status status = WDI_STATUS_SUCCESS;
12868 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012869 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012870
12871 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12872
12873 if(NULL == wdiOemDataReqParams)
12874 {
12875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012877 VOS_ASSERT(0);
12878 return VOS_STATUS_E_NOMEM;
12879 }
12880
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012881 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12882 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12883 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12884 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012885
12886 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12887
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012888 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12889 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012890 {
12891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012893 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012894 vos_mem_free(pOemDataReqParams);
12895 VOS_ASSERT(0);
12896 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012897 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012898
Bernald44a1ae2013-01-09 08:30:39 -080012899 pWdaParams->pWdaContext = (void*)pWDA;
12900 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12901 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012902
12903 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12904 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012905
12906 if(IS_WDI_STATUS_FAILURE(status))
12907 {
12908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12909 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12911 vos_mem_free(pWdaParams->wdaMsgParam);
12912 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012913 }
12914 return CONVERT_WDI2VOS_STATUS(status) ;
12915}
12916#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012917/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012918 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012919 *
12920 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012921void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012922{
12923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012925 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012926 if(NULL == pWdaParams)
12927 {
12928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012929 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 VOS_ASSERT(0) ;
12931 return ;
12932 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012933
12934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12935 vos_mem_free(pWdaParams->wdaMsgParam);
12936 vos_mem_free(pWdaParams);
12937
12938 return ;
12939}
12940/*
12941 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12942 * Free memory.
12943 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12944 */
12945void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12946{
12947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12948
12949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12950 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12951
12952 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012953 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12955 "%s: pWdaParams received NULL", __func__);
12956 VOS_ASSERT(0);
12957 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012958 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012959
12960 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012961 {
12962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012963 vos_mem_free(pWdaParams->wdaMsgParam);
12964 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012965 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012966
12967 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012968}
Jeff Johnson295189b2012-06-20 16:38:30 -070012969#ifdef WLAN_FEATURE_GTK_OFFLOAD
12970/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012971 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012972 *
12973 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012974void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012975 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012976{
12977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12978
12979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012980 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012981 if(NULL == pWdaParams)
12982 {
12983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12984 "%s: pWdaParams received NULL", __func__);
12985 VOS_ASSERT(0);
12986 return;
12987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012988
Jeff Johnson295189b2012-06-20 16:38:30 -070012989 vos_mem_free(pWdaParams->wdaMsgParam) ;
12990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12991 vos_mem_free(pWdaParams) ;
12992
12993 //print a msg, nothing else to do
12994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012995 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012996
12997 return ;
12998}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012999/*
13000 * FUNCTION: WDA_GTKOffloadReqCallback
13001 * Free memory.
13002 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13003 */
13004void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13005{
13006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013007
Yue Ma7f44bbe2013-04-12 11:47:39 -070013008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13009 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13010
13011 if(NULL == pWdaParams)
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13014 "%s: pWdaParams received NULL", __func__);
13015 VOS_ASSERT(0);
13016 return;
13017 }
13018
13019 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13020 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013021 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13022 sizeof(WDI_GtkOffloadReqMsg));
13023 vos_mem_zero(pWdaParams->wdaMsgParam,
13024 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13026 vos_mem_free(pWdaParams->wdaMsgParam);
13027 vos_mem_free(pWdaParams);
13028 }
13029
13030 return;
13031}
Jeff Johnson295189b2012-06-20 16:38:30 -070013032/*
13033 * FUNCTION: WDA_ProcessGTKOffloadReq
13034 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13035 * to broadcast traffic (sta mode).
13036 */
13037VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13038 tpSirGtkOffloadParams pGtkOffloadParams)
13039{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013040 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013041 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13042 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13043 sizeof(WDI_GtkOffloadReqMsg)) ;
13044 tWDA_ReqParams *pWdaParams ;
13045
13046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013047 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013048
13049 if(NULL == wdiGtkOffloadReqMsg)
13050 {
13051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013053 VOS_ASSERT(0);
13054 return VOS_STATUS_E_NOMEM;
13055 }
13056
13057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13058 if(NULL == pWdaParams)
13059 {
13060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013062 VOS_ASSERT(0);
13063 vos_mem_free(wdiGtkOffloadReqMsg);
13064 return VOS_STATUS_E_NOMEM;
13065 }
13066
13067 //
13068 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13069 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013070
13071 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013072 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013073
Jeff Johnson295189b2012-06-20 16:38:30 -070013074 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13075 // Copy KCK
13076 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13077 // Copy KEK
13078 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13079 // Copy KeyReplayCounter
13080 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13081 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13082
Yue Ma7f44bbe2013-04-12 11:47:39 -070013083 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13084 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013085
Jeff Johnson295189b2012-06-20 16:38:30 -070013086
13087 /* Store Params pass it to WDI */
13088 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13089 pWdaParams->pWdaContext = pWDA;
13090 /* Store param pointer as passed in by caller */
13091 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13092
Yue Ma7f44bbe2013-04-12 11:47:39 -070013093 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013094
13095 if(IS_WDI_STATUS_FAILURE(status))
13096 {
13097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13098 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013099 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13100 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13102 vos_mem_free(pWdaParams->wdaMsgParam);
13103 vos_mem_free(pWdaParams);
13104 }
13105
13106 return CONVERT_WDI2VOS_STATUS(status) ;
13107}
13108
13109/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013110 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013111 *
13112 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013113void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013114 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013115{
13116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13117 tWDA_CbContext *pWDA;
13118 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013119 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013120 vos_msg_t vosMsg;
13121
13122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013123 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013124
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013125 if(NULL == pWdaParams)
13126 {
13127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13128 "%s: pWdaParams received NULL", __func__);
13129 VOS_ASSERT(0);
13130 return;
13131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013132
Nirav Shah374de6e2014-02-13 16:40:01 +053013133 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13134 if(NULL == pGtkOffloadGetInfoRsp)
13135 {
13136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13137 "%s: vos_mem_malloc failed ", __func__);
13138 VOS_ASSERT(0);
13139 return;
13140 }
13141
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13143 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13144
13145 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13146 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13147
13148 /* Message Header */
13149 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013150 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013151
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013152 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13153 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13154 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13155 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13156 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013157
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013158 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13159 pwdiGtkOffloadGetInfoRsparams->bssId,
13160 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013161 /* VOS message wrapper */
13162 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13163 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13164 vosMsg.bodyval = 0;
13165
13166 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13167 {
13168 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013169 vos_mem_zero(pGtkOffloadGetInfoRsp,
13170 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013171 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13172 }
13173
13174 vos_mem_free(pWdaParams->wdaMsgParam) ;
13175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13176 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013177
13178 return;
13179}
13180/*
13181 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13182 * Free memory and send RSP back to SME.
13183 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13184 */
13185void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13186{
13187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13188 vos_msg_t vosMsg;
13189
13190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13191 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13192
13193 if(NULL == pWdaParams)
13194 {
13195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13196 "%s: pWdaParams received NULL", __func__);
13197 VOS_ASSERT(0);
13198 return;
13199 }
13200
13201 /* VOS message wrapper */
13202 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13203 vosMsg.bodyptr = NULL;
13204 vosMsg.bodyval = 0;
13205
13206 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13207 {
13208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13209 vos_mem_free(pWdaParams->wdaMsgParam);
13210 vos_mem_free(pWdaParams);
13211 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13212 }
13213
13214 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013215}
13216#endif
13217
13218/*
13219 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13220 * Request to WDI to set Tx Per Tracking configurations
13221 */
13222VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13223{
13224 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013225 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13227 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13228 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13229 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013231 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013232 if(NULL == pwdiSetTxPerTrackingReqParams)
13233 {
13234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 vos_mem_free(pTxPerTrackingParams);
13237 VOS_ASSERT(0);
13238 return VOS_STATUS_E_NOMEM;
13239 }
13240 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13241 if(NULL == pWdaParams)
13242 {
13243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013244 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013245 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13246 vos_mem_free(pTxPerTrackingParams);
13247 VOS_ASSERT(0);
13248 return VOS_STATUS_E_NOMEM;
13249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013250 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13251 pTxPerTrackingParams->ucTxPerTrackingEnable;
13252 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13253 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13254 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13255 pTxPerTrackingParams->ucTxPerTrackingRatio;
13256 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13257 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013258 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13259 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013260 /* Store param pointer as passed in by caller */
13261 /* store Params pass it to WDI
13262 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13263 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13264 pWdaParams->pWdaContext = pWDA;
13265 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013266 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013267 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013268 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013269 {
13270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13271 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013272 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013273 vos_mem_free(pWdaParams->wdaMsgParam) ;
13274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13275 vos_mem_free(pWdaParams) ;
13276 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013277 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013278
13279}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013280/*
13281 * FUNCTION: WDA_HALDumpCmdCallback
13282 * Send the VOS complete .
13283 */
13284void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13285 void* pUserData)
13286{
13287 tANI_U8 *buffer = NULL;
13288 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013289 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013290 if(NULL == pWdaParams)
13291 {
13292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013293 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013294 VOS_ASSERT(0) ;
13295 return ;
13296 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013297
13298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13299 "%s: WDA HAL DUMP Resp Received",__func__);
13300
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 pWDA = pWdaParams->pWdaContext;
13302 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 if(wdiRspParams->usBufferLen > 0)
13304 {
13305 /*Copy the Resp data to UMAC supplied buffer*/
13306 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13307 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013308
13309 if (!pWdaParams->wdaHALDumpAsync)
13310 {/* Indicate VOSS about the start complete */
13311 vos_WDAComplete_cback(pWDA->pVosContext);
13312 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13314 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013315 return ;
13316}
13317
Jeff Johnson295189b2012-06-20 16:38:30 -070013318/*
13319 * FUNCTION: WDA_ProcessHALDumpCmdReq
13320 * Send Dump command to WDI
13321 */
13322VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13323 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013324 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013325{
13326 WDI_Status status = WDI_STATUS_SUCCESS;
13327 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13328 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013329 tWDA_HalDumpReqParams *pWdaParams ;
13330
Jeff Johnson295189b2012-06-20 16:38:30 -070013331 pVosContextType pVosContext = NULL;
13332 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013333 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13334 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013335 if(pVosContext)
13336 {
13337 if (pVosContext->isLogpInProgress)
13338 {
13339 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13340 "%s:LOGP in Progress. Ignore!!!", __func__);
13341 return VOS_STATUS_E_BUSY;
13342 }
13343 }
13344 else
13345 {
13346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13347 "%s: VOS Context Null", __func__);
13348 return VOS_STATUS_E_RESOURCES;
13349 }
13350
Siddharth Bhal68115602015-01-18 20:44:55 +053013351 if (NULL == pVosContext->pWDAContext)
13352 {
13353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13354 "%s: WDA Context Null", __func__);
13355 return VOS_STATUS_E_RESOURCES;
13356 }
13357 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013358 if(NULL == pWdaParams)
13359 {
13360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013362 return VOS_STATUS_E_NOMEM;
13363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013364 /* Allocate memory WDI request structure*/
13365 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13366 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13367 if(NULL == wdiHALDumpCmdReqParam)
13368 {
13369 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13370 "WDA HAL DUMP Command buffer alloc fail");
13371 vos_mem_free(pWdaParams);
13372 return WDI_STATUS_E_FAILURE;
13373 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013374 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013375 /* Extract the arguments */
13376 wdiHalDumpCmdInfo->command = cmd;
13377 wdiHalDumpCmdInfo->argument1 = arg1;
13378 wdiHalDumpCmdInfo->argument2 = arg2;
13379 wdiHalDumpCmdInfo->argument3 = arg3;
13380 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013381 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013383 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013384
13385 /* Response message will be passed through the buffer */
13386 pWdaParams->wdaMsgParam = (void *)pBuffer;
13387
13388 /* store Params pass it to WDI */
13389 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013390
13391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13392 "%s: WDA HAL DUMP Command sent",__func__);
13393
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013395 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13396 pWdaParams);
13397 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13398 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013399 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013400 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13401 WDA_DUMPCMD_WAIT_TIMEOUT );
13402 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013403 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013404 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13405 {
13406 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13407 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13408 }
13409 else
13410 {
13411 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13412 "%s: WDA_HALDUMP reporting other error",__func__);
13413 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053013414 if (!(vos_isLoadUnloadInProgress() ||
13415 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
13416 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 }
13419 return status;
13420}
Jeff Johnson295189b2012-06-20 16:38:30 -070013421#ifdef WLAN_FEATURE_GTK_OFFLOAD
13422/*
13423 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13424 * Request to WDI to get GTK Offload Information
13425 */
13426VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13427 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13428{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013429 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013430 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13431 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13432 tWDA_ReqParams *pWdaParams ;
13433
13434 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13435 {
13436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013438 VOS_ASSERT(0);
13439 return VOS_STATUS_E_NOMEM;
13440 }
13441
13442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13443 if(NULL == pWdaParams)
13444 {
13445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013446 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013447 VOS_ASSERT(0);
13448 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13449 return VOS_STATUS_E_NOMEM;
13450 }
13451
Yue Ma7f44bbe2013-04-12 11:47:39 -070013452 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13453 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013454
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 /* Store Params pass it to WDI */
13456 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13457 pWdaParams->pWdaContext = pWDA;
13458 /* Store param pointer as passed in by caller */
13459 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13460
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013461 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013462 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013463
Yue Ma7f44bbe2013-04-12 11:47:39 -070013464 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013465
13466 if(IS_WDI_STATUS_FAILURE(status))
13467 {
13468 /* failure returned by WDI API */
13469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13470 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13472 vos_mem_free(pWdaParams) ;
13473 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13474 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13475 }
13476
13477 return CONVERT_WDI2VOS_STATUS(status) ;
13478}
13479#endif // WLAN_FEATURE_GTK_OFFLOAD
13480
13481/*
Yue Mab9c86f42013-08-14 15:59:08 -070013482 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13483 *
13484 */
13485VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13486 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13487{
13488 WDI_Status wdiStatus;
13489 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13490
13491 addPeriodicTxPtrnParams =
13492 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13493
13494 if (NULL == addPeriodicTxPtrnParams)
13495 {
13496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13497 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13498 __func__);
13499
13500 return VOS_STATUS_E_NOMEM;
13501 }
13502
13503 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13504 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13505
13506 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13507 addPeriodicTxPtrnParams->pUserData = pWDA;
13508
13509 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13510
13511 if (WDI_STATUS_PENDING == wdiStatus)
13512 {
13513 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13514 "Pending received for %s:%d", __func__, __LINE__ );
13515 }
13516 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13517 {
13518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13519 "Failure in %s:%d", __func__, __LINE__ );
13520 }
13521
13522 vos_mem_free(addPeriodicTxPtrnParams);
13523
13524 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13525}
13526
13527/*
13528 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13529 *
13530 */
13531VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13532 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13533{
13534 WDI_Status wdiStatus;
13535 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13536
13537 delPeriodicTxPtrnParams =
13538 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13539
13540 if (NULL == delPeriodicTxPtrnParams)
13541 {
13542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13543 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13544 __func__);
13545
13546 return VOS_STATUS_E_NOMEM;
13547 }
13548
13549 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13550 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13551
13552 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13553 delPeriodicTxPtrnParams->pUserData = pWDA;
13554
13555 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13556
13557 if (WDI_STATUS_PENDING == wdiStatus)
13558 {
13559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13560 "Pending received for %s:%d", __func__, __LINE__ );
13561 }
13562 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13563 {
13564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13565 "Failure in %s:%d", __func__, __LINE__ );
13566 }
13567
13568 vos_mem_free(delPeriodicTxPtrnParams);
13569
13570 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13571}
13572
Abhishek Singh00b71972016-01-07 10:51:04 +053013573/*
13574 * FUNCTION: WDA_ProcessRateUpdateInd
13575 *
13576 */
13577VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13578 tSirRateUpdateInd *pRateUpdateParams)
13579{
13580 WDI_Status wdiStatus;
13581 WDI_RateUpdateIndParams rateUpdateParams;
13582
13583 vos_mem_copy(rateUpdateParams.bssid,
13584 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13585
13586 rateUpdateParams.ucastDataRateTxFlag =
13587 pRateUpdateParams->ucastDataRateTxFlag;
13588 rateUpdateParams.rmcDataRateTxFlag =
13589 pRateUpdateParams->rmcDataRateTxFlag;
13590 rateUpdateParams.mcastDataRate24GHzTxFlag =
13591 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13592 rateUpdateParams.mcastDataRate5GHzTxFlag =
13593 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13594
13595 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13596 rateUpdateParams.rmcDataRate =
13597 pRateUpdateParams->rmcDataRate;
13598 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13599 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13600
13601 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13602 rateUpdateParams.pUserData = pWDA;
13603
13604 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13605
13606 if (WDI_STATUS_PENDING == wdiStatus)
13607 {
13608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13609 "Pending received for %s:%d", __func__, __LINE__ );
13610 }
13611 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13612 {
13613 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13614 "Failure in %s:%d", __func__, __LINE__ );
13615 }
13616
13617 vos_mem_free(pRateUpdateParams);
13618
13619 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13620}
13621
13622
Rajeev79dbe4c2013-10-05 11:03:42 +053013623#ifdef FEATURE_WLAN_BATCH_SCAN
13624/*
13625 * FUNCTION: WDA_ProcessStopBatchScanInd
13626 *
13627 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13628 *
13629 * PARAM:
13630 * pWDA: pointer to WDA context
13631 * pReq: pointer to stop batch scan request
13632 */
13633VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13634 tSirStopBatchScanInd *pReq)
13635{
13636 WDI_Status wdiStatus;
13637 WDI_StopBatchScanIndType wdiReq;
13638
13639 wdiReq.param = pReq->param;
13640
13641 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13642
13643 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13644 {
13645 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13646 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13647 }
13648
13649 vos_mem_free(pReq);
13650
13651 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13652}
13653/*==========================================================================
13654 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13655
13656 DESCRIPTION
13657 API to pull batch scan result from FW
13658
13659 PARAMETERS
13660 pWDA: Pointer to WDA context
13661 pGetBatchScanReq: Pointer to get batch scan result indication
13662
13663 RETURN VALUE
13664 NONE
13665
13666===========================================================================*/
13667VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13668 tSirTriggerBatchScanResultInd *pReq)
13669{
13670 WDI_Status wdiStatus;
13671 WDI_TriggerBatchScanResultIndType wdiReq;
13672
13673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13674 "------> %s " ,__func__);
13675
13676 wdiReq.param = pReq->param;
13677
13678 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13679
13680 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13681 {
13682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13683 "Trigger batch scan result ind failed %s:%d",
13684 __func__, wdiStatus);
13685 }
13686
13687 vos_mem_free(pReq);
13688
13689 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13690}
13691
13692/*==========================================================================
13693 FUNCTION WDA_SetBatchScanRespCallback
13694
13695 DESCRIPTION
13696 API to process set batch scan response from FW
13697
13698 PARAMETERS
13699 pRsp: Pointer to set batch scan response
13700 pUserData: Pointer to user data
13701
13702 RETURN VALUE
13703 NONE
13704
13705===========================================================================*/
13706void WDA_SetBatchScanRespCallback
13707(
13708 WDI_SetBatchScanRspType *pRsp,
13709 void* pUserData
13710)
13711{
13712 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13713 tpAniSirGlobal pMac;
13714 void *pCallbackContext;
13715 tWDA_CbContext *pWDA = NULL ;
13716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13717
13718
13719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13720 "<------ %s " ,__func__);
13721 if (NULL == pWdaParams)
13722 {
13723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13724 "%s: pWdaParams received NULL", __func__);
13725 VOS_ASSERT(0) ;
13726 return ;
13727 }
13728
13729 /*extract WDA context*/
13730 pWDA = pWdaParams->pWdaContext;
13731 if (NULL == pWDA)
13732 {
13733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13734 "%s:pWDA is NULL can't invole HDD callback",
13735 __func__);
13736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13737 vos_mem_free(pWdaParams->wdaMsgParam);
13738 vos_mem_free(pWdaParams);
13739 VOS_ASSERT(0);
13740 return;
13741 }
13742
13743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13744 vos_mem_free(pWdaParams->wdaMsgParam);
13745 vos_mem_free(pWdaParams);
13746
13747 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13748 if (NULL == pMac)
13749 {
13750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13751 "%s:pMac is NULL", __func__);
13752 VOS_ASSERT(0);
13753 return;
13754 }
13755
13756 pHddSetBatchScanRsp =
13757 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13758 if (NULL == pHddSetBatchScanRsp)
13759 {
13760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13761 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13762 VOS_ASSERT(0);
13763 return;
13764 }
13765
13766 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13767
13768 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13769 /*call hdd callback with set batch scan response data*/
13770 if(pMac->pmc.setBatchScanReqCallback)
13771 {
13772 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13773 }
13774 else
13775 {
13776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13777 "%s:HDD callback is null", __func__);
13778 VOS_ASSERT(0);
13779 }
13780
13781 vos_mem_free(pHddSetBatchScanRsp);
13782 return ;
13783}
13784
13785/*==========================================================================
13786 FUNCTION WDA_ProcessSetBatchScanReq
13787
13788 DESCRIPTION
13789 API to send set batch scan request to WDI
13790
13791 PARAMETERS
13792 pWDA: Pointer to WDA context
13793 pSetBatchScanReq: Pointer to set batch scan req
13794
13795 RETURN VALUE
13796 NONE
13797
13798===========================================================================*/
13799VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13800 tSirSetBatchScanReq *pSetBatchScanReq)
13801{
13802 WDI_Status status;
13803 tWDA_ReqParams *pWdaParams ;
13804 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13805
13806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13807 "------> %s " ,__func__);
13808
13809 pWdiSetBatchScanReq =
13810 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13811 if (NULL == pWdiSetBatchScanReq)
13812 {
13813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13814 "%s: VOS MEM Alloc Failure", __func__);
13815 vos_mem_free(pSetBatchScanReq);
13816 VOS_ASSERT(0);
13817 return VOS_STATUS_E_NOMEM;
13818 }
13819
13820 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13821 if (NULL == pWdaParams)
13822 {
13823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13824 "%s: VOS MEM Alloc Failure", __func__);
13825 VOS_ASSERT(0);
13826 vos_mem_free(pSetBatchScanReq);
13827 vos_mem_free(pWdiSetBatchScanReq);
13828 return VOS_STATUS_E_NOMEM;
13829 }
13830
13831 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13832 pWdiSetBatchScanReq->numberOfScansToBatch =
13833 pSetBatchScanReq->numberOfScansToBatch;
13834 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13835 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13836 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13837
13838 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13839 pWdaParams->pWdaContext = pWDA;
13840 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13841
13842 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13843 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13844 if (IS_WDI_STATUS_FAILURE(status))
13845 {
13846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13847 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13849 vos_mem_free(pWdaParams->wdaMsgParam);
13850 vos_mem_free(pWdaParams);
13851 }
13852 return CONVERT_WDI2VOS_STATUS(status);
13853}
13854
13855#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013856/*
13857 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13858 *
13859 * DESCRIPTION: This function sends start/update OBSS scan
13860 * inidcation message to WDI
13861 *
13862 * PARAM:
13863 * pWDA: pointer to WDA context
13864 * pReq: pointer to start OBSS scan request
13865 */
13866VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13867 tSirHT40OBSSScanInd *pReq)
13868{
13869 WDI_Status status;
13870 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13871 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013872
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13874 "------> %s " ,__func__);
13875 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13876 wdiOBSSScanParams.pUserData = pWDA;
13877
13878 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13879 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13880 pWdiOBSSScanInd->scanType = pReq->scanType;
13881 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13882 pReq->OBSSScanActiveDwellTime;
13883 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13884 pReq->OBSSScanPassiveDwellTime;
13885 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13886 pReq->BSSChannelWidthTriggerScanInterval;
13887 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13888 pReq->BSSWidthChannelTransitionDelayFactor;
13889 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13890 pReq->OBSSScanActiveTotalPerChannel;
13891 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13892 pReq->OBSSScanPassiveTotalPerChannel;
13893 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13894 pReq->OBSSScanActivityThreshold;
13895 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13896 vos_mem_copy(pWdiOBSSScanInd->channels,
13897 pReq->channels,
13898 pReq->channelCount);
13899 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13900 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13901 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13902 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13903 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13904
13905 vos_mem_copy(pWdiOBSSScanInd->ieField,
13906 pReq->ieField,
13907 pReq->ieFieldLen);
13908
13909 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13910 if (WDI_STATUS_PENDING == status)
13911 {
13912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13913 "Pending received for %s:%d ",__func__,__LINE__ );
13914 }
13915 else if (WDI_STATUS_SUCCESS_SYNC != status)
13916 {
13917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13918 "Failure in %s:%d ",__func__,__LINE__ );
13919 }
13920 return CONVERT_WDI2VOS_STATUS(status) ;
13921}
13922/*
13923 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13924 *
13925 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13926 *
13927 * PARAM:
13928 * pWDA: pointer to WDA context
13929 * pReq: pointer to stop batch scan request
13930 */
13931VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13932 tANI_U8 *bssIdx)
13933{
13934 WDI_Status status;
13935
13936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13937 "------> %s " ,__func__);
13938
13939 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13940 if (WDI_STATUS_PENDING == status)
13941 {
13942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13943 "Pending received for %s:%d ",__func__,__LINE__ );
13944 }
13945 else if (WDI_STATUS_SUCCESS_SYNC != status)
13946 {
13947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13948 "Failure in %s:%d ",__func__,__LINE__ );
13949 }
13950 return CONVERT_WDI2VOS_STATUS(status) ;
13951}
Yue Mab9c86f42013-08-14 15:59:08 -070013952/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013953 * -------------------------------------------------------------------------
13954 * DATA interface with WDI for Mgmt Frames
13955 * -------------------------------------------------------------------------
13956 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013957/*
13958 * FUNCTION: WDA_TxComplete
13959 * Callback function for the WDA_TxPacket
13960 */
13961VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13962 VOS_STATUS status )
13963{
13964
13965 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13966 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013967 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013968
Mihir Shete63341222015-03-24 15:39:18 +053013969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13970
Jeff Johnson295189b2012-06-20 16:38:30 -070013971 if(NULL == wdaContext)
13972 {
13973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13974 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013975 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013976 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013977 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013978 return VOS_STATUS_E_FAILURE;
13979 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013980
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013981 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013982 /*Check if frame was timed out or not*/
13983 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13984 (v_PVOID_t)&uUserData);
13985
13986 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13987 {
13988 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013989 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13990 "%s: MGMT Frame Tx timed out",
13991 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013992 vos_pkt_return_packet(pData);
13993 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013994 return VOS_STATUS_SUCCESS;
13995 }
13996
Jeff Johnson295189b2012-06-20 16:38:30 -070013997 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13998 if( NULL!=wdaContext->pTxCbFunc)
13999 {
14000 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014001 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014002 {
14003 wdaContext->pTxCbFunc(pMac, pData);
14004 }
14005 else
14006 {
14007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014008 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014009 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014011 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014012 return status;
14013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014014 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014015 else {
14016 wdaContext->mgmt_pktfree_fail++;
14017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14018 "%s:packet (%p) userData (%lx) is not freed",
14019 __func__, pData, uUserData);
14020 }
14021 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014022
14023 /*
14024 * Trigger the event to bring the HAL TL Tx complete function to come
14025 * out of wait
14026 * Let the coe above to complete the packet first. When this event is set,
14027 * the thread waiting for the event may run and set Vospacket_freed causing the original
14028 * packet not being freed.
14029 */
14030 status = vos_event_set(&wdaContext->txFrameEvent);
14031 if(!VOS_IS_STATUS_SUCCESS(status))
14032 {
14033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014034 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014035 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014036 return status;
14037}
Jeff Johnson295189b2012-06-20 16:38:30 -070014038/*
14039 * FUNCTION: WDA_TxPacket
14040 * Forward TX management frame to WDI
14041 */
14042VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14043 void *pFrmBuf,
14044 tANI_U16 frmLen,
14045 eFrameType frmType,
14046 eFrameTxDir txDir,
14047 tANI_U8 tid,
14048 pWDATxRxCompFunc pCompFunc,
14049 void *pData,
14050 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014051 tANI_U32 txFlag,
14052 tANI_U32 txBdToken
14053 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014054{
14055 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14056 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14057 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14058 tANI_U8 eventIdx = 0;
14059 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14060 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014061 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014062 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014063
Jeff Johnson295189b2012-06-20 16:38:30 -070014064 if((NULL == pWDA)||(NULL == pFrmBuf))
14065 {
14066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014067 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014068 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014069 VOS_ASSERT(0);
14070 return VOS_STATUS_E_FAILURE;
14071 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014072
Jeff Johnson295189b2012-06-20 16:38:30 -070014073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014074 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14075 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14077 if(NULL == pMac)
14078 {
14079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014080 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014081 VOS_ASSERT(0);
14082 return VOS_STATUS_E_FAILURE;
14083 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014084
Jeff Johnson295189b2012-06-20 16:38:30 -070014085 /* store the call back function in WDA context */
14086 pWDA->pTxCbFunc = pCompFunc;
14087 /* store the call back for the function of ackTxComplete */
14088 if( pAckTxComp )
14089 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014090 if( NULL != pWDA->pAckTxCbFunc )
14091 {
14092 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014094 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014095 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014096 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014097
Jeff Johnsone7245742012-09-05 17:12:55 -070014098 if( VOS_STATUS_SUCCESS !=
14099 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14100 {
14101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14102 "Tx Complete timeout Timer Stop Failed ");
14103 }
14104 else
14105 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014107 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014108 }
14109 }
14110
14111 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14112 pWDA->pAckTxCbFunc = pAckTxComp;
14113 if( VOS_STATUS_SUCCESS !=
14114 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14115 {
14116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14117 "Tx Complete Timer Start Failed ");
14118 pWDA->pAckTxCbFunc = NULL;
14119 return eHAL_STATUS_FAILURE;
14120 }
14121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 /* Reset the event to be not signalled */
14123 status = vos_event_reset(&pWDA->txFrameEvent);
14124 if(!VOS_IS_STATUS_SUCCESS(status))
14125 {
14126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014127 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014128 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14129 if( pAckTxComp )
14130 {
14131 pWDA->pAckTxCbFunc = NULL;
14132 if( VOS_STATUS_SUCCESS !=
14133 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14134 {
14135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14136 "Tx Complete timeout Timer Stop Failed ");
14137 }
14138 }
14139 return VOS_STATUS_E_FAILURE;
14140 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014141
14142 /* If Peer Sta mask is set don't overwrite to self sta */
14143 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014144 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014145 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014147 else
14148 {
Ganesh K08bce952012-12-13 15:04:41 -080014149 /* Get system role, use the self station if in unknown role or STA role */
14150 systemRole = wdaGetGlobalSystemRole(pMac);
14151 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14152 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014153#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014154 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014155#endif
Ganesh K08bce952012-12-13 15:04:41 -080014156 ))
14157 {
14158 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14159 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014160 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014161
Jeff Johnsone7245742012-09-05 17:12:55 -070014162 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14163 disassoc frame reaches the HW, HAL has already deleted the peer station */
14164 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014165 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014166 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014167 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014169 /*Send Probe request frames on self sta idx*/
14170 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014172 /* Since we donot want probe responses to be retried, send probe responses
14173 through the NO_ACK queues */
14174 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14175 {
14176 //probe response is sent out using self station and no retries options.
14177 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14178 }
14179 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14180 {
14181 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14182 }
14183 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014184#ifdef FEATURE_WLAN_TDLS
14185 /* TDLS Management frames are sent using Peer Sta mask */
14186 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14187 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14188 {
14189 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14190
14191 }
14192#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014193 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014194
14195 /*Set frame tag to 0
14196 We will use the WDA user data in order to tag a frame as expired*/
14197 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14198 (v_PVOID_t)0);
14199
14200
14201 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014202 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14203 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 {
14205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014206 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014207 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014208 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 -070014209 if( pAckTxComp )
14210 {
14211 pWDA->pAckTxCbFunc = NULL;
14212 if( VOS_STATUS_SUCCESS !=
14213 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14214 {
14215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14216 "Tx Complete timeout Timer Stop Failed ");
14217 }
14218 }
14219 return VOS_STATUS_E_FAILURE;
14220 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014221 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014222 /*
14223 * Wait for the event to be set by the TL, to get the response of TX
14224 * complete, this event should be set by the Callback function called by TL
14225 */
14226 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14227 &eventIdx);
14228 if(!VOS_IS_STATUS_SUCCESS(status))
14229 {
14230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14231 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014232 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014233 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014234 /*Tag Frame as timed out for later deletion*/
14235 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14236 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014237 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14238 after the packet gets completed(packet freed once)*/
14239
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014240 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14241
14242 /*
14243 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14244 * TX completion call back
14245 */
14246 VOS_SMP_MB;
14247 vos_lock_release(&pWDA->mgmt_pkt_lock);
14248
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014249 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014250 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014251
Abhishek Singh837adf22015-10-01 17:37:37 +053014252 if (vos_isFatalEventEnabled())
14253 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14254 WLAN_LOG_INDICATOR_HOST_DRIVER,
14255 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14256 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014257
Jeff Johnson295189b2012-06-20 16:38:30 -070014258 if( pAckTxComp )
14259 {
14260 pWDA->pAckTxCbFunc = NULL;
14261 if( VOS_STATUS_SUCCESS !=
14262 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14263 {
14264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14265 "Tx Complete timeout Timer Stop Failed ");
14266 }
14267 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014268 pWDA->mgmtTxfailureCnt++;
14269
14270 /* SSR if timeout continously for
14271 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14272 */
14273 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14274 pWDA->mgmtTxfailureCnt)
14275 {
14276 vos_wlanRestart();
14277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014278 status = VOS_STATUS_E_FAILURE;
14279 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014280
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014281#ifdef WLAN_DUMP_MGMTFRAMES
14282 if (VOS_IS_STATUS_SUCCESS(status))
14283 {
14284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14285 "%s() TX packet : SubType %d", __func__,pFc->subType);
14286 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14287 pData, frmLen);
14288 }
14289#endif
14290
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014291 if (VOS_IS_STATUS_SUCCESS(status))
14292 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014293 pWDA->mgmtTxfailureCnt = 0;
14294 if ((vos_timer_get_system_time() - time_snapshot) >=
14295 WDA_TX_TIME_THRESHOLD)
14296 {
14297 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14298 "Tx Complete took %lu ms",
14299 vos_timer_get_system_time() - time_snapshot);
14300 }
14301
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014302 if (pMac->fEnableDebugLog & 0x1)
14303 {
14304 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14305 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14306 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14307 {
14308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14309 pFc->type, pFc->subType);
14310 }
14311 }
14312 }
14313
14314
Jeff Johnson295189b2012-06-20 16:38:30 -070014315 return status;
14316}
Jeff Johnson295189b2012-06-20 16:38:30 -070014317/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014318 * FUNCTION: WDA_ProcessDHCPStartInd
14319 * Forward DHCP Start to WDI
14320 */
14321static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14322 tAniDHCPInd *dhcpStartInd)
14323{
14324 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014325 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014326
c_hpothu0b0cab72014-02-13 21:52:40 +053014327 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14328 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014329 sizeof(tSirMacAddr));
14330
c_hpothu0b0cab72014-02-13 21:52:40 +053014331 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014332
c_hpothu0b0cab72014-02-13 21:52:40 +053014333 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014334 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14336 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014337 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014338 else if (WDI_STATUS_SUCCESS_SYNC != status)
14339 {
14340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14341 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14342 }
14343
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014344 vos_mem_free(dhcpStartInd);
14345 return CONVERT_WDI2VOS_STATUS(status) ;
14346}
14347
14348 /*
14349 * FUNCTION: WDA_ProcessDHCPStopInd
14350 * Forward DHCP Stop to WDI
14351 */
14352 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14353 tAniDHCPInd *dhcpStopInd)
14354 {
14355 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014356 WDI_DHCPInd wdiDHCPInd;
14357
14358 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14359 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14360
14361 status = WDI_dhcpStopInd(&wdiDHCPInd);
14362
14363 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014364 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14366 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014367 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014368 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014369 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14371 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014372 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014373
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014374 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014375
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014376 return CONVERT_WDI2VOS_STATUS(status) ;
14377 }
14378
Abhishek Singh00b71972016-01-07 10:51:04 +053014379#ifdef WLAN_FEATURE_RMC
14380
14381void
14382WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14383{
14384 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14385 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14386
14387 switch (wdiRmcResponse->cmd)
14388 {
14389 case eWDI_BECOME_RULER_CMD :
14390 {
14391 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14392
14393 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14394 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14395
14396 if (NULL == pRmcBecomeRulerInd)
14397 {
14398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14399 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14400 break;
14401 }
14402
14403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14404 "Received eWDI_BECOME_RULER_CMD from WDI");
14405
14406 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14407
14408 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14409 wdiRmcResponse->mcastTransmitter,
14410 sizeof(tSirMacAddr));
14411 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14412 wdiRmcResponse->mcastGroup,
14413 sizeof(tSirMacAddr));
14414
14415 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14416 (void *)pRmcBecomeRulerInd, 0) ;
14417 break;
14418 }
14419 case eWDI_SUGGEST_RULER_CMD :
14420 {
14421 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14422
14423 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14424 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14425
14426 if (NULL == pRmcRulerSelectInd)
14427 {
14428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14429 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14430 break;
14431 }
14432
14433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14434 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14435
14436 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14437
14438 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14439 wdiRmcResponse->mcastTransmitter,
14440 sizeof(tSirMacAddr));
14441 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14442 wdiRmcResponse->mcastGroup,
14443 sizeof(tSirMacAddr));
14444 vos_mem_copy(pRmcRulerSelectInd->ruler,
14445 wdiRmcResponse->ruler,
14446 sizeof(pRmcRulerSelectInd->ruler));
14447
14448 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14449 (void *)pRmcRulerSelectInd, 0) ;
14450 break;
14451 }
14452 }
14453
14454 /* free the config structure */
14455 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14456 {
14457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14458 }
14459 vos_mem_free(pWdaParams->wdaMsgParam);
14460 vos_mem_free(pWdaParams);
14461
14462}
14463
14464void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14465{
14466 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14467
14468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14469 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14470
14471 if (NULL == pWdaParams)
14472 {
14473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14474 "%s: pWdaParams received NULL", __func__);
14475 VOS_ASSERT(0);
14476 return;
14477 }
14478
14479 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14480 {
14481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14482 vos_mem_free(pWdaParams->wdaMsgParam);
14483 vos_mem_free(pWdaParams);
14484 }
14485
14486 return;
14487}
14488
14489static VOS_STATUS
14490WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14491 tSirRmcRulerReq *rmcRulerReq)
14492{
14493 WDI_Status status;
14494 WDI_RmcRulerReqParams *wdiRulerReq;
14495 tWDA_ReqParams *pWdaParams;
14496
14497 wdiRulerReq = (WDI_RmcRulerReqParams *)
14498 vos_mem_malloc(sizeof(*wdiRulerReq));
14499
14500 if (NULL == wdiRulerReq)
14501 {
14502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14503 "%s: VOS MEM Alloc Failure", __func__);
14504 VOS_ASSERT(0);
14505 vos_mem_free(rmcRulerReq);
14506 return VOS_STATUS_E_NOMEM;
14507 }
14508
14509 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14510 if (NULL == pWdaParams)
14511 {
14512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14513 "%s: VOS MEM Alloc Failure", __func__);
14514 VOS_ASSERT(0);
14515 vos_mem_free(rmcRulerReq);
14516 vos_mem_free(wdiRulerReq);
14517 return VOS_STATUS_E_NOMEM;
14518 }
14519
14520 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14521 /* Store param pointer as passed in by caller */
14522 pWdaParams->wdaMsgParam = rmcRulerReq;
14523 pWdaParams->pWdaContext = pWDA;
14524
14525 wdiRulerReq->cmd = rmcRulerReq->cmd;
14526
14527 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14528 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14529 vos_mem_copy(wdiRulerReq->mcastGroup,
14530 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14531 vos_mem_copy(wdiRulerReq->blacklist,
14532 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14533
14534 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14535
14536 status = WDI_RmcRulerReq(wdiRulerReq,
14537 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14538 (void *)pWdaParams);
14539 if (IS_WDI_STATUS_FAILURE(status))
14540 {
14541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14542 vos_mem_free(pWdaParams->wdaMsgParam);
14543 vos_mem_free(pWdaParams) ;
14544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14545 "Ruler Request failed");
14546 }
14547 return CONVERT_WDI2VOS_STATUS(status) ;
14548}
14549
14550/*
14551 * FUNCTION: WDA_ProcessRMCUpdateInd
14552 * Forward Update Indication to WDI
14553*/
14554static VOS_STATUS
14555WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14556 tSirRmcUpdateInd *rmcUpdateInd)
14557{
14558 WDI_Status status;
14559 WDI_RmcUpdateIndParams wdiUpdateInd;
14560
14561 /* Copy the paramters for Update_Ind */
14562
14563 wdiUpdateInd.indication = rmcUpdateInd->indication;
14564 wdiUpdateInd.role = rmcUpdateInd->role;
14565
14566 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14567 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14568
14569 vos_mem_copy(wdiUpdateInd.mcastGroup,
14570 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14571
14572 vos_mem_copy(wdiUpdateInd.mcastRuler,
14573 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14574
14575 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14576 wdiUpdateInd.pUserData = pWDA;
14577 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14578
14579 if (WDI_STATUS_PENDING == status)
14580 {
14581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14582 "Pending received for %s:%d ",__func__,__LINE__ );
14583 }
14584 else if (WDI_STATUS_SUCCESS_SYNC != status)
14585 {
14586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14587 "Failure in %s:%d ",__func__,__LINE__ );
14588 }
14589
14590 vos_mem_free(rmcUpdateInd);
14591
14592 return CONVERT_WDI2VOS_STATUS(status) ;
14593}
14594
14595void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14596 ,void* pUserData)
14597{
14598
14599 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14600 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14601 tWDA_CbContext *pWDA;
14602 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14603 vos_msg_t vosMsg;
14604 v_U32_t wdaCnt = 0;
14605
14606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14607 "<------ %s " ,__func__);
14608 if (NULL == pWdaParams)
14609 {
14610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14611 "%s: pWdaParams received NULL", __func__);
14612 VOS_ASSERT(0);
14613 return;
14614 }
14615
14616 if (NULL == peerInfoRspParams)
14617 {
14618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14619 "%s: peerInfoRspParams received NULL", __func__);
14620 if(pWdaParams->wdaMsgParam)
14621 vos_mem_free(pWdaParams->wdaMsgParam);
14622 if(pWdaParams->wdaWdiApiMsgParam)
14623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14624 vos_mem_free(pWdaParams);
14625
14626 VOS_ASSERT(0);
14627 return;
14628 }
14629
14630 pIbssPeerInfoParams =
14631 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14632
14633 pIbssGetPeerInfoRsp =
14634 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14635
14636 if(NULL == pIbssGetPeerInfoRsp)
14637 {
14638 if(pWdaParams->wdaMsgParam)
14639 vos_mem_free(pWdaParams->wdaMsgParam);
14640 if(pWdaParams->wdaWdiApiMsgParam)
14641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14642 vos_mem_free(pWdaParams);
14643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14644 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14645 __func__);
14646 VOS_ASSERT(0);
14647 return;
14648
14649 }
14650
14651 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14652
14653
14654 if (peerInfoRspParams->wdiNumPeers > 32)
14655 {
14656 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14657 /* free the mem and return */
14658 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14659 if(pWdaParams->wdaMsgParam)
14660 vos_mem_free(pWdaParams->wdaMsgParam);
14661 if(pWdaParams->wdaWdiApiMsgParam)
14662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14663 vos_mem_free(pWdaParams);
14664
14665 return;
14666 }
14667
14668 /* Message Header */
14669 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14670 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14671 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14672 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14673
14674 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14675 {
14676 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14677 tSirIbssPeerInfoParams *pSmeTmp =
14678 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14679
14680 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14681 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14682 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14683 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14684 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14685 }
14686
14687 /* VOS message wrapper */
14688 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14689 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14690 vosMsg.bodyval = 0;
14691
14692 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14693 {
14694 /* free the mem and return */
14695 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14696 }
14697
14698 if(NULL != pWdaParams)
14699 {
14700 if(pWdaParams->wdaMsgParam)
14701 vos_mem_free(pWdaParams->wdaMsgParam);
14702 if(pWdaParams->wdaWdiApiMsgParam)
14703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14704 vos_mem_free(pWdaParams);
14705 }
14706
14707 return;
14708}
14709
14710static VOS_STATUS
14711WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14712 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14713{
14714 WDI_Status status;
14715 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14716 tWDA_ReqParams *pWdaParams;
14717
14718 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14719 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14720 if (NULL == wdiPeerInfoReq)
14721 {
14722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14723 "%s: VOS MEM Alloc Failure", __func__);
14724 VOS_ASSERT(0);
14725 vos_mem_free(ibssPeerInfoReqParams);
14726 return VOS_STATUS_E_NOMEM;
14727 }
14728
14729 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14730 if (NULL == pWdaParams)
14731 {
14732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14733 "%s: VOS MEM Alloc Failure", __func__);
14734 VOS_ASSERT(0);
14735 vos_mem_free(wdiPeerInfoReq);
14736 vos_mem_free(ibssPeerInfoReqParams);
14737 return VOS_STATUS_E_NOMEM;
14738 }
14739
14740 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14741 /* Store param pointer as passed in by caller */
14742 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14743 pWdaParams->pWdaContext = pWDA;
14744
14745 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14746 ibssPeerInfoReqParams->allPeerInfoReqd;
14747 wdiPeerInfoReq->wdiStaIdx =
14748 ibssPeerInfoReqParams->staIdx;
14749
14750 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14751 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14752 (void *)pWdaParams);
14753 if (IS_WDI_STATUS_FAILURE(status))
14754 {
14755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14756 vos_mem_free(pWdaParams->wdaMsgParam);
14757 vos_mem_free(pWdaParams) ;
14758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14759 "IBSS Peer Info Request failed");
14760 }
14761 return CONVERT_WDI2VOS_STATUS(status) ;
14762
14763}
14764
14765/*
14766 * FUNCTION: WDA_ProcessTXFailMonitorInd
14767 * Forward TX Fail Monitor to WDI
14768 */
14769static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14770 tWDA_CbContext *pWDA,
14771 tAniTXFailMonitorInd *txFailMonitorInd)
14772{
14773 WDI_Status status;
14774 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14775 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14776
14777 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14778 "<------ %s " ,__func__);
14779
14780 if (NULL == wdiTXFailMonitorInd)
14781 {
14782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14783 "%s: VOS MEM Alloc Failure", __func__);
14784 VOS_ASSERT(0);
14785 vos_mem_free(txFailMonitorInd);
14786 return VOS_STATUS_E_NOMEM;
14787 }
14788
14789 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14790
14791 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14792 wdiTXFailMonitorInd->pUserData = pWDA;
14793
14794 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14795
14796 if (WDI_STATUS_PENDING == status)
14797 {
14798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14799 "TX Fail Monitor Indication Pending");
14800 }
14801 else if (WDI_STATUS_SUCCESS_SYNC == status)
14802 {
14803 if (0 == txFailMonitorInd->tx_fail_count)
14804 pWDA->txFailIndCallback = NULL;
14805 else
14806 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14807 }
14808 else
14809 {
14810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14811 "TX Fail Monitor Indication Failed");
14812 }
14813
14814 vos_mem_free(wdiTXFailMonitorInd);
14815 vos_mem_free(txFailMonitorInd);
14816
14817 return CONVERT_WDI2VOS_STATUS(status) ;
14818}
14819#endif /* WLAN_FEATURE_RMC */
14820
Kapil Gupta04ab1992016-06-26 13:36:51 +053014821#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14822VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
14823 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
14824{
14825 WDI_Status status;
14826 tWDA_ReqParams *pWdaParams ;
14827 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
14828 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
14829 sizeof(WDI_PERRoamTriggerScanInfo));
14830
14831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14832 "------> %s " ,__func__);
14833
14834 if (NULL == pwdiPERRoamTriggerScanInfo)
14835 {
14836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14837 "%s: VOS MEM Alloc Failure", __func__);
14838 VOS_ASSERT(0);
14839 return VOS_STATUS_E_NOMEM;
14840 }
14841
14842 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14843 if (NULL == pWdaParams)
14844 {
14845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14846 "%s: VOS MEM Alloc Failure", __func__);
14847 VOS_ASSERT(0);
14848 vos_mem_free(pwdiPERRoamTriggerScanInfo);
14849 return VOS_STATUS_E_NOMEM;
14850 }
14851
14852 pwdiPERRoamTriggerScanInfo->roamScanReq =
14853 pPERRoamTriggerScanReqParams->start;
14854
14855 /* Store Params pass it to WDI */
14856 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
14857 pWdaParams->pWdaContext = pWDA;
14858
14859 /* Store param pointer as passed in by caller */
14860 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
14861 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
14862 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
14863 pWdaParams);
14864
14865 if(IS_WDI_STATUS_FAILURE(status))
14866 {
14867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14868 "Failure in Start Roam Candidate trigger Req WDI API" );
14869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14870 vos_mem_free(pWdaParams->wdaMsgParam);
14871 pWdaParams->wdaWdiApiMsgParam = NULL;
14872 pWdaParams->wdaMsgParam = NULL;
14873 }
14874 return CONVERT_WDI2VOS_STATUS(status) ;
14875}
14876#endif
14877
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014878/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014879 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14880 *
14881 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14882 *
14883 * PARAM:
14884 * pWDA: pointer to WDA context
14885 * pReq: pointer to stop batch scan request
14886 */
14887VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14888 tpSpoofMacAddrReqParams pReq)
14889{
14890 WDI_Status wdiStatus;
14891 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14892 tWDA_ReqParams *pWdaParams;
14893
14894 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14895 sizeof(WDI_SpoofMacAddrInfoType));
14896 if(NULL == WDI_SpoofMacAddrInfoParams) {
14897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14898 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14899 VOS_ASSERT(0);
14900 return VOS_STATUS_E_NOMEM;
14901 }
14902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14903 if(NULL == pWdaParams) {
14904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14905 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014906 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014907 VOS_ASSERT(0);
14908 return VOS_STATUS_E_NOMEM;
14909 }
14910
14911 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14912 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14913
14914 pWdaParams->pWdaContext = pWDA;
14915 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014916 pWdaParams->wdaMsgParam = (void *)pReq;
14917
14918 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14919 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14920
Siddharth Bhal171788a2014-09-29 21:02:40 +053014921 /* store Params pass it to WDI */
14922 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14923
14924 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014925 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14926 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014927
14928 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14929 {
14930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14931 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14933 vos_mem_free(pWdaParams->wdaMsgParam);
14934 vos_mem_free(pWdaParams);
14935 }
14936
14937 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14938}
14939
Anjaneedevi Kapparapucee18222016-10-31 14:57:30 +053014940 if (NULL == pRmcRulerSelectInd)
14941 {
14942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14943 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14944 break;
14945 }
14946
14947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14948 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14949
14950 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14951
14952 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14953 wdiRmcResponse->mcastTransmitter,
14954 sizeof(tSirMacAddr));
14955 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14956 wdiRmcResponse->mcastGroup,
14957 sizeof(tSirMacAddr));
14958 vos_mem_copy(pRmcRulerSelectInd->ruler,
14959 wdiRmcResponse->ruler,
14960 sizeof(pRmcRulerSelectInd->ruler));
14961
14962 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14963 (void *)pRmcRulerSelectInd, 0) ;
14964 break;
14965 }
14966 }
14967
14968 /* free the config structure */
14969 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14970 {
14971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14972 }
14973 vos_mem_free(pWdaParams->wdaMsgParam);
14974 vos_mem_free(pWdaParams);
14975
14976}
14977
14978void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14979{
14980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14981
14982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14983 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14984
14985 if (NULL == pWdaParams)
14986 {
14987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14988 "%s: pWdaParams received NULL", __func__);
14989 VOS_ASSERT(0);
14990 return;
14991 }
14992
14993 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14994 {
14995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14996 vos_mem_free(pWdaParams->wdaMsgParam);
14997 vos_mem_free(pWdaParams);
14998 }
14999
15000 return;
15001}
15002
15003static VOS_STATUS
15004WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
15005 tSirRmcRulerReq *rmcRulerReq)
15006{
15007 WDI_Status status;
15008 WDI_RmcRulerReqParams *wdiRulerReq;
15009 tWDA_ReqParams *pWdaParams;
15010
15011 wdiRulerReq = (WDI_RmcRulerReqParams *)
15012 vos_mem_malloc(sizeof(*wdiRulerReq));
15013
15014 if (NULL == wdiRulerReq)
15015 {
15016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15017 "%s: VOS MEM Alloc Failure", __func__);
15018 VOS_ASSERT(0);
15019 vos_mem_free(rmcRulerReq);
15020 return VOS_STATUS_E_NOMEM;
15021 }
15022
15023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15024 if (NULL == pWdaParams)
15025 {
15026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15027 "%s: VOS MEM Alloc Failure", __func__);
15028 VOS_ASSERT(0);
15029 vos_mem_free(rmcRulerReq);
15030 vos_mem_free(wdiRulerReq);
15031 return VOS_STATUS_E_NOMEM;
15032 }
15033
15034 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
15035 /* Store param pointer as passed in by caller */
15036 pWdaParams->wdaMsgParam = rmcRulerReq;
15037 pWdaParams->pWdaContext = pWDA;
15038
15039 wdiRulerReq->cmd = rmcRulerReq->cmd;
15040
15041 vos_mem_copy(wdiRulerReq->mcastTransmitter,
15042 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
15043 vos_mem_copy(wdiRulerReq->mcastGroup,
15044 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
15045 vos_mem_copy(wdiRulerReq->blacklist,
15046 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
15047
15048 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
15049
15050 status = WDI_RmcRulerReq(wdiRulerReq,
15051 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
15052 (void *)pWdaParams);
15053 if (IS_WDI_STATUS_FAILURE(status))
15054 {
15055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15056 vos_mem_free(pWdaParams->wdaMsgParam);
15057 vos_mem_free(pWdaParams) ;
15058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15059 "Ruler Request failed");
15060 }
15061 return CONVERT_WDI2VOS_STATUS(status) ;
15062}
15063
15064/*
15065 * FUNCTION: WDA_ProcessRMCUpdateInd
15066 * Forward Update Indication to WDI
15067*/
15068static VOS_STATUS
15069WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
15070 tSirRmcUpdateInd *rmcUpdateInd)
15071{
15072 WDI_Status status;
15073 WDI_RmcUpdateIndParams wdiUpdateInd;
15074
15075 /* Copy the paramters for Update_Ind */
15076
15077 wdiUpdateInd.indication = rmcUpdateInd->indication;
15078 wdiUpdateInd.role = rmcUpdateInd->role;
15079
15080 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
15081 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
15082
15083 vos_mem_copy(wdiUpdateInd.mcastGroup,
15084 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
15085
15086 vos_mem_copy(wdiUpdateInd.mcastRuler,
15087 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
15088
15089 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
15090 wdiUpdateInd.pUserData = pWDA;
15091 status = WDI_RmcUpdateInd(&wdiUpdateInd);
15092
15093 if (WDI_STATUS_PENDING == status)
15094 {
15095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15096 "Pending received for %s:%d ",__func__,__LINE__ );
15097 }
15098 else if (WDI_STATUS_SUCCESS_SYNC != status)
15099 {
15100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15101 "Failure in %s:%d ",__func__,__LINE__ );
15102 }
15103
15104 vos_mem_free(rmcUpdateInd);
15105
15106 return CONVERT_WDI2VOS_STATUS(status) ;
15107}
15108
15109void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
15110 ,void* pUserData)
15111{
15112
15113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15114 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
15115 tWDA_CbContext *pWDA;
15116 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
15117 vos_msg_t vosMsg;
15118 v_U32_t wdaCnt = 0;
15119
15120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15121 "<------ %s " ,__func__);
15122 if (NULL == pWdaParams)
15123 {
15124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15125 "%s: pWdaParams received NULL", __func__);
15126 VOS_ASSERT(0);
15127 return;
15128 }
15129
15130 if (NULL == peerInfoRspParams)
15131 {
15132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15133 "%s: peerInfoRspParams received NULL", __func__);
15134 if(pWdaParams->wdaMsgParam)
15135 vos_mem_free(pWdaParams->wdaMsgParam);
15136 if(pWdaParams->wdaWdiApiMsgParam)
15137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15138 vos_mem_free(pWdaParams);
15139
15140 VOS_ASSERT(0);
15141 return;
15142 }
15143
15144 pIbssPeerInfoParams =
15145 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
15146
15147 pIbssGetPeerInfoRsp =
15148 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
15149
15150 if(NULL == pIbssGetPeerInfoRsp)
15151 {
15152 if(pWdaParams->wdaMsgParam)
15153 vos_mem_free(pWdaParams->wdaMsgParam);
15154 if(pWdaParams->wdaWdiApiMsgParam)
15155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15156 vos_mem_free(pWdaParams);
15157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15158 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
15159 __func__);
15160 VOS_ASSERT(0);
15161 return;
15162
15163 }
15164
15165 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15166
15167
15168 if (peerInfoRspParams->wdiNumPeers > 32)
15169 {
15170 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
15171 /* free the mem and return */
15172 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15173 if(pWdaParams->wdaMsgParam)
15174 vos_mem_free(pWdaParams->wdaMsgParam);
15175 if(pWdaParams->wdaWdiApiMsgParam)
15176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15177 vos_mem_free(pWdaParams);
15178
15179 return;
15180 }
15181
15182 /* Message Header */
15183 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
15184 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
15185 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
15186 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
15187
15188 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
15189 {
15190 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
15191 tSirIbssPeerInfoParams *pSmeTmp =
15192 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
15193
15194 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
15195 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
15196 pSmeTmp->rssi = pWdiTmp->wdiRssi;
15197 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
15198 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
15199 }
15200
15201 /* VOS message wrapper */
15202 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
15203 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
15204 vosMsg.bodyval = 0;
15205
15206 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15207 {
15208 /* free the mem and return */
15209 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15210 }
15211
15212 if(NULL != pWdaParams)
15213 {
15214 if(pWdaParams->wdaMsgParam)
15215 vos_mem_free(pWdaParams->wdaMsgParam);
15216 if(pWdaParams->wdaWdiApiMsgParam)
15217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15218 vos_mem_free(pWdaParams);
15219 }
15220
15221 return;
15222}
15223
15224static VOS_STATUS
15225WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
15226 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
15227{
15228 WDI_Status status;
15229 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
15230 tWDA_ReqParams *pWdaParams;
15231
15232 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
15233 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
15234 if (NULL == wdiPeerInfoReq)
15235 {
15236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15237 "%s: VOS MEM Alloc Failure", __func__);
15238 VOS_ASSERT(0);
15239 vos_mem_free(ibssPeerInfoReqParams);
15240 return VOS_STATUS_E_NOMEM;
15241 }
15242
15243 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15244 if (NULL == pWdaParams)
15245 {
15246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15247 "%s: VOS MEM Alloc Failure", __func__);
15248 VOS_ASSERT(0);
15249 vos_mem_free(wdiPeerInfoReq);
15250 vos_mem_free(ibssPeerInfoReqParams);
15251 return VOS_STATUS_E_NOMEM;
15252 }
15253
15254 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
15255 /* Store param pointer as passed in by caller */
15256 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
15257 pWdaParams->pWdaContext = pWDA;
15258
15259 wdiPeerInfoReq->wdiAllPeerInfoReqd =
15260 ibssPeerInfoReqParams->allPeerInfoReqd;
15261 wdiPeerInfoReq->wdiStaIdx =
15262 ibssPeerInfoReqParams->staIdx;
15263
15264 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
15265 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
15266 (void *)pWdaParams);
15267 if (IS_WDI_STATUS_FAILURE(status))
15268 {
15269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15270 vos_mem_free(pWdaParams->wdaMsgParam);
15271 vos_mem_free(pWdaParams) ;
15272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15273 "IBSS Peer Info Request failed");
15274 }
15275 return CONVERT_WDI2VOS_STATUS(status) ;
15276
15277}
15278
15279/*
15280 * FUNCTION: WDA_ProcessTXFailMonitorInd
15281 * Forward TX Fail Monitor to WDI
15282 */
15283static VOS_STATUS WDA_ProcessTXFailMonitorInd(
15284 tWDA_CbContext *pWDA,
15285 tAniTXFailMonitorInd *txFailMonitorInd)
15286{
15287 WDI_Status status;
15288 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
15289 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
15290
15291 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15292 "<------ %s " ,__func__);
15293
15294 if (NULL == wdiTXFailMonitorInd)
15295 {
15296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15297 "%s: VOS MEM Alloc Failure", __func__);
15298 VOS_ASSERT(0);
15299 vos_mem_free(txFailMonitorInd);
15300 return VOS_STATUS_E_NOMEM;
15301 }
15302
15303 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
15304
15305 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
15306 wdiTXFailMonitorInd->pUserData = pWDA;
15307
15308 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
15309
15310 if (WDI_STATUS_PENDING == status)
15311 {
15312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15313 "TX Fail Monitor Indication Pending");
15314 }
15315 else if (WDI_STATUS_SUCCESS_SYNC == status)
15316 {
15317 if (0 == txFailMonitorInd->tx_fail_count)
15318 pWDA->txFailIndCallback = NULL;
15319 else
15320 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
15321 }
15322 else
15323 {
15324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15325 "TX Fail Monitor Indication Failed");
15326 }
15327
15328 vos_mem_free(wdiTXFailMonitorInd);
15329 vos_mem_free(txFailMonitorInd);
15330
15331 return CONVERT_WDI2VOS_STATUS(status) ;
15332}
15333#endif /* WLAN_FEATURE_RMC */
15334
15335#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15336VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15337 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15338{
15339 WDI_Status status;
15340 tWDA_ReqParams *pWdaParams ;
15341 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15342 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15343 sizeof(WDI_PERRoamTriggerScanInfo));
15344
15345 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15346 "------> %s " ,__func__);
15347
15348 if (NULL == pwdiPERRoamTriggerScanInfo)
15349 {
15350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15351 "%s: VOS MEM Alloc Failure", __func__);
15352 VOS_ASSERT(0);
15353 return VOS_STATUS_E_NOMEM;
15354 }
15355
15356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15357 if (NULL == pWdaParams)
15358 {
15359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15360 "%s: VOS MEM Alloc Failure", __func__);
15361 VOS_ASSERT(0);
15362 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15363 return VOS_STATUS_E_NOMEM;
15364 }
15365
15366 pwdiPERRoamTriggerScanInfo->roamScanReq =
15367 pPERRoamTriggerScanReqParams->start;
15368
15369 /* Store Params pass it to WDI */
15370 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15371 pWdaParams->pWdaContext = pWDA;
15372
15373 /* Store param pointer as passed in by caller */
15374 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15375 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15376 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15377 pWdaParams);
15378
15379 if(IS_WDI_STATUS_FAILURE(status))
15380 {
15381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15382 "Failure in Start Roam Candidate trigger Req WDI API" );
15383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15384 vos_mem_free(pWdaParams->wdaMsgParam);
15385 pWdaParams->wdaWdiApiMsgParam = NULL;
15386 pWdaParams->wdaMsgParam = NULL;
15387 }
15388 return CONVERT_WDI2VOS_STATUS(status) ;
15389}
15390#endif
15391
15392/*
15393 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15394 *
15395 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15396 *
15397 * PARAM:
15398 * pWDA: pointer to WDA context
15399 * pReq: pointer to stop batch scan request
15400 */
15401VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15402 tpSpoofMacAddrReqParams pReq)
15403{
15404 WDI_Status wdiStatus;
15405 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15406 tWDA_ReqParams *pWdaParams;
15407
15408 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15409 sizeof(WDI_SpoofMacAddrInfoType));
15410 if(NULL == WDI_SpoofMacAddrInfoParams) {
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15412 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15413 VOS_ASSERT(0);
15414 return VOS_STATUS_E_NOMEM;
15415 }
15416 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15417 if(NULL == pWdaParams) {
15418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15419 "%s: VOS MEM Alloc Failure", __func__);
15420 vos_mem_free(WDI_SpoofMacAddrInfoParams);
15421 VOS_ASSERT(0);
15422 return VOS_STATUS_E_NOMEM;
15423 }
15424
15425 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15426 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15427
15428 pWdaParams->pWdaContext = pWDA;
15429 /* Store Upper layer req pointer, as this will be used for response */
15430 pWdaParams->wdaMsgParam = (void *)pReq;
15431
15432 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15433 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15434
15435 /* store Params pass it to WDI */
15436 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15437
15438 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
15439 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15440 pWdaParams );
15441
15442 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15443 {
15444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15445 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15447 vos_mem_free(pWdaParams->wdaMsgParam);
15448 vos_mem_free(pWdaParams);
15449 }
15450
15451 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15452}
15453
c_manjeecfd1efb2015-09-25 19:32:34 +053015454
15455/*
15456 * FUNCTION: WDA_FwrMemDumpRespCallback
15457 * recieves Mgmt Logging init response from FW
15458 */
15459 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15460 void* pUserData)
15461{
15462 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15463 tAniFwrDumpReq *pFwrMemDumpReq;
15464 tAniFwrDumpRsp *pFwrMemDumpRsp;
15465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15466 "<------ %s " ,__func__);
15467
15468 if(NULL == pWdaParams)
15469 {
15470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15471 "%s: pWdaParams received NULL", __func__);
15472 VOS_ASSERT(0);
15473 return ;
15474 }
15475
15476 if(NULL == pWdaParams->wdaMsgParam)
15477 {
15478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15479 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15480 VOS_ASSERT(0);
15481 vos_mem_free(pWdaParams);
15482 return ;
15483 }
15484
15485 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15486 if(pFwrMemDumpRsp == NULL)
15487 {
15488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15489 "%s: pFwrMemDumpRsp is NULL", __func__);
15490 VOS_ASSERT(0);
15491 vos_mem_free(pWdaParams);
15492 return ;
15493 }
15494
15495 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15496 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15497
15498 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15499 {
15500 pFwrMemDumpReq->fwMemDumpReqCallback(
15501 pFwrMemDumpReq->fwMemDumpReqContext,
15502 pFwrMemDumpRsp);
15503 }
15504 else
15505 {
15506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15507 "%s: FwrMemDump callback is NULL", __func__);
15508 }
15509
15510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15511 vos_mem_free(pWdaParams->wdaMsgParam);
15512 vos_mem_free(pWdaParams);
15513 vos_mem_free(pFwrMemDumpRsp);
15514
15515 return ;
15516}
15517
15518VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15519 tAniFwrDumpReq* pFwrMemDumpReq)
15520{
15521 VOS_STATUS status = VOS_STATUS_SUCCESS;
15522 WDI_Status wstatus;
15523 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15524 tWDA_ReqParams *pWdaParams ;
15525
15526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15527 "------> %s " ,__func__);
15528 /* Sanity Check*/
15529 if(NULL == pFwrMemDumpReq)
15530 {
15531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15532 "%s: pFwrMemDumpReq received NULL", __func__);
15533 VOS_ASSERT(0) ;
15534 return VOS_STATUS_E_FAULT;
15535 }
15536
15537 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15538 if(NULL == pWdiFwrMemDumpReq)
15539 {
15540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15541 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15542 VOS_ASSERT(0);
15543 return VOS_STATUS_E_NOMEM;
15544 }
15545
15546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15547 if(NULL == pWdaParams)
15548 {
15549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15550 "%s: pWdaParams Alloc Failure", __func__);
15551 VOS_ASSERT(0);
15552 vos_mem_free(pWdiFwrMemDumpReq);
15553 return VOS_STATUS_E_NOMEM;
15554 }
15555
15556 /* Store Params pass it to WDI */
15557 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15558 pWdaParams->pWdaContext = pWDA;
15559 /* Store param pointer as passed in by caller */
15560 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15561
15562 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15563 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15564 pWdaParams);
15565
15566 if(IS_WDI_STATUS_FAILURE(wstatus))
15567 {
15568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15569 FL("Fwr Mem Dump Req failed, free all the memory"));
15570 status = CONVERT_WDI2VOS_STATUS(wstatus);
15571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015572 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015573 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015574 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015575 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015576 }
15577
15578 return status;
15579
15580}
15581
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015582/**
15583 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15584 *
15585 * @pWDA: WDA Call back context
15586 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15587 * that holds allowed action frames bitmask
15588 *
15589 * This function sets the allowed action frames that the FW needs to
15590 * handover to host.The Action frames other than the requested ones
15591 * can be dropped in FW
15592 *
15593 * Return: VOS_STATUS enumeration
15594 */
15595VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15596 struct sir_allowed_action_frames *allowed_action_frames)
15597{
15598 WDI_Status status;
15599 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15601 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015602
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015603 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15604 vos_mem_malloc(sizeof
15605 (*wdi_allowed_action_frames));
15606 if (!wdi_allowed_action_frames) {
15607 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15608 "%s: VOS MEM Alloc Failure", __func__);
15609 vos_mem_free(allowed_action_frames);
15610 return VOS_STATUS_E_NOMEM;
15611 }
15612
15613 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15614 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15615
15616 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15617 if (WDI_STATUS_PENDING == status) {
15618 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15619 FL("pending status received"));
15620 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15621 (WDI_STATUS_SUCCESS != status)) {
15622 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15623 FL("Failure in allowed_action_frames API %d"), status);
15624 }
15625
15626 vos_mem_free(wdi_allowed_action_frames);
15627 vos_mem_free(allowed_action_frames);
15628 return CONVERT_WDI2VOS_STATUS(status) ;
15629}
c_manjeecfd1efb2015-09-25 19:32:34 +053015630
Siddharth Bhal171788a2014-09-29 21:02:40 +053015631/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015632 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15633 * Request to WDI.
15634 */
15635VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15636{
15637 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015638 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015639
15640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15641
15642 staId = (v_U8_t)params;
15643
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015644 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15645 if ( NULL == pTLCb )
15646 {
15647 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15648 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15649 return VOS_STATUS_E_FAULT;
15650 }
15651
15652
15653 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015654 /* Pause TL for Sta ID */
15655 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15656}
15657
15658/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015659 * FUNCTION: WDA_McProcessMsg
15660 * Trigger DAL-AL to start CFG download
15661 */
15662VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15663{
15664 VOS_STATUS status = VOS_STATUS_SUCCESS;
15665 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015666 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015667 {
15668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015669 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015670 VOS_ASSERT(0);
15671 return VOS_STATUS_E_FAILURE;
15672 }
15673
15674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015675 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015676
15677 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15678 if(NULL == pWDA )
15679 {
15680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015681 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015682 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015683 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015684 return VOS_STATUS_E_FAILURE;
15685 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015686 /* Process all the WDA messages.. */
15687 switch( pMsg->type )
15688 {
15689 case WNI_CFG_DNLD_REQ:
15690 {
15691 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015692 /* call WDA complete event if config download success */
15693 if( VOS_IS_STATUS_SUCCESS(status) )
15694 {
15695 vos_WDAComplete_cback(pVosContext);
15696 }
15697 else
15698 {
15699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15700 "WDA Config Download failure" );
15701 }
15702 break ;
15703 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015704 /*
15705 * Init SCAN request from PE, convert it into DAL format
15706 * and send it to DAL
15707 */
15708 case WDA_INIT_SCAN_REQ:
15709 {
15710 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15711 break ;
15712 }
15713 /* start SCAN request from PE */
15714 case WDA_START_SCAN_REQ:
15715 {
15716 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15717 break ;
15718 }
15719 /* end SCAN request from PE */
15720 case WDA_END_SCAN_REQ:
15721 {
15722 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15723 break ;
15724 }
15725 /* end SCAN request from PE */
15726 case WDA_FINISH_SCAN_REQ:
15727 {
15728 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15729 break ;
15730 }
15731 /* join request from PE */
15732 case WDA_CHNL_SWITCH_REQ:
15733 {
15734 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15735 {
15736 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15737 }
15738 else
15739 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015740 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15741 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15742 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15743 {
15744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15745 "call ProcessChannelSwitchReq_V1" );
15746 WDA_ProcessChannelSwitchReq_V1(pWDA,
15747 (tSwitchChannelParams*)pMsg->bodyptr) ;
15748 }
15749 else
15750 {
15751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15752 "call ProcessChannelSwitchReq" );
15753 WDA_ProcessChannelSwitchReq(pWDA,
15754 (tSwitchChannelParams*)pMsg->bodyptr) ;
15755 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015756 }
15757 break ;
15758 }
15759 /* ADD BSS request from PE */
15760 case WDA_ADD_BSS_REQ:
15761 {
15762 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15763 break ;
15764 }
15765 case WDA_ADD_STA_REQ:
15766 {
15767 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15768 break ;
15769 }
15770 case WDA_DELETE_BSS_REQ:
15771 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015772 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15773 break ;
15774 }
15775 case WDA_DELETE_STA_REQ:
15776 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015777 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15778 break ;
15779 }
15780 case WDA_CONFIG_PARAM_UPDATE_REQ:
15781 {
15782 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15783 break ;
15784 }
15785 case WDA_SET_BSSKEY_REQ:
15786 {
15787 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15788 break ;
15789 }
15790 case WDA_SET_STAKEY_REQ:
15791 {
15792 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15793 break ;
15794 }
15795 case WDA_SET_STA_BCASTKEY_REQ:
15796 {
15797 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15798 break ;
15799 }
15800 case WDA_REMOVE_BSSKEY_REQ:
15801 {
15802 WDA_ProcessRemoveBssKeyReq(pWDA,
15803 (tRemoveBssKeyParams *)pMsg->bodyptr);
15804 break ;
15805 }
15806 case WDA_REMOVE_STAKEY_REQ:
15807 {
15808 WDA_ProcessRemoveStaKeyReq(pWDA,
15809 (tRemoveStaKeyParams *)pMsg->bodyptr);
15810 break ;
15811 }
15812 case WDA_REMOVE_STA_BCASTKEY_REQ:
15813 {
15814 /* TODO: currently UMAC is not sending this request, Add the code for
15815 handling this request when UMAC supports */
15816 break;
15817 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015818#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015819 case WDA_TSM_STATS_REQ:
15820 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015821 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015822 break;
15823 }
15824#endif
15825 case WDA_UPDATE_EDCA_PROFILE_IND:
15826 {
15827 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15828 break;
15829 }
15830 case WDA_ADD_TS_REQ:
15831 {
15832 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15833 break;
15834 }
15835 case WDA_DEL_TS_REQ:
15836 {
15837 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15838 break;
15839 }
15840 case WDA_ADDBA_REQ:
15841 {
15842 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15843 break;
15844 }
15845 case WDA_DELBA_IND:
15846 {
15847 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15848 break;
15849 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015850 case WDA_UPDATE_CHAN_LIST_REQ:
15851 {
15852 WDA_ProcessUpdateChannelList(pWDA,
15853 (tSirUpdateChanList *)pMsg->bodyptr);
15854 break;
15855 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015856 case WDA_SET_LINK_STATE:
15857 {
15858 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15859 break;
15860 }
15861 case WDA_GET_STATISTICS_REQ:
15862 {
15863 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15864 break;
15865 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015866#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015867 case WDA_GET_ROAM_RSSI_REQ:
15868 {
15869 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15870 break;
15871 }
15872#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015873 case WDA_PWR_SAVE_CFG:
15874 {
15875 if(pWDA->wdaState == WDA_READY_STATE)
15876 {
15877 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15878 }
15879 else
15880 {
15881 if(NULL != pMsg->bodyptr)
15882 {
15883 vos_mem_free(pMsg->bodyptr);
15884 }
15885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15886 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15887 }
15888 break;
15889 }
15890 case WDA_ENTER_IMPS_REQ:
15891 {
15892 if(pWDA->wdaState == WDA_READY_STATE)
15893 {
15894 WDA_ProcessEnterImpsReq(pWDA);
15895 }
15896 else
15897 {
15898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15899 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15900 }
15901 break;
15902 }
15903 case WDA_EXIT_IMPS_REQ:
15904 {
15905 if(pWDA->wdaState == WDA_READY_STATE)
15906 {
15907 WDA_ProcessExitImpsReq(pWDA);
15908 }
15909 else
15910 {
15911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15912 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15913 }
15914 break;
15915 }
15916 case WDA_ENTER_BMPS_REQ:
15917 {
15918 if(pWDA->wdaState == WDA_READY_STATE)
15919 {
15920 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15921 }
15922 else
15923 {
15924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15925 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15926 }
15927 break;
15928 }
15929 case WDA_EXIT_BMPS_REQ:
15930 {
15931 if(pWDA->wdaState == WDA_READY_STATE)
15932 {
15933 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15934 }
15935 else
15936 {
15937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15938 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15939 }
15940 break;
15941 }
15942 case WDA_ENTER_UAPSD_REQ:
15943 {
15944 if(pWDA->wdaState == WDA_READY_STATE)
15945 {
15946 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15947 }
15948 else
15949 {
15950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15951 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15952 }
15953 break;
15954 }
15955 case WDA_EXIT_UAPSD_REQ:
15956 {
15957 if(pWDA->wdaState == WDA_READY_STATE)
15958 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015959 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015960 }
15961 else
15962 {
15963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15964 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15965 }
15966 break;
15967 }
15968 case WDA_UPDATE_UAPSD_IND:
15969 {
15970 if(pWDA->wdaState == WDA_READY_STATE)
15971 {
15972 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15973 }
15974 else
15975 {
15976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15977 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15978 }
15979 break;
15980 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015981 case WDA_REGISTER_PE_CALLBACK :
15982 {
15983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15984 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15985 /*TODO: store the PE callback */
15986 /* Do Nothing? MSG Body should be freed at here */
15987 if(NULL != pMsg->bodyptr)
15988 {
15989 vos_mem_free(pMsg->bodyptr);
15990 }
15991 break;
15992 }
15993 case WDA_SYS_READY_IND :
15994 {
15995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15996 "Handling msg type WDA_SYS_READY_IND " );
15997 pWDA->wdaState = WDA_READY_STATE;
15998 if(NULL != pMsg->bodyptr)
15999 {
16000 vos_mem_free(pMsg->bodyptr);
16001 }
16002 break;
16003 }
16004 case WDA_BEACON_FILTER_IND :
16005 {
16006 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
16007 break;
16008 }
16009 case WDA_BTC_SET_CFG:
16010 {
16011 /*TODO: handle this while dealing with BTC */
16012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16013 "Handling msg type WDA_BTC_SET_CFG " );
16014 /* Do Nothing? MSG Body should be freed at here */
16015 if(NULL != pMsg->bodyptr)
16016 {
16017 vos_mem_free(pMsg->bodyptr);
16018 }
16019 break;
16020 }
16021 case WDA_SIGNAL_BT_EVENT:
16022 {
16023 /*TODO: handle this while dealing with BTC */
16024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16025 "Handling msg type WDA_SIGNAL_BT_EVENT " );
16026 /* Do Nothing? MSG Body should be freed at here */
16027 if(NULL != pMsg->bodyptr)
16028 {
16029 vos_mem_free(pMsg->bodyptr);
16030 }
16031 break;
16032 }
16033 case WDA_CFG_RXP_FILTER_REQ:
16034 {
16035 WDA_ProcessConfigureRxpFilterReq(pWDA,
16036 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
16037 break;
16038 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016039 case WDA_MGMT_LOGGING_INIT_REQ:
16040 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053016041 WDA_ProcessFWLoggingInitReq(pWDA,
16042 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016043 break;
16044 }
Siddharth Bhal64246172015-02-27 01:04:37 +053016045 case WDA_GET_FRAME_LOG_REQ:
16046 {
16047 WDA_ProcessGetFrameLogReq(pWDA,
16048 (tAniGetFrameLogReq *)pMsg->bodyptr);
16049 break;
16050 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016051 case WDA_START_RSSI_MONITOR_REQ:
16052 {
16053 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16054 break;
16055 }
16056 case WDA_STOP_RSSI_MONITOR_REQ:
16057 {
16058 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16059 break;
16060 }
Karthick Sa35b0692015-08-21 15:57:05 +053016061 case WDA_SEND_LOG_DONE_IND:
16062 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053016063 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053016064 break;
16065 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053016066 case WDA_FATAL_EVENT_LOGS_REQ:
16067 {
16068 WDA_ProcessFatalEventLogsReq(pWDA,
16069 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
16070 break;
16071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016072 case WDA_SET_HOST_OFFLOAD:
16073 {
16074 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16075 break;
16076 }
16077 case WDA_SET_KEEP_ALIVE:
16078 {
16079 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
16080 break;
16081 }
16082#ifdef WLAN_NS_OFFLOAD
16083 case WDA_SET_NS_OFFLOAD:
16084 {
16085 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16086 break;
16087 }
16088#endif //WLAN_NS_OFFLOAD
16089 case WDA_ADD_STA_SELF_REQ:
16090 {
16091 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
16092 break;
16093 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016094 case WDA_DEL_STA_SELF_REQ:
16095 {
16096 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
16097 break;
16098 }
16099 case WDA_WOWL_ADD_BCAST_PTRN:
16100 {
16101 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
16102 break;
16103 }
16104 case WDA_WOWL_DEL_BCAST_PTRN:
16105 {
16106 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
16107 break;
16108 }
16109 case WDA_WOWL_ENTER_REQ:
16110 {
16111 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
16112 break;
16113 }
16114 case WDA_WOWL_EXIT_REQ:
16115 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016116 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016117 break;
16118 }
16119 case WDA_TL_FLUSH_AC_REQ:
16120 {
16121 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
16122 break;
16123 }
16124 case WDA_SIGNAL_BTAMP_EVENT:
16125 {
16126 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
16127 break;
16128 }
Abhishek Singh85b74712014-10-08 11:38:19 +053016129 case WDA_FW_STATS_GET_REQ:
16130 {
16131 WDA_ProcessFWStatsGetReq(pWDA,
16132 (tSirFWStatsGetReq *)pMsg->bodyptr);
16133 break;
16134 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053016135#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16136 case WDA_LINK_LAYER_STATS_SET_REQ:
16137 {
16138 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
16139 break;
16140 }
16141 case WDA_LINK_LAYER_STATS_GET_REQ:
16142 {
16143 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
16144 break;
16145 }
16146 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
16147 {
16148 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
16149 break;
16150 }
16151#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053016152#ifdef WLAN_FEATURE_EXTSCAN
16153 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
16154 {
16155 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
16156 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
16157 break;
16158 }
16159 case WDA_EXTSCAN_START_REQ:
16160 {
16161 WDA_ProcessEXTScanStartReq(pWDA,
16162 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
16163 break;
16164 }
16165 case WDA_EXTSCAN_STOP_REQ:
16166 {
16167 WDA_ProcessEXTScanStopReq(pWDA,
16168 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
16169 break;
16170 }
16171 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
16172 {
16173 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
16174 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
16175 break;
16176 }
16177 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
16178 {
16179 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
16180 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
16181 break;
16182 }
16183 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
16184 {
16185 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
16186 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
16187 break;
16188 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016189 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
16190 {
16191 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
16192 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
16193 break;
16194 }
16195 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
16196 {
16197 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
16198 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
16199 break;
16200 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053016201 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
16202 {
16203 WDA_ProcessHighPriorityDataInfoInd(pWDA,
16204 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
16205 break;
16206 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016207#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070016208#ifdef WDA_UT
16209 case WDA_WDI_EVENT_MSG:
16210 {
16211 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
16212 break ;
16213 }
16214#endif
16215 case WDA_UPDATE_BEACON_IND:
16216 {
16217 WDA_ProcessUpdateBeaconParams(pWDA,
16218 (tUpdateBeaconParams *)pMsg->bodyptr);
16219 break;
16220 }
16221 case WDA_SEND_BEACON_REQ:
16222 {
16223 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
16224 break;
16225 }
16226 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
16227 {
16228 WDA_ProcessUpdateProbeRspTemplate(pWDA,
16229 (tSendProbeRespParams *)pMsg->bodyptr);
16230 break;
16231 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016232#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070016233 case WDA_SET_MAX_TX_POWER_REQ:
16234 {
16235 WDA_ProcessSetMaxTxPowerReq(pWDA,
16236 (tMaxTxPowerParams *)pMsg->bodyptr);
16237 break;
16238 }
16239#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070016240 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
16241 {
16242 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
16243 pMsg->bodyptr);
16244 break;
16245 }
schang86c22c42013-03-13 18:41:24 -070016246 case WDA_SET_TX_POWER_REQ:
16247 {
16248 WDA_ProcessSetTxPowerReq(pWDA,
16249 (tSirSetTxPowerReq *)pMsg->bodyptr);
16250 break;
16251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016252 case WDA_SET_P2P_GO_NOA_REQ:
16253 {
16254 WDA_ProcessSetP2PGONOAReq(pWDA,
16255 (tP2pPsParams *)pMsg->bodyptr);
16256 break;
16257 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016258 /* timer related messages */
16259 case WDA_TIMER_BA_ACTIVITY_REQ:
16260 {
16261 WDA_BaCheckActivity(pWDA) ;
16262 break ;
16263 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016264
16265 /* timer related messages */
16266 case WDA_TIMER_TRAFFIC_STATS_IND:
16267 {
16268 WDA_TimerTrafficStatsInd(pWDA);
16269 break;
16270 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016271#ifdef WLAN_FEATURE_VOWIFI_11R
16272 case WDA_AGGR_QOS_REQ:
16273 {
16274 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
16275 break;
16276 }
16277#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070016278 case WDA_FTM_CMD_REQ:
16279 {
16280 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
16281 break ;
16282 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016283#ifdef FEATURE_OEM_DATA_SUPPORT
16284 case WDA_START_OEM_DATA_REQ:
16285 {
16286 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
16287 break;
16288 }
16289#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070016290 /* Tx Complete Time out Indication */
16291 case WDA_TX_COMPLETE_TIMEOUT_IND:
16292 {
16293 WDA_ProcessTxCompleteTimeOutInd(pWDA);
16294 break;
16295 }
16296 case WDA_WLAN_SUSPEND_IND:
16297 {
16298 WDA_ProcessWlanSuspendInd(pWDA,
16299 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
16300 break;
16301 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 case WDA_WLAN_RESUME_REQ:
16303 {
16304 WDA_ProcessWlanResumeReq(pWDA,
16305 (tSirWlanResumeParam *)pMsg->bodyptr) ;
16306 break;
16307 }
16308
16309 case WDA_UPDATE_CF_IND:
16310 {
16311 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
16312 pMsg->bodyptr = NULL;
16313 break;
16314 }
16315#ifdef FEATURE_WLAN_SCAN_PNO
16316 case WDA_SET_PNO_REQ:
16317 {
16318 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
16319 break;
16320 }
16321 case WDA_UPDATE_SCAN_PARAMS_REQ:
16322 {
16323 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
16324 break;
16325 }
16326 case WDA_SET_RSSI_FILTER_REQ:
16327 {
16328 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
16329 break;
16330 }
16331#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016332#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016333 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016334 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016335 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016336 break;
16337 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053016338 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
16339 {
16340 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
16341 break;
16342 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016343#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016344 case WDA_SET_TX_PER_TRACKING_REQ:
16345 {
16346 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
16347 break;
16348 }
16349
16350#ifdef WLAN_FEATURE_PACKET_FILTERING
16351 case WDA_8023_MULTICAST_LIST_REQ:
16352 {
16353 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
16354 break;
16355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016356 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
16357 {
16358 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
16359 break;
16360 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016361 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
16362 {
16363 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
16364 break;
16365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016366 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
16367 {
16368 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
16369 break;
16370 }
16371#endif // WLAN_FEATURE_PACKET_FILTERING
16372
16373
16374 case WDA_TRANSMISSION_CONTROL_IND:
16375 {
16376 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
16377 break;
16378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016379 case WDA_SET_POWER_PARAMS_REQ:
16380 {
16381 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
16382 break;
16383 }
c_manjeecfd1efb2015-09-25 19:32:34 +053016384 case WDA_FW_MEM_DUMP_REQ:
16385 {
16386 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
16387 break;
16388 }
16389
Jeff Johnson295189b2012-06-20 16:38:30 -070016390#ifdef WLAN_FEATURE_GTK_OFFLOAD
16391 case WDA_GTK_OFFLOAD_REQ:
16392 {
16393 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
16394 break;
16395 }
16396
16397 case WDA_GTK_OFFLOAD_GETINFO_REQ:
16398 {
16399 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
16400 break;
16401 }
16402#endif //WLAN_FEATURE_GTK_OFFLOAD
16403
16404 case WDA_SET_TM_LEVEL_REQ:
16405 {
16406 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
16407 break;
16408 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053016409
Mohit Khanna4a70d262012-09-11 16:30:12 -070016410 case WDA_UPDATE_OP_MODE:
16411 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053016412 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
16413 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
16414 {
16415 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
16416 }
16417 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070016418 {
16419 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
16420 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
16421 else
16422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016423 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070016424 }
16425 else
16426 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016427 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070016428 break;
16429 }
Chet Lanctot186b5732013-03-18 10:26:30 -070016430#ifdef WLAN_FEATURE_11W
16431 case WDA_EXCLUDE_UNENCRYPTED_IND:
16432 {
16433 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
16434 break;
16435 }
16436#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016437#ifdef FEATURE_WLAN_TDLS
16438 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
16439 {
16440 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
16441 break;
16442 }
16443#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016444 case WDA_DHCP_START_IND:
16445 {
16446 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
16447 break;
16448 }
16449 case WDA_DHCP_STOP_IND:
16450 {
16451 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
16452 break;
16453 }
Leo Chang9056f462013-08-01 19:21:11 -070016454#ifdef FEATURE_WLAN_LPHB
16455 case WDA_LPHB_CONF_REQ:
16456 {
16457 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
16458 break;
16459 }
16460#endif
Yue Mab9c86f42013-08-14 15:59:08 -070016461 case WDA_ADD_PERIODIC_TX_PTRN_IND:
16462 {
16463 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
16464 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
16465 break;
16466 }
16467 case WDA_DEL_PERIODIC_TX_PTRN_IND:
16468 {
16469 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
16470 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
16471 break;
16472 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016473 case WDA_RATE_UPDATE_IND:
16474 {
16475 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
16476 break;
16477 }
16478#ifdef WLAN_FEATURE_RMC
16479 case WDA_RMC_RULER_REQ:
16480 {
16481 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
16482 break;
16483 }
16484 case WDA_RMC_UPDATE_IND:
16485 {
16486 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
16487 break;
16488 }
16489 case WDA_GET_IBSS_PEER_INFO_REQ:
16490 {
16491 WDA_ProcessIbssPeerInfoReq(pWDA,
16492 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
16493 break;
16494 }
16495 case WDA_TX_FAIL_MONITOR_IND:
16496 {
16497 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
16498 break;
16499 }
16500#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053016501#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16502 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
16503 {
16504 WDA_ProcessPERRoamScanTriggerReq(pWDA,
16505 (tPERRoamScanStart *)pMsg->bodyptr);
16506 break;
16507 }
16508#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053016509#ifdef FEATURE_WLAN_BATCH_SCAN
16510 case WDA_SET_BATCH_SCAN_REQ:
16511 {
16512 WDA_ProcessSetBatchScanReq(pWDA,
16513 (tSirSetBatchScanReq *)pMsg->bodyptr);
16514 break;
16515 }
16516 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
16517 {
16518 WDA_ProcessTriggerBatchScanResultInd(pWDA,
16519 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
16520 break;
16521 }
16522 case WDA_STOP_BATCH_SCAN_IND:
16523 {
16524 WDA_ProcessStopBatchScanInd(pWDA,
16525 (tSirStopBatchScanInd *)pMsg->bodyptr);
16526 break;
16527 }
c_hpothu92367912014-05-01 15:18:17 +053016528 case WDA_GET_BCN_MISS_RATE_REQ:
16529 WDA_ProcessGetBcnMissRateReq(pWDA,
16530 (tSirBcnMissRateReq *)pMsg->bodyptr);
16531 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053016532#endif
16533
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053016534 case WDA_HT40_OBSS_SCAN_IND:
16535 {
16536 WDA_ProcessHT40OBSSScanInd(pWDA,
16537 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
16538 break;
16539 }
16540 case WDA_HT40_OBSS_STOP_SCAN_IND:
16541 {
16542 WDA_ProcessHT40OBSSStopScanInd(pWDA,
16543 (tANI_U8*)pMsg->bodyptr);
16544 break;
16545 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053016546// tdlsoffchan
16547#ifdef FEATURE_WLAN_TDLS
16548 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
16549 {
16550 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
16551 break;
16552 }
16553#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053016554 case WDA_SPOOF_MAC_ADDR_REQ:
16555 {
16556 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
16557 break;
16558 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053016559 case WDA_ENCRYPT_MSG_REQ:
16560 {
16561 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
16562 break;
16563 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016564
16565 case WDA_NAN_REQUEST:
16566 {
16567 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
16568 break;
16569 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053016570 case WDA_SET_RTS_CTS_HTVHT:
16571 {
16572 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
16573 break;
16574 }
Katya Nigamf0511f62015-05-05 16:40:57 +053016575
16576 case WDA_MON_START_REQ:
16577 {
16578 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
16579 break;
16580 }
16581 case WDA_MON_STOP_REQ:
16582 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053016583 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053016584 break;
16585 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053016586 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
16587 {
16588 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
16589 break;
16590 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053016591 case WDA_WIFI_CONFIG_REQ:
16592 {
16593 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
16594 break;
16595 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016596#ifdef FEATURE_OEM_DATA_SUPPORT
16597 case WDA_START_OEM_DATA_REQ_IND_NEW:
16598 {
16599 WDA_ProcessStartOemDataReqIndNew(pWDA,
16600 (tOemDataReqNewConfig *)pMsg->bodyptr);
16601 break;
16602 }
16603#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053016604 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
16605 {
16606 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
16607 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
16608 break;
16609 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053016610 case WDA_MODIFY_ROAM_PARAMS_IND:
16611 {
16612 WDA_ProcessBcnMissPenaltyCount(pWDA,
16613 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
16614 break;
16615 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053016616
16617 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
16618 wda_process_set_allowed_action_frames_ind(pWDA,
16619 (struct sir_allowed_action_frames*)pMsg->bodyptr);
16620 break;
16621
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016622 case WDA_PAUSE_TL_IND:
16623 {
16624 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
16625 break;
16626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016627 default:
16628 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053016629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016630 "No Handling for msg type %x in WDA "
16631 ,pMsg->type);
16632 /* Do Nothing? MSG Body should be freed at here */
16633 if(NULL != pMsg->bodyptr)
16634 {
16635 vos_mem_free(pMsg->bodyptr);
16636 }
16637 //WDA_VOS_ASSERT(0) ;
16638 }
16639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016640 return status ;
16641}
16642
Jeff Johnson295189b2012-06-20 16:38:30 -070016643/*
16644 * FUNCTION: WDA_LowLevelIndCallback
16645 * IND API callback from WDI, send Ind to PE
16646 */
16647void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
16648 void* pUserData )
16649{
16650 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
16651#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16652 tSirRSSINotification rssiNotification;
16653#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016654 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016655 {
16656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016657 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016658 VOS_ASSERT(0);
16659 return ;
16660 }
16661
16662 switch(wdiLowLevelInd->wdiIndicationType)
16663 {
16664 case WDI_RSSI_NOTIFICATION_IND:
16665 {
16666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16667 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016668#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16669 rssiNotification.bReserved =
16670 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16671 rssiNotification.bRssiThres1NegCross =
16672 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16673 rssiNotification.bRssiThres1PosCross =
16674 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16675 rssiNotification.bRssiThres2NegCross =
16676 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16677 rssiNotification.bRssiThres2PosCross =
16678 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16679 rssiNotification.bRssiThres3NegCross =
16680 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16681 rssiNotification.bRssiThres3PosCross =
16682 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016683 rssiNotification.avgRssi = (v_S7_t)
16684 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016685 WLANTL_BMPSRSSIRegionChangedNotification(
16686 pWDA->pVosContext,
16687 &rssiNotification);
16688#endif
16689 break ;
16690 }
16691 case WDI_MISSED_BEACON_IND:
16692 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016693 tpSirSmeMissedBeaconInd pMissBeacInd =
16694 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16696 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016697 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016698 if(NULL == pMissBeacInd)
16699 {
16700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16701 "%s: VOS MEM Alloc Failure", __func__);
16702 break;
16703 }
16704 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16705 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16706 pMissBeacInd->bssIdx =
16707 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16708 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016709 break ;
16710 }
16711 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16712 {
16713 /* TODO: Decode Ind and send Ind to PE */
16714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16715 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16716 break ;
16717 }
16718
16719 case WDI_MIC_FAILURE_IND:
16720 {
16721 tpSirSmeMicFailureInd pMicInd =
16722 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16723
16724 if(NULL == pMicInd)
16725 {
16726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016727 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016728 break;
16729 }
16730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16731 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016732 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16733 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16734 vos_mem_copy(pMicInd->bssId,
16735 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16736 sizeof(tSirMacAddr));
16737 vos_mem_copy(pMicInd->info.srcMacAddr,
16738 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16739 sizeof(tSirMacAddr));
16740 vos_mem_copy(pMicInd->info.taMacAddr,
16741 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16742 sizeof(tSirMacAddr));
16743 vos_mem_copy(pMicInd->info.dstMacAddr,
16744 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16745 sizeof(tSirMacAddr));
16746 vos_mem_copy(pMicInd->info.rxMacAddr,
16747 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16748 sizeof(tSirMacAddr));
16749 pMicInd->info.multicast =
16750 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16751 pMicInd->info.keyId=
16752 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16753 pMicInd->info.IV1=
16754 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16755 vos_mem_copy(pMicInd->info.TSC,
16756 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016757 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16758 (void *)pMicInd , 0) ;
16759 break ;
16760 }
16761 case WDI_FATAL_ERROR_IND:
16762 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016763 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016764 /* TODO: Decode Ind and send Ind to PE */
16765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16766 "Received WDI_FATAL_ERROR_IND from WDI ");
16767 break ;
16768 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016769 case WDI_DEL_STA_IND:
16770 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016771 tpDeleteStaContext pDelSTACtx =
16772 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16773
16774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16775 "Received WDI_DEL_STA_IND from WDI ");
16776 if(NULL == pDelSTACtx)
16777 {
16778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016780 break;
16781 }
16782 vos_mem_copy(pDelSTACtx->addr2,
16783 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16784 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016785 vos_mem_copy(pDelSTACtx->bssId,
16786 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16787 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016788 pDelSTACtx->assocId =
16789 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16790 pDelSTACtx->reasonCode =
16791 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16792 pDelSTACtx->staId =
16793 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016794 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16795 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016796 break ;
16797 }
16798 case WDI_COEX_IND:
16799 {
16800 tANI_U32 index;
16801 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016802 tSirSmeCoexInd *pSmeCoexInd;
16803
16804 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16805 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16806 {
16807 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16808 {
16809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16810 FL("Coex state: 0x%x coex feature: 0x%x"),
16811 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16812 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16813
16814 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16815 {
16816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16817 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16818 }
16819 }
16820 break;
16821 }
16822
16823 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016824 if(NULL == pSmeCoexInd)
16825 {
16826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016827 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016828 break;
16829 }
16830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16831 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016832 /* Message Header */
16833 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16834 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016835 /* Info from WDI Indication */
16836 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16837 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16838 {
16839 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16840 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016841 /* VOS message wrapper */
16842 vosMsg.type = eWNI_SME_COEX_IND;
16843 vosMsg.bodyptr = (void *)pSmeCoexInd;
16844 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016845 /* Send message to SME */
16846 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16847 {
16848 /* free the mem and return */
16849 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16850 }
16851 else
16852 {
16853 /* DEBUG */
16854 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16855 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16856 pSmeCoexInd->coexIndType,
16857 pSmeCoexInd->coexIndData[0],
16858 pSmeCoexInd->coexIndData[1],
16859 pSmeCoexInd->coexIndData[2],
16860 pSmeCoexInd->coexIndData[3]);
16861 }
16862 break;
16863 }
16864 case WDI_TX_COMPLETE_IND:
16865 {
16866 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16867 /* Calling TxCompleteAck Indication from wda context*/
16868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16869 "Complete Indication received from HAL");
16870 if( pWDA->pAckTxCbFunc )
16871 {
16872 if( VOS_STATUS_SUCCESS !=
16873 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16874 {
16875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16876 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016877 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016878 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016879 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16880 else
16881 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016882 pWDA->pAckTxCbFunc = NULL;
16883 }
16884 else
16885 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016887 "Tx Complete Indication is received after timeout ");
16888 }
16889 break;
16890 }
Viral Modid86bde22012-12-10 13:09:21 -080016891 case WDI_P2P_NOA_START_IND :
16892 {
16893 tSirP2PNoaStart *pP2pNoaStart =
16894 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16895
16896 if (NULL == pP2pNoaStart)
16897 {
16898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16899 "Memory allocation failure, "
16900 "WDI_P2P_NOA_START_IND not forwarded");
16901 break;
16902 }
16903 pP2pNoaStart->status =
16904 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16905 pP2pNoaStart->bssIdx =
16906 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16907 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16908 (void *)pP2pNoaStart , 0) ;
16909 break;
16910 }
16911
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016912#ifdef FEATURE_WLAN_TDLS
16913 case WDI_TDLS_IND :
16914 {
16915 tSirTdlsInd *pTdlsInd =
16916 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16917
16918 if (NULL == pTdlsInd)
16919 {
16920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16921 "Memory allocation failure, "
16922 "WDI_TDLS_IND not forwarded");
16923 break;
16924 }
16925 pTdlsInd->status =
16926 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16927 pTdlsInd->assocId =
16928 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16929 pTdlsInd->staIdx =
16930 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16931 pTdlsInd->reasonCode =
16932 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16933 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16934 (void *)pTdlsInd , 0) ;
16935 break;
16936 }
16937#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016938 case WDI_P2P_NOA_ATTR_IND :
16939 {
16940 tSirP2PNoaAttr *pP2pNoaAttr =
16941 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16943 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016944 if (NULL == pP2pNoaAttr)
16945 {
16946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16947 "Memory allocation failure, "
16948 "WDI_P2P_NOA_ATTR_IND not forwarded");
16949 break;
16950 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016951 pP2pNoaAttr->index =
16952 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16953 pP2pNoaAttr->oppPsFlag =
16954 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16955 pP2pNoaAttr->ctWin =
16956 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16957
16958 pP2pNoaAttr->uNoa1IntervalCnt =
16959 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16960 pP2pNoaAttr->uNoa1Duration =
16961 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16962 pP2pNoaAttr->uNoa1Interval =
16963 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16964 pP2pNoaAttr->uNoa1StartTime =
16965 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016966 pP2pNoaAttr->uNoa2IntervalCnt =
16967 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16968 pP2pNoaAttr->uNoa2Duration =
16969 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16970 pP2pNoaAttr->uNoa2Interval =
16971 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16972 pP2pNoaAttr->uNoa2StartTime =
16973 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016974 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16975 (void *)pP2pNoaAttr , 0) ;
16976 break;
16977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016978#ifdef FEATURE_WLAN_SCAN_PNO
16979 case WDI_PREF_NETWORK_FOUND_IND:
16980 {
16981 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016982 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16983 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16984 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16985 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16986
Jeff Johnson295189b2012-06-20 16:38:30 -070016987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16988 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016989 if (NULL == pPrefNetworkFoundInd)
16990 {
16991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16992 "Memory allocation failure, "
16993 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016994 if (NULL !=
16995 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16996 {
16997 wpalMemoryFree(
16998 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16999 );
17000 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17001 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017002 break;
17003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017004 /* Message Header */
17005 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017006 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070017007
17008 /* Info from WDI Indication */
17009 pPrefNetworkFoundInd->ssId.length =
17010 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070017011 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070017012 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
17013 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
17014 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070017015 if (NULL !=
17016 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17017 {
17018 pPrefNetworkFoundInd->frameLength =
17019 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17020 vos_mem_copy( pPrefNetworkFoundInd->data,
17021 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
17022 pPrefNetworkFoundInd->frameLength);
17023 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
17024 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17025 }
17026 else
17027 {
17028 pPrefNetworkFoundInd->frameLength = 0;
17029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017030 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070017031 /* VOS message wrapper */
17032 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
17033 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
17034 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017035 /* Send message to SME */
17036 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17037 {
17038 /* free the mem and return */
17039 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
17040 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017041 break;
17042 }
17043#endif // FEATURE_WLAN_SCAN_PNO
17044
17045#ifdef WLAN_WAKEUP_EVENTS
17046 case WDI_WAKE_REASON_IND:
17047 {
17048 vos_msg_t vosMsg;
17049 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
17050 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
17051 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
17052
17053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053017054 "[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 -070017055 wdiLowLevelInd->wdiIndicationType,
17056 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
17057 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
17058 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17059
17060 if (NULL == pWakeReasonInd)
17061 {
17062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17063 "Memory allocation failure, "
17064 "WDI_WAKE_REASON_IND not forwarded");
17065 break;
17066 }
17067
17068 vos_mem_zero(pWakeReasonInd, allocSize);
17069
17070 /* Message Header */
17071 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
17072 pWakeReasonInd->mesgLen = allocSize;
17073
17074 /* Info from WDI Indication */
17075 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
17076 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
17077 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
17078 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
17079 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
17080 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
17081 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
17082 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17083
17084 /* VOS message wrapper */
17085 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
17086 vosMsg.bodyptr = (void *) pWakeReasonInd;
17087 vosMsg.bodyval = 0;
17088
17089 /* Send message to SME */
17090 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17091 {
17092 /* free the mem and return */
17093 vos_mem_free((v_VOID_t *) pWakeReasonInd);
17094 }
17095
17096 break;
17097 }
17098#endif // WLAN_WAKEUP_EVENTS
17099
17100 case WDI_TX_PER_HIT_IND:
17101 {
17102 vos_msg_t vosMsg;
17103 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
17104 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
17105 /* VOS message wrapper */
17106 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
17107 vosMsg.bodyptr = NULL;
17108 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017109 /* Send message to SME */
17110 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17111 {
17112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
17113 }
17114 break;
17115 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017116#ifdef WLAN_FEATURE_RMC
17117 case WDI_TX_FAIL_IND:
17118 {
17119 if (pWDA->txFailIndCallback)
17120 {
17121 pWDA->txFailIndCallback(
17122 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
17123 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
17124 }
17125 break;
17126 }
17127#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070017128
Leo Chang9056f462013-08-01 19:21:11 -070017129#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070017130 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070017131 {
Leo Changd9df8aa2013-09-26 13:32:26 -070017132 vos_msg_t vosMsg;
17133 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017134
Leo Changd9df8aa2013-09-26 13:32:26 -070017135 lphbInd =
17136 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
17137 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070017138 {
17139 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17140 "%s: LPHB IND buffer alloc Fail", __func__);
17141 return ;
17142 }
17143
Leo Changd9df8aa2013-09-26 13:32:26 -070017144 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070017145 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070017146 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070017147 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070017148 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070017149 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
17150
17151 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070017152 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070017153 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
17154
Leo Changd9df8aa2013-09-26 13:32:26 -070017155 vosMsg.type = eWNI_SME_LPHB_IND;
17156 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017157 vosMsg.bodyval = 0;
17158 /* Send message to SME */
17159 if (VOS_STATUS_SUCCESS !=
17160 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17161 {
17162 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17163 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070017164 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070017165 }
17166 break;
17167 }
17168#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070017169 case WDI_PERIODIC_TX_PTRN_FW_IND:
17170 {
17171 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17172 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
17173 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
17174 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
17175 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
17176 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
17177 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
17178
17179 break;
17180 }
Leo Chang9056f462013-08-01 19:21:11 -070017181
Ravi Joshid2ca7c42013-07-23 08:37:49 -070017182 case WDI_IBSS_PEER_INACTIVITY_IND:
17183 {
17184 tSirIbssPeerInactivityInd *pIbssInd =
17185 (tSirIbssPeerInactivityInd *)
17186 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
17187
17188 if (NULL == pIbssInd)
17189 {
17190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17191 "Memory allocation failure, "
17192 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
17193 break;
17194 }
17195
17196 pIbssInd->bssIdx =
17197 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
17198 pIbssInd->staIdx =
17199 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
17200 vos_mem_copy(pIbssInd->peerAddr,
17201 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
17202 sizeof(tSirMacAddr));
17203 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
17204 break;
17205 }
17206
Abhishek Singh00b71972016-01-07 10:51:04 +053017207#ifdef WLAN_FEATURE_RMC
17208 case WDI_RMC_RULER_PICK_NEW :
17209 {
17210 tSirRmcUpdateInd *pRmcUpdateInd =
17211 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
17212
17213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17214 "Received WDI_RMC_UPDATE_IND from WDI");
17215 if (NULL == pRmcUpdateInd)
17216 {
17217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17218 "Memory allocation failure, "
17219 "WDI_RMC_UPDATE_IND not forwarded");
17220 break;
17221 }
17222
17223 pRmcUpdateInd->indication =
17224 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
17225 pRmcUpdateInd->role =
17226 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
17227
17228 /* Copy the mcast transmitter which should be us */
17229 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
17230 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
17231 mcastTransmitter,
17232 sizeof(tSirMacAddr));
17233 /* Copy the mcast group address */
17234 vos_mem_copy(pRmcUpdateInd->mcastGroup,
17235 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
17236 sizeof(tSirMacAddr));
17237 vos_mem_copy(pRmcUpdateInd->mcastRuler,
17238 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
17239 sizeof(tSirMacAddr));
17240 vos_mem_copy(pRmcUpdateInd->ruler,
17241 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
17242 sizeof(pRmcUpdateInd->ruler));
17243
17244 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
17245 break;
17246 }
17247#endif /* WLAN_FEATURE_RMC */
17248
Rajeev79dbe4c2013-10-05 11:03:42 +053017249#ifdef FEATURE_WLAN_BATCH_SCAN
17250 case WDI_BATCH_SCAN_RESULT_IND:
17251 {
17252 void *pBatchScanResult;
17253 void *pCallbackContext;
17254 tpAniSirGlobal pMac;
17255
17256 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17257 "Received WDI_BATCHSCAN_RESULT_IND from FW");
17258
17259 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053017260 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053017261 {
17262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17263 "%s:pWDA is NULL", __func__);
17264 VOS_ASSERT(0);
17265 return;
17266 }
17267
17268 pBatchScanResult =
17269 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
17270 if (NULL == pBatchScanResult)
17271 {
17272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17273 "%s:Batch scan result from FW is null can't invoke HDD callback",
17274 __func__);
17275 VOS_ASSERT(0);
17276 return;
17277 }
17278
17279 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17280 if (NULL == pMac)
17281 {
17282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17283 "%s:pMac is NULL", __func__);
17284 VOS_ASSERT(0);
17285 return;
17286 }
17287
17288 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
17289 /*call hdd callback with set batch scan response data*/
17290 if(pMac->pmc.batchScanResultCallback)
17291 {
17292 pMac->pmc.batchScanResultCallback(pCallbackContext,
17293 pBatchScanResult);
17294 }
17295 else
17296 {
17297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17298 "%s:HDD callback is null", __func__);
17299 VOS_ASSERT(0);
17300 }
17301 break;
17302 }
17303#endif
17304
Leo Chang0b0e45a2013-12-15 15:18:55 -080017305#ifdef FEATURE_WLAN_CH_AVOID
17306 case WDI_CH_AVOID_IND:
17307 {
17308 vos_msg_t vosMsg;
17309 tSirChAvoidIndType *chAvoidInd;
17310
17311 chAvoidInd =
17312 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
17313 if (NULL == chAvoidInd)
17314 {
17315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17316 "%s: CH_AVOID IND buffer alloc Fail", __func__);
17317 return ;
17318 }
17319
17320 chAvoidInd->avoidRangeCount =
17321 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
17322 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
17323 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
17324 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
17325
17326 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17327 "%s : WDA CH avoid notification", __func__);
17328
17329 vosMsg.type = eWNI_SME_CH_AVOID_IND;
17330 vosMsg.bodyptr = chAvoidInd;
17331 vosMsg.bodyval = 0;
17332 /* Send message to SME */
17333 if (VOS_STATUS_SUCCESS !=
17334 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17335 {
17336 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17337 "post eWNI_SME_CH_AVOID_IND to SME Failed");
17338 vos_mem_free(chAvoidInd);
17339 }
17340 break;
17341 }
17342#endif /* FEATURE_WLAN_CH_AVOID */
17343
Sunil Duttbd736ed2014-05-26 21:19:41 +053017344#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17345 case WDI_LL_STATS_RESULTS_IND:
17346 {
17347 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053017348 tpAniSirGlobal pMac;
17349
17350 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17351 "Received WDI_LL_STATS_RESULTS_IND from FW");
17352
17353 /*sanity check*/
17354 if (NULL == pWDA)
17355 {
17356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17357 "%s:pWDA is NULL", __func__);
17358 VOS_ASSERT(0);
17359 return;
17360 }
17361
17362 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053017363 (void *)wdiLowLevelInd->
17364 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053017365 if (NULL == pLinkLayerStatsInd)
17366 {
17367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17368 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
17369 __func__);
17370 VOS_ASSERT(0);
17371 return;
17372 }
17373
17374 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17375 if (NULL == pMac)
17376 {
17377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17378 "%s:pMac is NULL", __func__);
17379 VOS_ASSERT(0);
17380 return;
17381 }
17382
Dino Mycled3d50022014-07-07 12:58:25 +053017383 /* call hdd callback with Link Layer Statistics.
17384 * vdev_id/ifacId in link_stats_results will be
17385 * used to retrieve the correct HDD context
17386 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053017387 if (pMac->sme.pLinkLayerStatsIndCallback)
17388 {
Dino Mycled3d50022014-07-07 12:58:25 +053017389 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053017390 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053017391 pLinkLayerStatsInd,
17392 wdiLowLevelInd->
17393 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053017394 }
17395 else
17396 {
17397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17398 "%s:HDD callback is null", __func__);
17399 }
17400 break;
17401 }
17402#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
17403
Dino Mycle41bdc942014-06-10 11:30:24 +053017404#ifdef WLAN_FEATURE_EXTSCAN
17405 case WDI_EXTSCAN_PROGRESS_IND:
17406 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
17407 case WDI_EXTSCAN_SCAN_RESULT_IND:
17408 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053017409 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053017410 {
17411 void *pEXTScanData;
17412 void *pCallbackContext;
17413 tpAniSirGlobal pMac;
17414 tANI_U16 indType;
17415
17416 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17417 "Received WDI_EXTSCAN Indications from FW");
17418 /*sanity check*/
17419 if (NULL == pWDA)
17420 {
17421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17422 "%s:pWDA is NULL", __func__);
17423 VOS_ASSERT(0);
17424 return;
17425 }
17426 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
17427 {
17428 indType = WDA_EXTSCAN_PROGRESS_IND;
17429
17430 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17431 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
17432 }
17433 if (wdiLowLevelInd->wdiIndicationType ==
17434 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
17435 {
17436 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
17437
17438 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17439 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
17440 }
17441 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
17442 {
17443 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
17444
17445 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17446 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
17447 }
17448 if (wdiLowLevelInd->wdiIndicationType ==
17449 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
17450 {
17451 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
17452
17453 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17454 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
17455 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053017456 if (wdiLowLevelInd->wdiIndicationType ==
17457 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
17458 {
17459 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
17460
17461 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17462 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
17463 }
Dino Mycle41bdc942014-06-10 11:30:24 +053017464
17465 pEXTScanData =
17466 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
17467 if (NULL == pEXTScanData)
17468 {
17469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17470 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
17471 __func__);
17472 VOS_ASSERT(0);
17473 return;
17474 }
17475
17476 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17477 if (NULL == pMac)
17478 {
17479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17480 "%s:pMac is NULL", __func__);
17481 VOS_ASSERT(0);
17482 return;
17483 }
17484
17485 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17486
17487 if(pMac->sme.pEXTScanIndCb)
17488 {
17489 pMac->sme.pEXTScanIndCb(pCallbackContext,
17490 indType,
17491 pEXTScanData);
17492 }
17493 else
17494 {
17495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17496 "%s:HDD callback is null", __func__);
17497 }
17498 break;
17499 }
17500#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053017501 case WDI_DEL_BA_IND:
17502 {
17503 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053017504 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053017505
17506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17507 "Received WDI_DEL_BA_IND from WDI ");
17508 if(NULL == pDelBAInd)
17509 {
17510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17511 "%s: VOS MEM Alloc Failure", __func__);
17512 break;
17513 }
17514 vos_mem_copy(pDelBAInd->peerMacAddr,
17515 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
17516 sizeof(tSirMacAddr));
17517 vos_mem_copy(pDelBAInd->bssId,
17518 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
17519 sizeof(tSirMacAddr));
17520 pDelBAInd->staIdx =
17521 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
17522 pDelBAInd->baTID =
17523 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
17524 pDelBAInd->baDirection =
17525 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
17526 pDelBAInd->reasonCode =
17527 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
17528
17529 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
17530 (void *)pDelBAInd , 0) ;
17531 break;
17532 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053017533 case WDI_NAN_EVENT_IND:
17534 {
17535 vos_msg_t vosMsg;
17536 tpSirNanEvent pSirNanEvent = NULL;
17537
17538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17539 "Received WDI_NAN_EVENT");
17540
17541 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
17542 - sizeof( pSirNanEvent->event_data)
17543 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17544
17545 if (NULL == pSirNanEvent)
17546 {
17547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17548 "%s: VOS MEM Alloc Failure", __func__);
17549 VOS_ASSERT(0) ;
17550 break;
17551 }
17552
17553 pSirNanEvent->event_data_len =
17554 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
17555
17556 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
17557 {
17558 vos_mem_copy( pSirNanEvent->event_data,
17559 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
17560 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17561 }
17562
17563 /* VOS message wrapper */
17564 vosMsg.type = eWNI_SME_NAN_EVENT;
17565 vosMsg.bodyptr = pSirNanEvent;
17566 vosMsg.bodyval = 0;
17567
17568 /* Send message to SME */
17569 if (VOS_STATUS_SUCCESS
17570 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17571 {
17572 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17573 "post eWNI_SME_NAN_EVENT to SME Failed");
17574 vos_mem_free(pSirNanEvent);
17575 }
17576 break;
17577 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017578 case WDI_LOST_LINK_PARAMS_IND:
17579 {
17580 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
17581 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053017582
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017583 if (NULL == pLostLinkParamInd)
17584 {
17585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17586 "%s: VOS MEM Alloc Failure", __func__);
17587 break;
17588 }
17589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17590 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
17591
17592 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
17593 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
17594 pLostLinkParamInd->info.bssIdx =
17595 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
17596 pLostLinkParamInd->info.rssi =
17597 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
17598 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
17599 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
17600 sizeof(tSirMacAddr));
17601 pLostLinkParamInd->info.linkFlCnt =
17602 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
17603 pLostLinkParamInd->info.linkFlTx =
17604 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
17605 pLostLinkParamInd->info.lastDataRate =
17606 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
17607 pLostLinkParamInd->info.rsvd1 =
17608 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
17609 pLostLinkParamInd->info.rsvd2 =
17610 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
17611 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
17612 (void *)pLostLinkParamInd , 0) ;
17613 break;
17614 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017615 case WDI_RSSI_BREACHED_IND:
17616 {
17617 WDI_RssiBreachedIndType *pRssiBreachedInd;
17618 tpAniSirGlobal pMac;
17619
17620 pRssiBreachedInd =
17621 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
17622 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17623 "Received WDI_RSSI_BREACHED_IND from FW");
17624
17625 vos_mem_copy(pRssiBreachedInd,
17626 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
17627 sizeof(WDI_RssiBreachedIndType));
17628
17629 /*sanity check*/
17630 if (NULL == pWDA)
17631 {
17632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17633 "%s:pWDA is NULL", __func__);
17634 vos_mem_free(pRssiBreachedInd);
17635 VOS_ASSERT(0);
17636 return;
17637 }
17638
17639 if (NULL == pRssiBreachedInd)
17640 {
17641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17642 "%s:Breach indication from FW is null can't invoke HDD callback",
17643 __func__);
17644 VOS_ASSERT(0);
17645 return;
17646 }
17647
17648 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17649 if (NULL == pMac)
17650 {
17651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17652 "%s:pMac is NULL", __func__);
17653 VOS_ASSERT(0);
17654 vos_mem_free(pRssiBreachedInd);
17655 return;
17656 }
17657
17658 if (pMac->sme.rssiThresholdBreachedCb)
17659 {
17660 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
17661 }
17662 else
17663 {
17664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17665 "%s:HDD callback is null", __func__);
17666 }
17667 vos_mem_free(pRssiBreachedInd);
17668 break;
17669 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017670#ifdef FEATURE_OEM_DATA_SUPPORT
17671 case WDI_START_OEM_DATA_RSP_IND_NEW:
17672 {
17673 void *pCallbackContext;
17674 tpAniSirGlobal pMac;
17675 tANI_U16 indType;
17676 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017677 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017678
17679 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17680 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17681
17682 /*sanity check*/
17683 if (NULL == pWDA)
17684 {
17685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17686 "%s:pWDA is NULL", __func__);
17687 VOS_ASSERT(0);
17688 return;
17689 }
17690
17691 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17692 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017693 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17694 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017695 if (NULL == pOemRspNewIndData)
17696 {
17697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17698 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17699 __func__);
17700 VOS_ASSERT(0);
17701 return;
17702 }
17703
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017704 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17705 OemRspNewLen;
17706
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017707 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17708 if (NULL == pMac)
17709 {
17710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17711 "%s:pMac is NULL", __func__);
17712 VOS_ASSERT(0);
17713 return;
17714 }
17715
17716 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17717
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17719 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17720
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017721 if(pMac->sme.pOemDataIndCb)
17722 {
17723 pMac->sme.pOemDataIndCb(pCallbackContext,
17724 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017725 pOemRspNewIndData,
17726 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017727 }
17728 else
17729 {
17730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17731 "%s:HDD callback is null", __func__);
17732 }
17733 break;
17734 }
17735#endif /* FEATURE_OEM_DATA_SUPPORT */
17736
Jeff Johnson295189b2012-06-20 16:38:30 -070017737 default:
17738 {
17739 /* TODO error */
17740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17741 "Received UNKNOWN Indication from WDI ");
17742 }
17743 }
17744 return ;
17745}
17746
Jeff Johnson295189b2012-06-20 16:38:30 -070017747/*
17748 * BA related processing in WDA.
17749 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017750void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17751 void* pUserData)
17752{
17753 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17754 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017755 if(NULL == pWdaParams)
17756 {
17757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017758 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017759 VOS_ASSERT(0) ;
17760 return ;
17761 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017763 vos_mem_free(pWdaParams->wdaMsgParam) ;
17764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17765 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017768 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17769 {
17770 tANI_U8 i = 0 ;
17771 tBaActivityInd *baActivityInd = NULL ;
17772 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17773 tANI_U8 allocSize = sizeof(tBaActivityInd)
17774 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17775 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17776 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017777 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017778 if(NULL == baActivityInd)
17779 {
17780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017782 VOS_ASSERT(0) ;
17783 return;
17784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017785 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17786 sizeof(tSirMacAddr)) ;
17787 baActivityInd->baCandidateCnt = baCandidateCount ;
17788
17789 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17790 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17791
17792 for(i = 0 ; i < baCandidateCount ; i++)
17793 {
17794 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017795 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17796 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017797 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17798 {
17799 baCandidate->baInfo[tid].fBaEnable =
17800 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17801 baCandidate->baInfo[tid].startingSeqNum =
17802 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17803 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017804 wdiBaCandidate++ ;
17805 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017806 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017807 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17808 }
17809 else
17810 {
17811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17812 "BA Trigger RSP with Failure received ");
17813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017814 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017815}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017816
17817
17818/*
17819 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17820 * during MCC
17821 */
17822void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17823{
17824 wpt_uint32 enabled;
17825 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17826 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17827 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17828
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017829 if (NULL == pMac )
17830 {
17831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17832 "%s: Invoked with invalid MAC context ", __func__ );
17833 VOS_ASSERT(0);
17834 return;
17835 }
17836
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017837 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17838 != eSIR_SUCCESS)
17839 {
17840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17841 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17842 return;
17843 }
17844
17845 if(!enabled)
17846 {
17847 return;
17848 }
17849
17850 if(NULL == pWDA)
17851 {
17852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17853 "%s:WDA context is NULL", __func__);
17854 VOS_ASSERT(0);
17855 return;
17856 }
17857
17858 if(activate)
17859 {
17860 if( VOS_STATUS_SUCCESS !=
17861 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17862 {
17863 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17864 "Traffic Stats Timer Start Failed ");
17865 return;
17866 }
17867 WDI_DS_ActivateTrafficStats();
17868 }
17869 else
17870 {
17871 WDI_DS_DeactivateTrafficStats();
17872 WDI_DS_ClearTrafficStats();
17873
17874 if( VOS_STATUS_SUCCESS !=
17875 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17876 {
17877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17878 "Traffic Stats Timer Stop Failed ");
17879 return;
17880 }
17881 }
17882}
17883
17884/*
17885 * Traffic Stats Timer handler
17886 */
17887void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17888{
17889 WDI_Status wdiStatus;
17890 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17891 WDI_TrafficStatsIndType trafficStatsIndParams;
17892 wpt_uint32 length, enabled;
17893 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17894
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017895 if (NULL == pMac )
17896 {
17897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17898 "%s: Invoked with invalid MAC context ", __func__ );
17899 VOS_ASSERT(0);
17900 return;
17901 }
17902
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017903 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17904 != eSIR_SUCCESS)
17905 {
17906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17907 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17908 return;
17909 }
17910
17911 if(!enabled)
17912 {
17913 WDI_DS_DeactivateTrafficStats();
17914 return;
17915 }
17916
17917 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17918
17919 if(pWdiTrafficStats != NULL)
17920 {
17921 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17922 trafficStatsIndParams.length = length;
17923 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017924 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017925 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17926 trafficStatsIndParams.pUserData = pWDA;
17927
17928 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17929
17930 if(WDI_STATUS_PENDING == wdiStatus)
17931 {
17932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17933 "Pending received for %s:%d ",__func__,__LINE__ );
17934 }
17935 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17936 {
17937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17938 "Failure in %s:%d ",__func__,__LINE__ );
17939 }
17940
17941 WDI_DS_ClearTrafficStats();
17942 }
17943 else
17944 {
17945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17946 "pWdiTrafficStats is Null");
17947 }
17948
17949 if( VOS_STATUS_SUCCESS !=
17950 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17951 {
17952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17953 "Traffic Stats Timer Start Failed ");
17954 return;
17955 }
17956}
17957
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017958bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
17959{
17960 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
17961 return true;
17962 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
17963 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
17964 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
17965 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
17966 jiffies_to_msecs(jiffies)))
17967 {
17968 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17969 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
17970 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
17971 return false;
17972 }
17973 return true;
17974}
17975
Jeff Johnson295189b2012-06-20 16:38:30 -070017976/*
17977 * BA Activity check timer handler
17978 */
17979void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17980{
17981 tANI_U8 curSta = 0 ;
17982 tANI_U8 tid = 0 ;
17983 tANI_U8 size = 0 ;
17984 tANI_U8 baCandidateCount = 0 ;
17985 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017986 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017987 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017988 tpAniSirGlobal pMac;
17989
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017990 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017991 {
17992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017993 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017994 VOS_ASSERT(0);
17995 return ;
17996 }
17997 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17998 {
17999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18000 "Inconsistent STA entries in WDA");
18001 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018002 }
18003 if(NULL == pWDA->pVosContext)
18004 {
18005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18006 "%s: pVosContext is NULL",__func__);
18007 VOS_ASSERT(0);
18008 return ;
18009 }
18010 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053018011 if(NULL == pMac)
18012 {
18013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18014 "%s: pMac is NULL",__func__);
18015 VOS_ASSERT(0);
18016 return ;
18017 }
18018
Abhishek Singh0644e482014-10-06 18:38:23 +053018019 if (wlan_cfgGetInt(pMac,
18020 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
18021 eSIR_SUCCESS)
18022 {
18023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18024 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
18025 val = 0;
18026 }
18027
Jeff Johnson295189b2012-06-20 16:38:30 -070018028 /* walk through all STA entries and find out TX packet count */
18029 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
18030 {
Abhishek Singh0644e482014-10-06 18:38:23 +053018031 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018032#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018033 // We can only do BA on "hard" STAs.
18034 if (!(IS_HWSTA_IDX(curSta)))
18035 {
18036 continue;
18037 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018038#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018039 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
18040 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018041 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018042 tANI_U32 txPktCount = 0 ;
18043 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018044 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018045 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
18046 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070018047 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
18048 curSta, tid, &txPktCount)))
18049 {
18050#if 0
18051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18052 "************* %d:%d, %d ",curSta, txPktCount,
18053 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
18054#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053018055 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
18056 (currentOperChan <= SIR_11B_CHANNEL_END)))
18057 {
18058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18059 "%s: BTC disabled aggregation - dont start "
18060 "TX ADDBA req",__func__);
18061 }
18062 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018063 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018064 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053018065 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
18066 pWDA->wdaGlobalSystemRole) && txPktCount )
18067 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
18068 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070018069 {
18070 /* get prepare for sending message to HAL */
18071 //baCandidate[baCandidateCount].staIdx = curSta ;
18072 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
18073 newBaCandidate = WDA_ENABLE_BA ;
18074 }
18075 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
18076 }
18077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018078 /* fill the entry for all the sta with given TID's */
18079 if(WDA_ENABLE_BA == newBaCandidate)
18080 {
18081 /* move to next BA candidate */
18082 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
18083 size += sizeof(WDI_TriggerBAReqCandidateType) ;
18084 baCandidateCount++ ;
18085 newBaCandidate = WDA_DISABLE_BA ;
18086 }
18087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018088 /* prepare and send message to hal */
18089 if( 0 < baCandidateCount)
18090 {
18091 WDI_Status status = WDI_STATUS_SUCCESS ;
18092 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
18093 tWDA_ReqParams *pWdaParams =
18094 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018095 if(NULL == pWdaParams)
18096 {
18097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018099 VOS_ASSERT(0) ;
18100 return;
18101 }
18102 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
18103 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
18104 if(NULL == wdiTriggerBaReq)
18105 {
18106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018108 VOS_ASSERT(0) ;
18109 vos_mem_free(pWdaParams);
18110 return;
18111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018112 do
18113 {
18114 WDI_TriggerBAReqinfoType *triggerBaInfo =
18115 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
18116 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
18117 /* TEMP_FIX: Need to see if WDI need check for assoc session for
18118 * for each request */
18119 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
18120 triggerBaInfo->ucBASessionID = 0;
18121 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
18122 } while(0) ;
18123 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
18124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018126 pWdaParams->pWdaContext = pWDA;
18127 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
18128 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053018129 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070018130 WDA_TriggerBaReqCallback, pWdaParams) ;
18131 if(IS_WDI_STATUS_FAILURE(status))
18132 {
18133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18134 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
18135 vos_mem_free(pWdaParams->wdaMsgParam) ;
18136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18137 vos_mem_free(pWdaParams) ;
18138 }
18139 }
18140 else
18141 {
18142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18143 "There is no TID for initiating BA");
18144 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018145 if( VOS_STATUS_SUCCESS !=
18146 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18147 {
18148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18149 "BA Activity Timer Stop Failed ");
18150 return ;
18151 }
18152 if( VOS_STATUS_SUCCESS !=
18153 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18154 {
18155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18156 "BA Activity Timer Start Failed ");
18157 return;
18158 }
18159 return ;
18160}
Jeff Johnson295189b2012-06-20 16:38:30 -070018161/*
18162 * WDA common routine to create timer used by WDA.
18163 */
18164static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
18165{
Jeff Johnson295189b2012-06-20 16:38:30 -070018166 VOS_STATUS status = VOS_STATUS_SUCCESS ;
18167 tANI_U32 val = 0 ;
18168 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18169
18170 if(NULL == pMac)
18171 {
18172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018173 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018174 VOS_ASSERT(0);
18175 return VOS_STATUS_E_FAILURE;
18176 }
18177 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
18178 != eSIR_SUCCESS)
18179 {
18180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18181 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
18182 return VOS_STATUS_E_FAILURE;
18183 }
18184 val = SYS_MS_TO_TICKS(val) ;
18185
18186 /* BA activity check timer */
18187 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
18188 "BA Activity Check timer", WDA_TimerHandler,
18189 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
18190 if(status != TX_SUCCESS)
18191 {
18192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18193 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018194 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018196 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018197 /* Tx Complete Timeout timer */
18198 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
18199 "Tx Complete Check timer", WDA_TimerHandler,
18200 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018201 if(status != TX_SUCCESS)
18202 {
18203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18204 "Unable to create Tx Complete Timeout timer");
18205 /* Destroy timer of BA activity check timer */
18206 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18207 if(status != TX_SUCCESS)
18208 {
18209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18210 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018211 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018212 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018213 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018214 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018215
18216 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
18217
18218 /* Traffic Stats timer */
18219 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
18220 "Traffic Stats timer", WDA_TimerHandler,
18221 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
18222 if(status != TX_SUCCESS)
18223 {
18224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18225 "Unable to create traffic stats timer");
18226 /* Destroy timer of BA activity check timer */
18227 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18228 if(status != TX_SUCCESS)
18229 {
18230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18231 "Unable to Destroy BA activity timer");
18232 }
18233 /* Destroy timer of tx complete timer */
18234 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
18235 if(status != TX_SUCCESS)
18236 {
18237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18238 "Unable to Tx complete timer");
18239 }
18240 return VOS_STATUS_E_FAILURE ;
18241 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018242 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018243}
Jeff Johnson295189b2012-06-20 16:38:30 -070018244/*
18245 * WDA common routine to destroy timer used by WDA.
18246 */
18247static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
18248{
18249 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018250 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
18251 if(status != TX_SUCCESS)
18252 {
18253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18254 "Unable to Destroy Tx Complete Timeout timer");
18255 return eSIR_FAILURE ;
18256 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018257 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18258 if(status != TX_SUCCESS)
18259 {
18260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18261 "Unable to Destroy BA activity timer");
18262 return eSIR_FAILURE ;
18263 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018264 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
18265 if(status != TX_SUCCESS)
18266 {
18267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18268 "Unable to Destroy traffic stats timer");
18269 return eSIR_FAILURE ;
18270 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018271 return eSIR_SUCCESS ;
18272}
Jeff Johnson295189b2012-06-20 16:38:30 -070018273/*
18274 * WDA timer handler.
18275 */
18276void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
18277{
18278 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
18279 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018280 /*
18281 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
18282 */
18283 wdaMsg.type = timerInfo ;
18284 wdaMsg.bodyptr = NULL;
18285 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070018286 /* post the message.. */
18287 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
18288 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
18289 {
18290 vosStatus = VOS_STATUS_E_BADMSG;
18291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018292}
Jeff Johnson295189b2012-06-20 16:38:30 -070018293/*
18294 * WDA Tx Complete timeout Indication.
18295 */
18296void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
18297{
18298 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053018299 tpSirTxBdStatus txBdStatus = {0};
18300
Jeff Johnson295189b2012-06-20 16:38:30 -070018301 if( pWDA->pAckTxCbFunc )
18302 {
18303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018304 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053018305 /*Indicate failure*/
18306 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070018307 pWDA->pAckTxCbFunc = NULL;
18308 }
18309 else
18310 {
18311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018312 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070018313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018314}
Jeff Johnson295189b2012-06-20 16:38:30 -070018315/*
18316 * WDA Set REG Domain to VOS NV
18317 */
Abhishek Singha306a442013-11-07 18:39:01 +053018318eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
18319 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070018320{
Abhishek Singha306a442013-11-07 18:39:01 +053018321 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070018322 {
18323 return eHAL_STATUS_INVALID_PARAMETER;
18324 }
18325 return eHAL_STATUS_SUCCESS;
18326}
Jeff Johnson295189b2012-06-20 16:38:30 -070018327
Jeff Johnson295189b2012-06-20 16:38:30 -070018328#ifdef FEATURE_WLAN_SCAN_PNO
18329/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018330 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018331 *
18332 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018333void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018334{
18335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018336 tSirPNOScanReq *pPNOScanReqParams;
18337
Jeff Johnson295189b2012-06-20 16:38:30 -070018338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018339 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018340 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070018341 {
18342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018344 VOS_ASSERT(0) ;
18345 return ;
18346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018347
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018348 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
18349 if(pPNOScanReqParams->statusCallback)
18350 {
18351 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18352 (status == WDI_STATUS_SUCCESS) ?
18353 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
18354 }
18355
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018356 if (pPNOScanReqParams->enable == 1)
18357 {
18358 if (pPNOScanReqParams->aNetworks)
18359 vos_mem_free(pPNOScanReqParams->aNetworks);
18360 if (pPNOScanReqParams->p24GProbeTemplate)
18361 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18362 if (pPNOScanReqParams->p5GProbeTemplate)
18363 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18364 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18366 vos_mem_free(pWdaParams->wdaMsgParam);
18367 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018368
18369 return ;
18370}
Jeff Johnson295189b2012-06-20 16:38:30 -070018371/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018372 * FUNCTION: WDA_PNOScanReqCallback
18373 * Free memory.
18374 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
18375 */
18376void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018377{
Yue Ma7f44bbe2013-04-12 11:47:39 -070018378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018379 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018380
18381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18382 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18383
18384 if(NULL == pWdaParams)
18385 {
18386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18387 "%s: pWdaParams received NULL", __func__);
18388 VOS_ASSERT(0);
18389 return;
18390 }
18391
18392 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18393 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018394 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
18395 if(pPNOScanReqParams->statusCallback)
18396 {
18397 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18398 VOS_STATUS_E_FAILURE);
18399 }
18400
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053018401 if (pPNOScanReqParams->enable == 1)
18402 {
18403 if (pPNOScanReqParams->aNetworks)
18404 vos_mem_free(pPNOScanReqParams->aNetworks);
18405 if (pPNOScanReqParams->p24GProbeTemplate)
18406 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18407 if (pPNOScanReqParams->p5GProbeTemplate)
18408 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18409 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18411 vos_mem_free(pWdaParams->wdaMsgParam);
18412 vos_mem_free(pWdaParams);
18413 }
18414
18415 return;
18416}
18417/*
18418 * FUNCTION: WDA_UpdateScanParamsRespCallback
18419 *
18420 */
18421void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
18422{
18423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018425 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018426 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070018427 {
18428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018429 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018430 VOS_ASSERT(0) ;
18431 return ;
18432 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018433
18434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18435 vos_mem_free(pWdaParams->wdaMsgParam);
18436 vos_mem_free(pWdaParams);
18437
Jeff Johnson295189b2012-06-20 16:38:30 -070018438 return ;
18439}
Jeff Johnson295189b2012-06-20 16:38:30 -070018440/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018441 * FUNCTION: WDA_UpdateScanParamsReqCallback
18442 * Free memory.
18443 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
18444 */
18445void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18446{
18447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18448
18449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18450 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18451
18452 if(NULL == pWdaParams)
18453 {
18454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18455 "%s: pWdaParams received NULL", __func__);
18456 VOS_ASSERT(0);
18457 return;
18458 }
18459
18460 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18461 {
18462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18463 vos_mem_free(pWdaParams->wdaMsgParam);
18464 vos_mem_free(pWdaParams);
18465 }
18466
18467 return;
18468}
18469/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018470 * FUNCTION: WDA_ProcessSetPreferredNetworkList
18471 * Request to WDI to set Preferred Network List.Offload
18472 */
18473VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
18474 tSirPNOScanReq *pPNOScanReqParams)
18475{
Jeff Johnson43971f52012-07-17 12:26:56 -070018476 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018477 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
18478 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
18479 tWDA_ReqParams *pWdaParams ;
18480 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018482 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018483 if(NULL == pwdiPNOScanReqInfo)
18484 {
18485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018487 VOS_ASSERT(0);
18488 return VOS_STATUS_E_NOMEM;
18489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018490 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18491 if(NULL == pWdaParams)
18492 {
18493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018494 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018495 VOS_ASSERT(0);
18496 vos_mem_free(pwdiPNOScanReqInfo);
18497 return VOS_STATUS_E_NOMEM;
18498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018499 //
18500 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
18501 //
18502 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
18503 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070018504 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
18505 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
18506 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018507 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
18508 {
18509 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
18510 &pPNOScanReqParams->aNetworks[i],
18511 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
18512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018513 /*Scan timer intervals*/
18514 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
18515 &pPNOScanReqParams->scanTimers,
18516 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070018517 /*Probe template for 2.4GHz band*/
18518 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
18519 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18520 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018521 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
18522 pPNOScanReqParams->p24GProbeTemplate,
18523 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070018524 /*Probe template for 5GHz band*/
18525 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
18526 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18527 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018528 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
18529 pPNOScanReqParams->p5GProbeTemplate,
18530 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018531 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
18532 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018533
Jeff Johnson295189b2012-06-20 16:38:30 -070018534 /* Store Params pass it to WDI */
18535 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
18536 pWdaParams->pWdaContext = pWDA;
18537 /* Store param pointer as passed in by caller */
18538 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018539 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018540 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018541 if(IS_WDI_STATUS_FAILURE(status))
18542 {
18543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18544 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018545 if(pPNOScanReqParams->statusCallback)
18546 {
18547 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18548 VOS_STATUS_E_FAILURE);
18549 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018550 if (pPNOScanReqParams->enable == 1)
18551 {
18552 if (pPNOScanReqParams->aNetworks)
18553 vos_mem_free(pPNOScanReqParams->aNetworks);
18554 if (pPNOScanReqParams->p24GProbeTemplate)
18555 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18556 if (pPNOScanReqParams->p5GProbeTemplate)
18557 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18560 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018561
Jeff Johnson295189b2012-06-20 16:38:30 -070018562 pWdaParams->wdaWdiApiMsgParam = NULL;
18563 pWdaParams->wdaMsgParam = NULL;
18564 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018565 return CONVERT_WDI2VOS_STATUS(status) ;
18566}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018567
18568#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18569
18570void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
18571{
18572 /*Convert the CSR Auth types to WDI Auth types */
18573 switch (csrAuthType)
18574 {
18575 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
18576 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18577 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018578#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018579 case eCSR_AUTH_TYPE_CCKM_WPA:
18580 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
18581 break;
18582#endif
18583 case eCSR_AUTH_TYPE_WPA:
18584 *AuthType = eWDA_AUTH_TYPE_WPA;
18585 break;
18586 case eCSR_AUTH_TYPE_WPA_PSK:
18587 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
18588 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018589#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018590 case eCSR_AUTH_TYPE_CCKM_RSN:
18591 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
18592 break;
18593#endif
18594 case eCSR_AUTH_TYPE_RSN:
18595 *AuthType = eWDA_AUTH_TYPE_RSN;
18596 break;
18597 case eCSR_AUTH_TYPE_RSN_PSK:
18598 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
18599 break;
18600#if defined WLAN_FEATURE_VOWIFI_11R
18601 case eCSR_AUTH_TYPE_FT_RSN:
18602 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
18603 break;
18604 case eCSR_AUTH_TYPE_FT_RSN_PSK:
18605 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
18606 break;
18607#endif
18608#ifdef FEATURE_WLAN_WAPI
18609 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
18610 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
18611 break;
18612 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
18613 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
18614 break;
18615#endif /* FEATURE_WLAN_WAPI */
18616 case eCSR_AUTH_TYPE_SHARED_KEY:
18617 case eCSR_AUTH_TYPE_AUTOSWITCH:
18618 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18619 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018620#ifdef WLAN_FEATURE_11W
18621 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
18622 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018623 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018624 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
18625 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
18626 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018627#endif
18628 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053018629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018630 "%s: Unknown Auth Type", __func__);
18631 break;
18632 }
18633}
18634void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
18635{
18636 switch (csrEncrType)
18637 {
18638 case eCSR_ENCRYPT_TYPE_NONE:
18639 *EncrType = WDI_ED_NONE;
18640 break;
18641 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
18642 case eCSR_ENCRYPT_TYPE_WEP40:
18643 *EncrType = WDI_ED_WEP40;
18644 break;
18645 case eCSR_ENCRYPT_TYPE_WEP104:
18646 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
18647 *EncrType = WDI_ED_WEP104;
18648 break;
18649 case eCSR_ENCRYPT_TYPE_TKIP:
18650 *EncrType = WDI_ED_TKIP;
18651 break;
18652 case eCSR_ENCRYPT_TYPE_AES:
18653 *EncrType = WDI_ED_CCMP;
18654 break;
18655#ifdef WLAN_FEATURE_11W
18656 case eCSR_ENCRYPT_TYPE_AES_CMAC:
18657 *EncrType = WDI_ED_AES_128_CMAC;
18658 break;
18659#endif
18660#ifdef FEATURE_WLAN_WAPI
18661 case eCSR_ENCRYPT_TYPE_WPI:
18662 *EncrType = WDI_ED_WPI;
18663 break;
18664#endif
18665 case eCSR_ENCRYPT_TYPE_ANY:
18666 *EncrType = WDI_ED_ANY;
18667 break;
18668
18669 default:
18670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18671 "%s: Unknown Encryption Type", __func__);
18672 break;
18673 }
18674}
18675
Kapil Gupta04ab1992016-06-26 13:36:51 +053018676#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18677VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
18678 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
18679{
18680 WDI_Status status;
18681 tWDA_ReqParams *pWdaParams ;
18682 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
18683
18684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18685 "------> %s " ,__func__);
18686
18687 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
18688 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
18689 if (NULL == pwdiPERRoamOffloadScanInfo) {
18690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18691 "%s: VOS MEM Alloc Failure", __func__);
18692 VOS_ASSERT(0);
18693 return VOS_STATUS_E_NOMEM;
18694 }
18695
18696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18697 if (NULL == pWdaParams) {
18698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18699 "%s: VOS MEM Alloc Failure", __func__);
18700 VOS_ASSERT(0);
18701 vos_mem_free(pwdiPERRoamOffloadScanInfo);
18702 return VOS_STATUS_E_NOMEM;
18703 }
18704
18705 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
18706 pPERRoamOffloadScanReqParams->rateUpThreshold;
18707 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
18708 pPERRoamOffloadScanReqParams->rateDownThreshold;
18709 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
18710 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
18711 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
18712 pPERRoamOffloadScanReqParams->PERtimerThreshold;
18713 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
18714 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053018715 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
18716 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053018717 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
18718 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
18719
18720 /* Store Params pass it to WDI */
18721 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
18722 pWdaParams->pWdaContext = pWDA;
18723
18724 /* Store param pointer as passed in by caller */
18725 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
18726 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
18727 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
18728 pWdaParams);
18729
18730 if(IS_WDI_STATUS_FAILURE(status)) {
18731 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18732 "Failure in Send config PER roam params");
18733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18734 vos_mem_free(pWdaParams->wdaMsgParam);
18735 vos_mem_free(pWdaParams);
18736 }
18737 return CONVERT_WDI2VOS_STATUS(status) ;
18738}
18739#endif
18740
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018741/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018742 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018743 * Request to WDI to set Roam Offload Scan
18744 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018745VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018746 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
18747{
18748 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018749 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18750 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018751 tWDA_ReqParams *pWdaParams ;
18752 v_U8_t csrAuthType;
18753 WDI_RoamNetworkType *pwdiRoamNetworkType;
18754 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18756 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018757 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018758 {
18759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18760 "%s: VOS MEM Alloc Failure", __func__);
18761 VOS_ASSERT(0);
18762 return VOS_STATUS_E_NOMEM;
18763 }
18764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18765 if (NULL == pWdaParams)
18766 {
18767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18768 "%s: VOS MEM Alloc Failure", __func__);
18769 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018770 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018771 return VOS_STATUS_E_NOMEM;
18772 }
18773
18774 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018775 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018776 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018777 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18778 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018779 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18780 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18781 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18782 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18783 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18784 sizeof(pwdiRoamNetworkType->currAPbssid));
18785 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18786 csrAuthType);
18787 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18788 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18789 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18790 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18791 pwdiRoamOffloadScanInfo->LookupThreshold =
18792 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018793 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18794 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018795 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18796 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018797 pwdiRoamOffloadScanInfo->MAWCEnabled =
18798 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018799 pwdiRoamOffloadScanInfo->Command =
18800 pRoamOffloadScanReqParams->Command ;
18801 pwdiRoamOffloadScanInfo->StartScanReason =
18802 pRoamOffloadScanReqParams->StartScanReason ;
18803 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18804 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18805 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18806 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18807 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18808 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18809 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18810 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18811 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18812 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018813 pwdiRoamOffloadScanInfo->IsESEEnabled =
18814 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018815 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18816 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18817 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18818 pwdiRoamNetworkType->ssId.ucLength =
18819 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18820 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18821 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18822 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18823 pwdiRoamNetworkType->ChannelCount =
18824 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18825 pwdiRoamOffloadScanInfo->ChannelCacheType =
18826 pRoamOffloadScanReqParams->ChannelCacheType;
18827 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18828 pRoamOffloadScanReqParams->ValidChannelList,
18829 pRoamOffloadScanReqParams->ValidChannelCount);
18830 pwdiRoamOffloadScanInfo->ValidChannelCount =
18831 pRoamOffloadScanReqParams->ValidChannelCount;
18832 pwdiRoamOffloadScanInfo->us24GProbeSize =
18833 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18834 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18835 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18836 pRoamOffloadScanReqParams->p24GProbeTemplate,
18837 pwdiRoamOffloadScanInfo->us24GProbeSize);
18838 pwdiRoamOffloadScanInfo->us5GProbeSize =
18839 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18840 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18841 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18842 pRoamOffloadScanReqParams->p5GProbeTemplate,
18843 pwdiRoamOffloadScanInfo->us5GProbeSize);
18844 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18845 pRoamOffloadScanReqParams->MDID.mdiePresent;
18846 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18847 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018848 pwdiRoamOffloadScanInfo->nProbes =
18849 pRoamOffloadScanReqParams->nProbes;
18850 pwdiRoamOffloadScanInfo->HomeAwayTime =
18851 pRoamOffloadScanReqParams->HomeAwayTime;
18852 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018853 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018854 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018855 pWdaParams->pWdaContext = pWDA;
18856 /* Store param pointer as passed in by caller */
18857 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018858 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018859 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18860 if(IS_WDI_STATUS_FAILURE(status))
18861 {
18862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18863 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18865 vos_mem_free(pWdaParams->wdaMsgParam);
18866 pWdaParams->wdaWdiApiMsgParam = NULL;
18867 pWdaParams->wdaMsgParam = NULL;
18868 }
18869 return CONVERT_WDI2VOS_STATUS(status) ;
18870}
18871#endif
18872
Jeff Johnson295189b2012-06-20 16:38:30 -070018873/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018874 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018875 *
18876 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018877void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018878{
18879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18880
18881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018882 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018883
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018884 if(NULL == pWdaParams)
18885 {
18886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018887 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018888 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018889 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018890 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018891
Jeff Johnson295189b2012-06-20 16:38:30 -070018892 vos_mem_free(pWdaParams->wdaMsgParam) ;
18893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18894 vos_mem_free(pWdaParams) ;
18895
18896 return ;
18897}
18898/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018899 * FUNCTION: WDA_RssiFilterReqCallback
18900 * Free memory.
18901 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18902 */
18903void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18904{
18905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18906
18907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18908 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18909
18910 if(NULL == pWdaParams)
18911 {
18912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18913 "%s: pWdaParams received NULL", __func__);
18914 VOS_ASSERT(0);
18915 return;
18916 }
18917
18918 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18919 {
18920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18921 vos_mem_free(pWdaParams->wdaMsgParam);
18922 vos_mem_free(pWdaParams);
18923 }
18924
18925 return;
18926}
18927/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018928 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018929 * Request to WDI to set Preferred Network List.Offload
18930 */
18931VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18932 tSirSetRSSIFilterReq* pRssiFilterParams)
18933{
Jeff Johnson43971f52012-07-17 12:26:56 -070018934 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018935 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18936 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18937 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018940 if(NULL == pwdiSetRssiFilterReqInfo)
18941 {
18942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018944 VOS_ASSERT(0);
18945 return VOS_STATUS_E_NOMEM;
18946 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018947 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18948 if(NULL == pWdaParams)
18949 {
18950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018952 VOS_ASSERT(0);
18953 vos_mem_free(pwdiSetRssiFilterReqInfo);
18954 return VOS_STATUS_E_NOMEM;
18955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018956 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018957 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18958 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018959
Jeff Johnson295189b2012-06-20 16:38:30 -070018960 /* Store Params pass it to WDI */
18961 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18962 pWdaParams->pWdaContext = pWDA;
18963 /* Store param pointer as passed in by caller */
18964 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018965 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018966 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018967 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018968 if(IS_WDI_STATUS_FAILURE(status))
18969 {
18970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18971 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18973 vos_mem_free(pWdaParams->wdaMsgParam);
18974 pWdaParams->wdaWdiApiMsgParam = NULL;
18975 pWdaParams->wdaMsgParam = NULL;
18976 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018977 return CONVERT_WDI2VOS_STATUS(status) ;
18978}
18979
Jeff Johnson295189b2012-06-20 16:38:30 -070018980/*
18981 * FUNCTION: WDA_ProcessUpdateScanParams
18982 * Request to WDI to update Scan Parameters
18983 */
18984VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18985 tSirUpdateScanParams *pUpdateScanParams)
18986{
Jeff Johnson43971f52012-07-17 12:26:56 -070018987 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018988 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18989 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18990 sizeof(WDI_UpdateScanParamsInfoType)) ;
18991 tWDA_ReqParams *pWdaParams ;
18992 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018994 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018995 if(NULL == wdiUpdateScanParamsInfoType)
18996 {
18997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018999 VOS_ASSERT(0);
19000 return VOS_STATUS_E_NOMEM;
19001 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019002 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19003 if ( NULL == pWdaParams )
19004 {
19005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019007 VOS_ASSERT(0);
19008 vos_mem_free(wdiUpdateScanParamsInfoType);
19009 return VOS_STATUS_E_NOMEM;
19010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019011 //
19012 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
19013 //
Jeff Johnson295189b2012-06-20 16:38:30 -070019014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19015 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
19016 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
19017 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080019018 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070019019 pUpdateScanParams->b11dEnabled,
19020 pUpdateScanParams->b11dResolved,
19021 pUpdateScanParams->ucChannelCount,
19022 pUpdateScanParams->usPassiveMinChTime,
19023 pUpdateScanParams->usPassiveMaxChTime,
19024 pUpdateScanParams->usActiveMinChTime,
19025 pUpdateScanParams->usActiveMaxChTime,
19026 sizeof(tSirUpdateScanParams),
19027 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
19028
Jeff Johnson295189b2012-06-20 16:38:30 -070019029 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
19030 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070019031 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
19032 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070019033 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
19034 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070019035 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
19036 pUpdateScanParams->usActiveMaxChTime;
19037 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
19038 pUpdateScanParams->usActiveMinChTime;
19039 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
19040 pUpdateScanParams->usPassiveMaxChTime;
19041 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
19042 pUpdateScanParams->usPassiveMinChTime;
19043
Jeff Johnson295189b2012-06-20 16:38:30 -070019044 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053019045 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
19046 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070019047
Jeff Johnson295189b2012-06-20 16:38:30 -070019048 for ( i = 0; i <
19049 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
19050 i++)
19051 {
19052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19053 "Update Scan Parameters channel: %d",
19054 pUpdateScanParams->aChannels[i]);
19055
19056 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
19057 pUpdateScanParams->aChannels[i];
19058 }
19059
Yue Ma7f44bbe2013-04-12 11:47:39 -070019060 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
19061 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019062
Jeff Johnson295189b2012-06-20 16:38:30 -070019063 /* Store Params pass it to WDI */
19064 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
19065 pWdaParams->pWdaContext = pWDA;
19066 /* Store param pointer as passed in by caller */
19067 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070019068
Jeff Johnson295189b2012-06-20 16:38:30 -070019069
19070
19071 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019072 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019073 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019074 if(IS_WDI_STATUS_FAILURE(status))
19075 {
19076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19077 "Failure in Update Scan Params EQ WDI API, free all the memory " );
19078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19079 vos_mem_free(pWdaParams->wdaMsgParam);
19080 vos_mem_free(pWdaParams);
19081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019082 return CONVERT_WDI2VOS_STATUS(status) ;
19083}
19084#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019085
19086#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19087/*
19088 * FUNCTION: WDA_RoamOffloadScanReqCallback
19089 *
19090 */
19091void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19092{
19093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019094 vos_msg_t vosMsg;
19095 wpt_uint8 reason = 0;
19096
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070019097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019098 "<------ %s " ,__func__);
19099 if (NULL == pWdaParams)
19100 {
19101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19102 "%s: pWdaParams received NULL", __func__);
19103 VOS_ASSERT(0) ;
19104 return ;
19105 }
19106 if ( pWdaParams != NULL )
19107 {
19108 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
19109 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019110 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19112 }
19113 if ( pWdaParams->wdaMsgParam != NULL)
19114 {
19115 vos_mem_free(pWdaParams->wdaMsgParam);
19116 }
19117
19118 vos_mem_free(pWdaParams) ;
19119 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019120 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19121 vosMsg.bodyptr = NULL;
19122 if (WDI_STATUS_SUCCESS != status)
19123 {
19124 reason = 0;
19125 }
19126 vosMsg.bodyval = reason;
19127 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19128 {
19129 /* free the mem and return */
19130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070019131 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019132 }
19133
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019134 return ;
19135}
Kapil Gupta04ab1992016-06-26 13:36:51 +053019136
19137void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
19138{
19139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19140 vos_msg_t vosMsg;
19141 wpt_uint8 reason = 0;
19142
19143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19144 "<------ %s " ,__func__);
19145 if (NULL == pWdaParams) {
19146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19147 "%s: pWdaParams received NULL", __func__);
19148 VOS_ASSERT(0) ;
19149 return ;
19150 }
19151 if ( pWdaParams->wdaMsgParam != NULL)
19152 vos_mem_free(pWdaParams->wdaMsgParam);
19153
19154 vos_mem_free(pWdaParams) ;
19155 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
19156 vosMsg.bodyptr = NULL;
19157 if (WDI_STATUS_SUCCESS != status)
19158 reason = 0;
19159
19160 vosMsg.bodyval = reason;
19161 if (VOS_STATUS_SUCCESS !=
19162 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19163 /* free the mem and return */
19164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19165 "%s: Failed to post the rsp to UMAC", __func__);
19166 }
19167
19168 return ;
19169}
19170
19171
19172void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19173{
19174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19175 vos_msg_t vosMsg;
19176 wpt_uint8 reason = 0;
19177
19178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19179 "<------ %s " ,__func__);
19180 if (NULL == pWdaParams) {
19181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19182 "%s: pWdaParams received NULL", __func__);
19183 VOS_ASSERT(0) ;
19184 return ;
19185 }
19186 if ( pWdaParams->wdaMsgParam != NULL)
19187 vos_mem_free(pWdaParams->wdaMsgParam);
19188
19189 vos_mem_free(pWdaParams) ;
19190 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19191 vosMsg.bodyptr = NULL;
19192 if (WDI_STATUS_SUCCESS != status)
19193 reason = 0;
19194
19195 vosMsg.bodyval = reason;
19196 if (VOS_STATUS_SUCCESS !=
19197 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19198 /* free the mem and return */
19199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19200 "%s: Failed to post the rsp to UMAC", __func__);
19201 }
19202
19203 return ;
19204}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019205#endif
19206
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019207/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019208 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019209 *
19210 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019211void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019212{
19213 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19214
19215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19216 "<------ %s " ,__func__);
19217
19218 if(NULL == pWdaParams)
19219 {
19220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19221 "%s: pWdaParams received NULL", __func__);
19222 VOS_ASSERT(0);
19223 return;
19224 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019225
19226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19227 vos_mem_free(pWdaParams->wdaMsgParam);
19228 vos_mem_free(pWdaParams);
19229
19230 return;
19231}
19232/*
19233 * FUNCTION: WDA_SetPowerParamsReqCallback
19234 * Free memory.
19235 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
19236 */
19237void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19238{
19239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19240
19241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19242 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19243
19244 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019245 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070019246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19247 "%s: pWdaParams received NULL", __func__);
19248 VOS_ASSERT(0);
19249 return;
19250 }
19251
19252 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19253 {
19254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19255 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019256 vos_mem_free(pWdaParams);
19257 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019258
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019259 return;
19260}
19261
Jeff Johnson295189b2012-06-20 16:38:30 -070019262#ifdef WLAN_FEATURE_PACKET_FILTERING
19263/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019264 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019265 *
19266 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019267void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019268 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
19269 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019270{
19271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019274 if(NULL == pWdaParams)
19275 {
19276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019278 VOS_ASSERT(0) ;
19279 return ;
19280 }
19281
19282 vos_mem_free(pWdaParams->wdaMsgParam) ;
19283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19284 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019285 //print a msg, nothing else to do
19286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019287 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019288 return ;
19289}
Jeff Johnson295189b2012-06-20 16:38:30 -070019290/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019291 * FUNCTION: WDA_8023MulticastListReqCallback
19292 * Free memory.
19293 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
19294 */
19295void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
19296{
19297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19298
19299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19300 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19301
19302 if(NULL == pWdaParams)
19303 {
19304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19305 "%s: pWdaParams received NULL", __func__);
19306 VOS_ASSERT(0);
19307 return;
19308 }
19309
19310 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19311 {
19312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19313 vos_mem_free(pWdaParams->wdaMsgParam);
19314 vos_mem_free(pWdaParams);
19315 }
19316
19317 return;
19318}
19319/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019320 * FUNCTION: WDA_Process8023MulticastListReq
19321 * Request to WDI to add 8023 Multicast List
19322 */
19323VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
19324 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
19325{
Jeff Johnson43971f52012-07-17 12:26:56 -070019326 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019327 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
19328 tWDA_ReqParams *pWdaParams ;
19329 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019331 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019332 pwdiFltPktSetMcListReqParamsType =
19333 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
19334 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
19335 ) ;
19336 if(NULL == pwdiFltPktSetMcListReqParamsType)
19337 {
19338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019340 return VOS_STATUS_E_NOMEM;
19341 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019342 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19343 if(NULL == pWdaParams)
19344 {
19345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019347 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
19348 return VOS_STATUS_E_NOMEM;
19349 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019350
Jeff Johnson295189b2012-06-20 16:38:30 -070019351 //
19352 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
19353 //
19354 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070019355 pRcvFltMcAddrList->ulMulticastAddrCnt;
19356
19357 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
19358 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
19359 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
19360 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
19361
Jeff Johnson295189b2012-06-20 16:38:30 -070019362 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
19363 {
19364 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
19365 &(pRcvFltMcAddrList->multicastAddr[i]),
19366 sizeof(tSirMacAddr));
19367 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019368 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
19369 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019370
Jeff Johnson295189b2012-06-20 16:38:30 -070019371 /* Store Params pass it to WDI */
19372 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
19373 pWdaParams->pWdaContext = pWDA;
19374 /* Store param pointer as passed in by caller */
19375 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070019376 status = WDI_8023MulticastListReq(
19377 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019378 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019379 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019380 if(IS_WDI_STATUS_FAILURE(status))
19381 {
19382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19383 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
19384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19385 vos_mem_free(pWdaParams->wdaMsgParam);
19386 vos_mem_free(pWdaParams);
19387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019388 return CONVERT_WDI2VOS_STATUS(status) ;
19389}
Jeff Johnson295189b2012-06-20 16:38:30 -070019390/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019391 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019392 *
19393 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019394void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019395 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
19396 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019397{
19398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019400 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019401 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070019402 if(NULL == pWdaParams)
19403 {
19404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019405 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019406 VOS_ASSERT(0) ;
19407 return ;
19408 }
19409
19410 vos_mem_free(pWdaParams->wdaMsgParam) ;
19411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19412 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019413 //print a msg, nothing else to do
19414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019415 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019416 return ;
19417}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019418
19419/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019420 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
19421 * Free memory.
19422 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019423 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019424void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019425 void* pUserData)
19426{
19427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19428
19429 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19430 "<------ %s, wdiStatus: %d",
19431 __func__, wdiStatus);
19432
19433 if (NULL == pWdaParams)
19434 {
19435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19436 "%s: Invalid pWdaParams pointer", __func__);
19437 VOS_ASSERT(0);
19438 return;
19439 }
19440
19441 if (IS_WDI_STATUS_FAILURE(wdiStatus))
19442 {
19443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19444 vos_mem_free(pWdaParams->wdaMsgParam);
19445 vos_mem_free(pWdaParams);
19446 }
19447
19448 return;
19449}
19450
Jeff Johnson295189b2012-06-20 16:38:30 -070019451/*
19452 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
19453 * Request to WDI to set Receive Filters
19454 */
19455VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
19456 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
19457{
Jeff Johnson43971f52012-07-17 12:26:56 -070019458 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019459 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
19460 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
19461 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
19462 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
19463 tWDA_ReqParams *pWdaParams ;
19464 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019466 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019467 if(NULL == pwdiSetRcvPktFilterReqParamsType)
19468 {
19469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019471 VOS_ASSERT(0);
19472 return VOS_STATUS_E_NOMEM;
19473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019474 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19475 if(NULL == pWdaParams)
19476 {
19477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019478 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019479 VOS_ASSERT(0);
19480 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
19481 return VOS_STATUS_E_NOMEM;
19482 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019483 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
19484 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
19485 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
19486 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070019487 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
19488 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
19489
19490 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
19491 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019492
19493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19494 "FID %d FT %d NParams %d CT %d",
19495 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
19496 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
19497 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
19498 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070019499 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
19500 {
19501 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
19502 &pRcvPktFilterCfg->paramsData[i],
19503 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070019504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019505 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019506 pwdiSetRcvPktFilterReqParamsType->
19507 wdiPktFilterCfg.paramsData[i].protocolLayer,
19508 pwdiSetRcvPktFilterReqParamsType->
19509 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070019510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019511 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019512 pwdiSetRcvPktFilterReqParamsType->
19513 wdiPktFilterCfg.paramsData[i].dataOffset,
19514 pwdiSetRcvPktFilterReqParamsType->
19515 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070019516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019517 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019518 pwdiSetRcvPktFilterReqParamsType->
19519 wdiPktFilterCfg.paramsData[i].compareData[0],
19520 pwdiSetRcvPktFilterReqParamsType->
19521 wdiPktFilterCfg.paramsData[i].compareData[1],
19522 pwdiSetRcvPktFilterReqParamsType->
19523 wdiPktFilterCfg.paramsData[i].compareData[2],
19524 pwdiSetRcvPktFilterReqParamsType->
19525 wdiPktFilterCfg.paramsData[i].compareData[3],
19526 pwdiSetRcvPktFilterReqParamsType->
19527 wdiPktFilterCfg.paramsData[i].compareData[4],
19528 pwdiSetRcvPktFilterReqParamsType->
19529 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019531 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019532 pwdiSetRcvPktFilterReqParamsType->
19533 wdiPktFilterCfg.paramsData[i].dataMask[0],
19534 pwdiSetRcvPktFilterReqParamsType->
19535 wdiPktFilterCfg.paramsData[i].dataMask[1],
19536 pwdiSetRcvPktFilterReqParamsType->
19537 wdiPktFilterCfg.paramsData[i].dataMask[2],
19538 pwdiSetRcvPktFilterReqParamsType->
19539 wdiPktFilterCfg.paramsData[i].dataMask[3],
19540 pwdiSetRcvPktFilterReqParamsType->
19541 wdiPktFilterCfg.paramsData[i].dataMask[4],
19542 pwdiSetRcvPktFilterReqParamsType->
19543 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019544 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019545 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019546 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019547 /* Store Params pass it to WDI */
19548 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
19549 pWdaParams->pWdaContext = pWDA;
19550 /* Store param pointer as passed in by caller */
19551 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070019552 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019553 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019554 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019555 if(IS_WDI_STATUS_FAILURE(status))
19556 {
19557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19558 "Failure in SetFilter(),free all the memory,status %d ",status);
19559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19560 vos_mem_free(pWdaParams->wdaMsgParam);
19561 vos_mem_free(pWdaParams);
19562 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019563 return CONVERT_WDI2VOS_STATUS(status) ;
19564}
Jeff Johnson295189b2012-06-20 16:38:30 -070019565/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019566 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019567 *
19568 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019569void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019570 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
19571 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019572{
19573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19574 tWDA_CbContext *pWDA;
19575 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
19576 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
19577 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
19578 tANI_U8 i;
19579 vos_msg_t vosMsg;
19580
19581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019582 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019583 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
19584
Jeff Johnsone7245742012-09-05 17:12:55 -070019585 if(NULL == pRcvFltPktMatchCntRsp)
19586 {
19587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019588 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070019589 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019590 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070019591 return ;
19592 }
19593
Jeff Johnson295189b2012-06-20 16:38:30 -070019594 if(NULL == pWdaParams)
19595 {
19596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019597 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019598 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019599 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070019600 return ;
19601 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
19603 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019604 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
19605 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
19606
19607 /* Message Header */
19608 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19609 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
19610
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019611 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070019612
19613 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
19614 {
19615 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
19616 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
19617 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019618 /* VOS message wrapper */
19619 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19620 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
19621 vosMsg.bodyval = 0;
19622 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19623 {
19624 /* free the mem and return */
19625 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
19626 }
19627
19628 vos_mem_free(pWdaParams->wdaMsgParam) ;
19629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19630 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019631
19632 return;
19633}
19634/*
19635 * FUNCTION: WDA_FilterMatchCountReqCallback
19636 * Free memory and send RSP back to SME.
19637 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
19638 */
19639void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
19640{
19641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19642 vos_msg_t vosMsg;
19643
19644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19645 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19646
19647 if(NULL == pWdaParams)
19648 {
19649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19650 "%s: pWdaParams received NULL", __func__);
19651 VOS_ASSERT(0);
19652 return;
19653 }
19654
19655 /* VOS message wrapper */
19656 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19657 vosMsg.bodyptr = NULL;
19658 vosMsg.bodyval = 0;
19659
19660 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19661 {
19662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19663 vos_mem_free(pWdaParams->wdaMsgParam);
19664 vos_mem_free(pWdaParams);
19665 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
19666 }
19667
19668 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019669}
Jeff Johnson295189b2012-06-20 16:38:30 -070019670/*
19671 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
19672 * Request to WDI to get PC Filter Match Count
19673 */
19674VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
19675{
Jeff Johnson43971f52012-07-17 12:26:56 -070019676 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019677 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
19678 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
19679 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019681 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019682 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
19683 {
19684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019685 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019686 VOS_ASSERT(0);
19687 return VOS_STATUS_E_NOMEM;
19688 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019689 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19690 if(NULL == pWdaParams)
19691 {
19692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019693 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019694 VOS_ASSERT(0);
19695 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
19696 return VOS_STATUS_E_NOMEM;
19697 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019698
Yue Ma7f44bbe2013-04-12 11:47:39 -070019699 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
19700 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019701
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019702 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
19703 pRcvFltPktMatchRsp->bssId,
19704 sizeof(wpt_macAddr));
19705
Jeff Johnson295189b2012-06-20 16:38:30 -070019706 /* Store Params pass it to WDI */
19707 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
19708 pWdaParams->pWdaContext = pWDA;
19709 /* Store param pointer as passed in by caller */
19710 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070019711 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019712 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019713 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019714 if(IS_WDI_STATUS_FAILURE(status))
19715 {
19716 /* failure returned by WDI API */
19717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19718 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
19719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19720 vos_mem_free(pWdaParams) ;
19721 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
19722 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
19723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019724 return CONVERT_WDI2VOS_STATUS(status) ;
19725}
Jeff Johnson295189b2012-06-20 16:38:30 -070019726/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019727 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019728 *
19729 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019730void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019731 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
19732 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019733{
19734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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/* WDA_VOS_ASSERT(NULL != pWdaParams); */
19738 if(NULL == pWdaParams)
19739 {
19740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019741 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019742 VOS_ASSERT(0) ;
19743 return ;
19744 }
19745
19746 vos_mem_free(pWdaParams->wdaMsgParam) ;
19747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19748 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019749 //print a msg, nothing else to do
19750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019751 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019752 return ;
19753}
Jeff Johnson295189b2012-06-20 16:38:30 -070019754/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019755 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
19756 * Free memory.
19757 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
19758 */
19759void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19760{
19761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19762
19763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19764 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19765
19766 if(NULL == pWdaParams)
19767 {
19768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19769 "%s: Invalid pWdaParams pointer", __func__);
19770 VOS_ASSERT(0);
19771 return;
19772 }
19773
19774 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19775 {
19776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19777 vos_mem_free(pWdaParams->wdaMsgParam);
19778 vos_mem_free(pWdaParams);
19779 }
19780
19781 return;
19782}
19783/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019784 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
19785 * Request to WDI to clear Receive Filters
19786 */
19787VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
19788 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
19789{
Jeff Johnson43971f52012-07-17 12:26:56 -070019790 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019791 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
19792 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
19793 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019795 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019796 if(NULL == pwdiRcvFltPktClearReqParamsType)
19797 {
19798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019800 VOS_ASSERT(0);
19801 return VOS_STATUS_E_NOMEM;
19802 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19804 if(NULL == pWdaParams)
19805 {
19806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019808 VOS_ASSERT(0);
19809 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
19810 return VOS_STATUS_E_NOMEM;
19811 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019812 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
19813 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070019814 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
19815 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
19816 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
19817 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019818
Yue Ma7f44bbe2013-04-12 11:47:39 -070019819 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019820 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019821 /* Store Params pass it to WDI */
19822 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19823 pWdaParams->pWdaContext = pWDA;
19824 /* Store param pointer as passed in by caller */
19825 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019826 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019827 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019828 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019829 if(IS_WDI_STATUS_FAILURE(status))
19830 {
19831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19832 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
19833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019834 vos_mem_free(pWdaParams->wdaMsgParam);
19835 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019837 return CONVERT_WDI2VOS_STATUS(status) ;
19838}
19839#endif // WLAN_FEATURE_PACKET_FILTERING
19840
Jeff Johnson295189b2012-06-20 16:38:30 -070019841/*
19842 * FUNCTION: WDA_ProcessSetPowerParamsReq
19843 * Request to WDI to set power params
19844 */
19845VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19846 tSirSetPowerParamsReq *pPowerParams)
19847{
Jeff Johnson43971f52012-07-17 12:26:56 -070019848 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019849 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19850 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019851 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019853 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019854 if(NULL == pwdiSetPowerParamsReqInfo)
19855 {
19856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019857 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019858 VOS_ASSERT(0);
19859 return VOS_STATUS_E_NOMEM;
19860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019861 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19862 if(NULL == pWdaParams)
19863 {
19864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019866 VOS_ASSERT(0);
19867 vos_mem_free(pwdiSetPowerParamsReqInfo);
19868 return VOS_STATUS_E_NOMEM;
19869 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019870
Jeff Johnson295189b2012-06-20 16:38:30 -070019871
19872 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19873 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019874 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19875 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019876 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19877 pPowerParams->uListenInterval;
19878 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19879 pPowerParams->uBcastMcastFilter;
19880 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19881 pPowerParams->uEnableBET;
19882 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19883 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019884 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19885 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019886 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19887 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019888
Jeff Johnson295189b2012-06-20 16:38:30 -070019889 /* Store Params pass it to WDI */
19890 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19891 pWdaParams->pWdaContext = pWDA;
19892 /* Store param pointer as passed in by caller */
19893 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019894 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019895 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019896 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019897 if(IS_WDI_STATUS_FAILURE(status))
19898 {
19899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19900 "Failure in Set power params REQ WDI API, free all the memory " );
19901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19902 vos_mem_free(pWdaParams->wdaMsgParam);
19903 pWdaParams->wdaWdiApiMsgParam = NULL;
19904 pWdaParams->wdaMsgParam = NULL;
19905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019906 return CONVERT_WDI2VOS_STATUS(status) ;
19907}
19908
19909/*
19910 * FUNCTION: WDA_SetTmLevelRspCallback
19911 * Set TM Level response
19912 */
19913void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19914{
19915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19916
19917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019918 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019919
19920 if(NULL == pWdaParams)
19921 {
19922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019923 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019924 VOS_ASSERT(0) ;
19925 return ;
19926 }
19927
19928 /* Dose not need to send notification to upper layer
19929 * Just free allocated resources */
19930 if( pWdaParams != NULL )
19931 {
19932 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19933 {
19934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19935 }
19936 vos_mem_free(pWdaParams->wdaMsgParam) ;
19937 vos_mem_free(pWdaParams) ;
19938 }
19939}
19940
19941/*
19942 * FUNCTION: WDA_ProcessSetTmLevelReq
19943 * Set TM Level request
19944 */
19945VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19946 tAniSetTmLevelReq *setTmLevelReq)
19947{
19948 WDI_Status status = WDI_STATUS_SUCCESS ;
19949 tWDA_ReqParams *pWdaParams ;
19950 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19951 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19952 sizeof(WDI_SetTmLevelReqType)) ;
19953 if(NULL == wdiSetTmLevelReq)
19954 {
19955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019957 VOS_ASSERT(0);
19958 return VOS_STATUS_E_NOMEM;
19959 }
19960
19961 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19962 if(NULL == pWdaParams)
19963 {
19964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019965 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019966 VOS_ASSERT(0);
19967 vos_mem_free(wdiSetTmLevelReq);
19968 return VOS_STATUS_E_NOMEM;
19969 }
19970
19971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019972 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019973
19974 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19975 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19976
19977 pWdaParams->pWdaContext = pWDA;
19978 pWdaParams->wdaMsgParam = setTmLevelReq;
19979 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19980
19981 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19982 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19983
19984 if(IS_WDI_STATUS_FAILURE(status))
19985 {
19986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019987 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019988 vos_mem_free(pWdaParams->wdaMsgParam) ;
19989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19990 vos_mem_free(pWdaParams) ;
19991 }
19992
19993 return CONVERT_WDI2VOS_STATUS(status) ;
19994}
19995
19996VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19997 tpTxControlParams pTxCtrlParam)
19998{
19999 VOS_STATUS wdaStatus;
20000
20001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020002 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020003 if( pTxCtrlParam == NULL )
20004 {
20005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020006 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020007 return VOS_STATUS_E_FAILURE;
20008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020009 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
20010 {
20011 wdaStatus = WDA_SuspendDataTx(pWDA);
20012 }
20013 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
20014 {
20015 wdaStatus = WDA_ResumeDataTx(pWDA);
20016 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020017 return wdaStatus;
20018}
20019
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020020void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053020021{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020022 WDI_Status status;
20023 status = WDI_FWLoggingDXEdoneInd(logType);
20024
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053020025 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020026 {
20027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20028 FL("Failure status %d"), status);
20029 }
Mihir Shete5affadc2015-05-29 20:54:57 +053020030}
20031
Jeff Johnson295189b2012-06-20 16:38:30 -070020032 /* FUNCTION WDA_featureCapsExchange
20033 * WDA API to invoke capability exchange between host and FW.
20034 */
20035void WDA_featureCapsExchange(v_PVOID_t pVosContext)
20036{
20037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020038 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020039 WDI_featureCapsExchangeReq( NULL, pVosContext);
20040}
20041
Yathish9f22e662012-12-10 14:21:35 -080020042/* FUNCTION WDA_disableCapablityFeature
20043 * WDA API to diable Active mode offload in host.
20044 */
20045void WDA_disableCapablityFeature(tANI_U8 feature_index)
20046{
20047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20048 "%s:enter", __func__ );
20049 WDI_disableCapablityFeature(feature_index);
20050}
20051
Jeff Johnson295189b2012-06-20 16:38:30 -070020052 /* FUNCTION WDA_getHostWlanFeatCaps
20053 * Wrapper for WDI API, that will return if the feature (enum value).passed
20054 * to this API is supported or not in Host
20055 * return value
20056 * 0 - implies feature is NOT Supported
20057 * any non zero value - implies feature is SUPPORTED
20058 */
20059tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
20060{
20061 return WDI_getHostWlanFeatCaps(featEnumValue);
20062}
20063
20064 /* FUNCTION WDA_getFwWlanFeatCaps
20065 * Wrapper for WDI API, that will return if the feature (enum value).passed
20066 * to this API is supported or not in FW
20067 * return value
20068 * 0 - implies feature is NOT Supported
20069 * any non zero value - implies feature is SUPPORTED
20070 */
20071tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
20072{
20073 return WDI_getFwWlanFeatCaps(featEnumValue);
20074}
20075
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053020076
Jeff Johnson295189b2012-06-20 16:38:30 -070020077/*
20078 * FUNCTION: WDA_shutdown
20079 * Shutdown WDA/WDI without handshaking with Riva.
20080 * Synchronous function.
20081 */
20082VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
20083{
20084 WDI_Status wdiStatus;
20085 //tANI_U8 eventIdx = 0;
20086 VOS_STATUS status = VOS_STATUS_SUCCESS;
20087 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070020088 if (NULL == pWDA)
20089 {
20090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020091 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020092 VOS_ASSERT(0);
20093 return VOS_STATUS_E_FAILURE;
20094 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020095 /* FTM mode stay START_STATE */
20096 if( (WDA_READY_STATE != pWDA->wdaState) &&
20097 (WDA_INIT_STATE != pWDA->wdaState) &&
20098 (WDA_START_STATE != pWDA->wdaState) )
20099 {
20100 VOS_ASSERT(0);
20101 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020102
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020103 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070020104 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020105 if(VOS_TRUE == pWDA->wdaTimersCreated)
20106 {
20107 wdaDestroyTimers(pWDA);
20108 pWDA->wdaTimersCreated = VOS_FALSE;
20109 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020110 }
Leo Chang9d76f622013-08-23 16:34:52 -070020111 else
20112 {
20113 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020114 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020115
Jeff Johnson295189b2012-06-20 16:38:30 -070020116 /* call WDI shutdown */
20117 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070020118 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
20119 {
20120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20121 "error in WDA Stop" );
20122 status = VOS_STATUS_E_FAILURE;
20123 }
20124 /* WDI stop is synchrnous, shutdown is complete when it returns */
20125 pWDA->wdaState = WDA_STOP_STATE;
20126
Jeff Johnson295189b2012-06-20 16:38:30 -070020127 /* shutdown should perform the stop & close actions. */
20128 /* Destroy the event */
20129 status = vos_event_destroy(&pWDA->txFrameEvent);
20130 if(!VOS_IS_STATUS_SUCCESS(status))
20131 {
20132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020133 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020134 status = VOS_STATUS_E_FAILURE;
20135 }
20136 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
20137 if(!VOS_IS_STATUS_SUCCESS(status))
20138 {
20139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020140 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020141 status = VOS_STATUS_E_FAILURE;
20142 }
20143 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
20144 if(!VOS_IS_STATUS_SUCCESS(status))
20145 {
20146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020147 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020148 status = VOS_STATUS_E_FAILURE;
20149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020150 /* free WDA context */
20151 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
20152 if ( !VOS_IS_STATUS_SUCCESS(status) )
20153 {
20154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20155 "error in WDA close " );
20156 status = VOS_STATUS_E_FAILURE;
20157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020158 return status;
20159}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020160
Jeff Johnsone7245742012-09-05 17:12:55 -070020161/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020162 * FUNCTION: WDA_setNeedShutdown
20163 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070020164 */
20165
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020166void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070020167{
20168 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020169 if(pWDA == NULL)
20170 {
20171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20172 "Could not get the WDA Context pointer" );
20173 return;
20174 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020175 pWDA->needShutdown = TRUE;
20176}
20177/*
20178 * FUNCTION: WDA_needShutdown
20179 * WDA needs a shutdown
20180 */
20181
20182v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
20183{
20184 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020185 if(pWDA == NULL)
20186 {
20187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20188 "Could not get the WDA Context pointer" );
20189 return 0;
20190 }
20191 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070020192}
20193
Mohit Khanna4a70d262012-09-11 16:30:12 -070020194#ifdef WLAN_FEATURE_11AC
20195/*
20196 * FUNCTION: WDA_SetBeaconFilterReqCallback
20197 *
20198 */
20199void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
20200{
20201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020203 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020204 if(NULL == pWdaParams)
20205 {
20206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020207 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020208 VOS_ASSERT(0) ;
20209 return ;
20210 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020211
Mohit Khanna4a70d262012-09-11 16:30:12 -070020212 vos_mem_free(pWdaParams->wdaMsgParam) ;
20213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20214 vos_mem_free(pWdaParams) ;
20215 /*
20216 * No respone required for SetBeaconFilter req so just free the request
20217 * param here
20218 */
20219
20220 return ;
20221}
20222
20223VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
20224 tUpdateVHTOpMode *pData)
20225{
20226 WDI_Status status = WDI_STATUS_SUCCESS ;
20227 tWDA_ReqParams *pWdaParams ;
20228 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
20229 sizeof(WDI_UpdateVHTOpMode)) ;
20230 if(NULL == wdiTemp)
20231 {
20232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020233 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020234 VOS_ASSERT(0);
20235 return VOS_STATUS_E_NOMEM;
20236 }
20237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20238 if(NULL == pWdaParams)
20239 {
20240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020241 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020242 VOS_ASSERT(0);
20243 vos_mem_free(wdiTemp);
20244 return VOS_STATUS_E_NOMEM;
20245 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053020246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20247 "------> %s Opmode = %d and staid = %d" ,
20248 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020249 wdiTemp->opMode = pData->opMode;
20250 wdiTemp->staId = pData->staId;
20251
20252 pWdaParams->pWdaContext = pWDA;
20253 /* Store Req pointer, as this will be used for response */
20254 pWdaParams->wdaMsgParam = (void *)pData;
20255 /* store Params pass it to WDI */
20256 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
20257
20258 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
20259
20260 if(IS_WDI_STATUS_FAILURE(status))
20261 {
20262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20263 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
20264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20265 vos_mem_free(pWdaParams->wdaMsgParam);
20266 vos_mem_free(pWdaParams);
20267 }
20268 return CONVERT_WDI2VOS_STATUS(status) ;
20269}
20270#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020271
20272/*==========================================================================
20273 FUNCTION WDA_TransportChannelDebug
20274
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070020275 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020276 Display Transport Channel debugging information
20277 User may request to display DXE channel snapshot
20278 Or if host driver detects any abnormal stcuk may display
20279
20280 PARAMETERS
schang6295e542013-03-12 15:31:23 -070020281 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080020282 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053020283 debugFlags : Enable stall detect features
20284 defined by WPAL_DeviceDebugFlags
20285 These features may effect
20286 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020287
20288 RETURN VALUE
20289 NONE
20290
20291===========================================================================*/
20292void WDA_TransportChannelDebug
20293(
schang6295e542013-03-12 15:31:23 -070020294 tpAniSirGlobal pMac,
20295 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053020296 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020297)
20298{
Mihir Shete40a55652014-03-02 14:14:47 +053020299 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020300 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070020301}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070020302
20303/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053020304 FUNCTION WDA_TransportKickDxe
20305
20306 DESCRIPTION
20307 Request Kick Dxe when first hdd TX time out
20308 happens
20309
20310 PARAMETERS
20311 NONE
20312
20313 RETURN VALUE
20314 NONE
20315
20316===========================================================================*/
20317void WDA_TransportKickDxe()
20318{
20319 WDI_TransportKickDxe();
20320 return;
20321}
20322
20323
20324/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070020325 FUNCTION WDA_SetEnableSSR
20326
20327 DESCRIPTION
20328 API to enable/disable SSR on WDI timeout
20329
20330 PARAMETERS
20331 enableSSR : enable/disable SSR
20332
20333 RETURN VALUE
20334 NONE
20335
20336===========================================================================*/
20337void WDA_SetEnableSSR(v_BOOL_t enableSSR)
20338{
20339 WDI_SetEnableSSR(enableSSR);
20340}
Leo Chang9056f462013-08-01 19:21:11 -070020341
Agrawal Ashish0552be02016-03-02 18:03:43 +053020342/**
20343 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
20344 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
20345 *
20346 * Return: void
20347 */
20348void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
20349{
20350 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
20351}
20352
Leo Chang9056f462013-08-01 19:21:11 -070020353#ifdef FEATURE_WLAN_LPHB
20354/*
20355 * FUNCTION: WDA_LPHBconfRspCallback
20356 *
20357 */
20358void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
20359{
20360 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20361
20362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20363 "<------ %s " ,__func__);
20364 if (NULL == pWdaParams)
20365 {
20366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20367 "%s: pWdaParams received NULL", __func__);
20368 VOS_ASSERT(0) ;
20369 return ;
20370 }
20371
20372 /* Do not need to send notification to upper layer
20373 * Just free allocated resources */
20374 if (pWdaParams != NULL)
20375 {
20376 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20377 {
20378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20379 }
20380 vos_mem_free(pWdaParams->wdaMsgParam) ;
20381 vos_mem_free(pWdaParams) ;
20382 }
20383
20384 return;
20385}
20386
20387/*
20388 * FUNCTION: WDA_ProcessLPHBConfReq
20389 *
20390 */
20391VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
20392 tSirLPHBReq *pData)
20393{
20394 WDI_Status wdiStatus;
20395 tWDA_ReqParams *pWdaParams ;
20396
20397 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20398 "------> %s " , __func__);
20399
20400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20401 if (NULL == pWdaParams)
20402 {
20403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20404 "%s: VOS MEM Alloc Failure", __func__);
20405 VOS_ASSERT(0);
20406 vos_mem_free(pData);
20407 return VOS_STATUS_E_NOMEM;
20408 }
20409
20410 pWdaParams->pWdaContext = pWDA;
20411 pWdaParams->wdaMsgParam = (void *)pData;
20412 pWdaParams->wdaWdiApiMsgParam = NULL;
20413
20414 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
20415 if (WDI_STATUS_PENDING == wdiStatus)
20416 {
20417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20418 "Pending received for %s:%d ", __func__, __LINE__);
20419 }
20420 else if (WDI_STATUS_SUCCESS != wdiStatus)
20421 {
20422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20423 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
20424 vos_mem_free(pWdaParams->wdaMsgParam);
20425 vos_mem_free(pWdaParams);
20426 }
20427
20428 return CONVERT_WDI2VOS_STATUS(wdiStatus);
20429}
20430#endif /* FEATURE_WLAN_LPHB */
20431
c_hpothu92367912014-05-01 15:18:17 +053020432void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
20433 void* pUserData)
20434{
20435 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
20436
20437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20438 "<------ %s " ,__func__);
20439 if (NULL == pBcnMissRateInfo)
20440 {
20441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20442 "%s: pWdaParams received NULL", __func__);
20443 VOS_ASSERT(0) ;
20444 return ;
20445 }
20446 if (pBcnMissRateInfo->callback)
20447 {
20448 pBcnMissRateInfo->callback(status, bcnMissRate,
20449 pBcnMissRateInfo->data);
20450 }
20451 vos_mem_free(pUserData);
20452
20453 return;
20454}
20455
20456v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
20457 tSirBcnMissRateReq *pData)
20458{
20459 WDI_Status wdiStatus;
20460 tSirBcnMissRateInfo *pBcnMissRateInfo;
20461
20462 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20463 "------> %s " , __func__);
20464
20465 pBcnMissRateInfo =
20466 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
20467 if (NULL == pBcnMissRateInfo)
20468 {
20469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20470 "%s: VOS MEM Alloc Failure", __func__);
20471 VOS_ASSERT(0);
20472 vos_mem_free(pData);
20473 return;
20474 }
20475
20476 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
20477 pBcnMissRateInfo->data = pData->data;
20478
20479 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
20480 WDA_GetBcnMissRateCallback,
20481 pData->bssid);
20482 if (WDI_STATUS_PENDING == wdiStatus)
20483 {
20484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20485 "Pending received for %s:%d ", __func__, __LINE__);
20486 }
20487 else if (WDI_STATUS_SUCCESS != wdiStatus)
20488 {
20489 if (pBcnMissRateInfo->callback)
20490 {
20491 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
20492 -1, pBcnMissRateInfo->data);
20493 }
20494 }
20495 vos_mem_free(pData);
20496}
Dino Mycle41bdc942014-06-10 11:30:24 +053020497
20498#ifdef WLAN_FEATURE_EXTSCAN
20499
20500/*==========================================================================
20501 FUNCTION WDA_EXTScanStartRspCallback
20502
20503 DESCRIPTION
20504 API to send EXTScan Start Response to HDD
20505
20506 PARAMETERS
20507 pEventData: Response from FW
20508 pUserData:
20509===========================================================================*/
20510void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
20511{
20512 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20513 tWDA_CbContext *pWDA = NULL;
20514 void *pCallbackContext;
20515 tpAniSirGlobal pMac;
20516
20517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20518 "%s:", __func__);
20519 if (NULL == pWdaParams)
20520 {
20521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20522 "%s: pWdaParams received NULL", __func__);
20523 VOS_ASSERT(0);
20524 return;
20525 }
20526
20527 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20528
20529 if (NULL == pWDA)
20530 {
20531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20532 "%s: pWDA received NULL", __func__);
20533 VOS_ASSERT(0);
20534 goto error;
20535 }
20536
20537 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20538 if (NULL == pMac)
20539 {
20540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20541 "%s:pMac is NULL", __func__);
20542 VOS_ASSERT(0);
20543 goto error;
20544 }
20545
20546 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20547
20548 if (pMac->sme.pEXTScanIndCb)
20549 {
20550 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
20551 pEventData);
20552 }
20553 else
20554 {
20555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20556 "%s:HDD callback is null", __func__);
20557 VOS_ASSERT(0);
20558 }
20559
20560error:
20561
20562 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20563 {
20564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20565 }
20566 if (pWdaParams->wdaMsgParam != NULL)
20567 {
20568 vos_mem_free(pWdaParams->wdaMsgParam);
20569 }
20570 vos_mem_free(pWdaParams) ;
20571
20572 return;
20573}
20574
20575/*==========================================================================
20576 FUNCTION WDA_EXTScanStopRspCallback
20577
20578 DESCRIPTION
20579 API to send EXTScan Stop Response to HDD
20580
20581 PARAMETERS
20582 pEventData: Response from FW
20583 pUserData:
20584===========================================================================*/
20585void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
20586{
20587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20588 tWDA_CbContext *pWDA = NULL;
20589 void *pCallbackContext;
20590 tpAniSirGlobal pMac;
20591
20592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20593 "%s:", __func__);
20594 if (NULL == pWdaParams)
20595 {
20596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20597 "%s: pWdaParams received NULL", __func__);
20598 VOS_ASSERT(0);
20599 return;
20600 }
20601
20602 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20603
20604 if (NULL == pWDA)
20605 {
20606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20607 "%s: pWDA received NULL", __func__);
20608 VOS_ASSERT(0);
20609 goto error;
20610 }
20611
20612 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20613 if (NULL == pMac)
20614 {
20615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20616 "%s:pMac is NULL", __func__);
20617 VOS_ASSERT(0);
20618 goto error;
20619 }
20620 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20621
20622 if (pMac->sme.pEXTScanIndCb)
20623 {
20624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20625 "%s:HDD call back function called", __func__);
20626 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
20627 pEventData);
20628 }
20629 else
20630 {
20631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20632 "%s:HDD callback is null", __func__);
20633 VOS_ASSERT(0);
20634 }
20635
20636error:
20637
20638 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20639 {
20640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20641 }
20642 if (pWdaParams->wdaMsgParam != NULL)
20643 {
20644 vos_mem_free(pWdaParams->wdaMsgParam);
20645 }
20646 vos_mem_free(pWdaParams) ;
20647
20648
20649 return;
20650}
20651
20652/*==========================================================================
20653 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
20654
20655 DESCRIPTION
20656 API to send EXTScan Get Cached Results Response to HDD
20657
20658 PARAMETERS
20659 pEventData: Response from FW
20660 pUserData:
20661===========================================================================*/
20662void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
20663{
20664 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20665 tWDA_CbContext *pWDA = NULL;
20666 void *pCallbackContext;
20667 tpAniSirGlobal pMac;
20668
20669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20670 "%s: ", __func__);
20671 if (NULL == pWdaParams)
20672 {
20673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20674 "%s: pWdaParams received NULL", __func__);
20675 VOS_ASSERT(0);
20676 return;
20677 }
20678
20679 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20680
20681 if (NULL == pWDA)
20682 {
20683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20684 "%s: pWDA received NULL", __func__);
20685 VOS_ASSERT(0);
20686 goto error;
20687 }
20688
20689 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20690 if (NULL == pMac)
20691 {
20692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20693 "%s:pMac is NULL", __func__);
20694 VOS_ASSERT(0);
20695 goto error;
20696 }
20697
20698 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20699
20700 if (pMac->sme.pEXTScanIndCb)
20701 {
20702 pMac->sme.pEXTScanIndCb(pCallbackContext,
20703 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
20704 pEventData);
20705 }
20706 else
20707 {
20708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20709 "%s:HDD callback is null", __func__);
20710 VOS_ASSERT(0);
20711 }
20712
20713
20714error:
20715
20716 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20717 {
20718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20719 }
20720 if (pWdaParams->wdaMsgParam != NULL)
20721 {
20722 vos_mem_free(pWdaParams->wdaMsgParam);
20723 }
20724 vos_mem_free(pWdaParams) ;
20725
20726 return;
20727}
20728
20729/*==========================================================================
20730 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
20731
20732 DESCRIPTION
20733 API to send EXTScan Get Capabilities Response to HDD
20734
20735 PARAMETERS
20736 pEventData: Response from FW
20737 pUserData:
20738===========================================================================*/
20739void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
20740{
20741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20742 tWDA_CbContext *pWDA = NULL;
20743 void *pCallbackContext;
20744 tpAniSirGlobal pMac;
20745
20746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20747 "%s:", __func__);
20748 if (NULL == pWdaParams)
20749 {
20750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20751 "%s: pWdaParams received NULL", __func__);
20752 VOS_ASSERT(0);
20753 return;
20754 }
20755
20756 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20757
20758 if (NULL == pWDA)
20759 {
20760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20761 "%s: pWDA received NULL", __func__);
20762 VOS_ASSERT(0);
20763 goto error;
20764 }
20765
20766 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20767 if (NULL == pMac)
20768 {
20769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20770 "%s:pMac is NULL", __func__);
20771 VOS_ASSERT(0);
20772 goto error;
20773 }
20774
20775 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20776
20777 if (pMac->sme.pEXTScanIndCb)
20778 {
20779 pMac->sme.pEXTScanIndCb(pCallbackContext,
20780 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
20781 pEventData);
20782 }
20783 else
20784 {
20785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20786 "%s:HDD callback is null", __func__);
20787 VOS_ASSERT(0);
20788 }
20789
20790
20791error:
20792
20793 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20794 {
20795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20796 }
20797 if (pWdaParams->wdaMsgParam != NULL)
20798 {
20799 vos_mem_free(pWdaParams->wdaMsgParam);
20800 }
20801 vos_mem_free(pWdaParams) ;
20802
20803 return;
20804}
20805
20806/*==========================================================================
20807 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
20808
20809 DESCRIPTION
20810 API to send EXTScan Set BSSID Hotlist Response to HDD
20811
20812 PARAMETERS
20813 pEventData: Response from FW
20814 pUserData:
20815===========================================================================*/
20816void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20817{
20818 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20819 tWDA_CbContext *pWDA = NULL;
20820 void *pCallbackContext;
20821 tpAniSirGlobal pMac;
20822
20823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20824 "%s: ", __func__);
20825 if (NULL == pWdaParams)
20826 {
20827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20828 "%s: pWdaParams received NULL", __func__);
20829 VOS_ASSERT(0) ;
20830 return;
20831 }
20832
20833 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20834
20835 if (NULL == pWDA)
20836 {
20837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20838 "%s: pWDA received NULL", __func__);
20839 VOS_ASSERT(0);
20840 goto error;
20841 }
20842
20843 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20844 if (NULL == pMac)
20845 {
20846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20847 "%s:pMac is NULL", __func__);
20848 VOS_ASSERT(0);
20849 goto error;
20850 }
20851
20852 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20853
20854 if (pMac->sme.pEXTScanIndCb)
20855 {
20856 pMac->sme.pEXTScanIndCb(pCallbackContext,
20857 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20858 pEventData);
20859 }
20860 else
20861 {
20862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20863 "%s:HDD callback is null", __func__);
20864 VOS_ASSERT(0);
20865 }
20866
20867
20868error:
20869
20870 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20871 {
20872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20873 }
20874 if (pWdaParams->wdaMsgParam != NULL)
20875 {
20876 vos_mem_free(pWdaParams->wdaMsgParam);
20877 }
20878 vos_mem_free(pWdaParams) ;
20879
20880 return;
20881}
20882
20883/*==========================================================================
20884 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20885
20886 DESCRIPTION
20887 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20888
20889 PARAMETERS
20890 pEventData: Response from FW
20891 pUserData:
20892===========================================================================*/
20893void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20894{
20895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20896 tWDA_CbContext *pWDA = NULL;
20897 void *pCallbackContext;
20898 tpAniSirGlobal pMac;
20899
20900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20901 "%s:", __func__);
20902 if (NULL == pWdaParams)
20903 {
20904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20905 "%s: pWdaParams received NULL", __func__);
20906 VOS_ASSERT(0) ;
20907 return;
20908 }
20909
20910 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20911
20912 if (NULL == pWDA)
20913 {
20914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20915 "%s: pWDA received NULL", __func__);
20916 VOS_ASSERT(0);
20917 goto error;
20918 }
20919
20920 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20921 if (NULL == pMac)
20922 {
20923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20924 "%s:pMac is NULL", __func__);
20925 VOS_ASSERT(0);
20926 goto error;
20927 }
20928
20929 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20930
20931 if (pMac->sme.pEXTScanIndCb)
20932 {
20933 pMac->sme.pEXTScanIndCb(pCallbackContext,
20934 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20935 pEventData);
20936 }
20937 else
20938 {
20939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20940 "%s:HDD callback is null", __func__);
20941 VOS_ASSERT(0);
20942 }
20943
20944
20945error:
20946
20947 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20948 {
20949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20950 }
20951 if (pWdaParams->wdaMsgParam != NULL)
20952 {
20953 vos_mem_free(pWdaParams->wdaMsgParam);
20954 }
20955 vos_mem_free(pWdaParams) ;
20956
20957 return;
20958}
20959
20960/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020961 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20962
20963 DESCRIPTION
20964 API to send EXTScan Set SSID Hotlist Response to HDD
20965
20966 PARAMETERS
20967 pEventData: Response from FW
20968 pUserData:
20969===========================================================================*/
20970void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20971{
20972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20973 tWDA_CbContext *pWDA = NULL;
20974 void *pCallbackContext;
20975 tpAniSirGlobal pMac;
20976
20977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20978 "%s: ", __func__);
20979 if (NULL == pWdaParams)
20980 {
20981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20982 "%s: pWdaParams received NULL", __func__);
20983 VOS_ASSERT(0) ;
20984 return;
20985 }
20986
20987 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20988
20989 if (NULL == pWDA)
20990 {
20991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20992 "%s: pWDA received NULL", __func__);
20993 VOS_ASSERT(0);
20994 goto error;
20995 }
20996
20997 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20998 if (NULL == pMac)
20999 {
21000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21001 "%s:pMac is NULL", __func__);
21002 VOS_ASSERT(0);
21003 goto error;
21004 }
21005
21006 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21007
21008 if (pMac->sme.pEXTScanIndCb)
21009 {
21010 pMac->sme.pEXTScanIndCb(pCallbackContext,
21011 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
21012 pEventData);
21013 }
21014 else
21015 {
21016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21017 "%s:HDD callback is null", __func__);
21018 VOS_ASSERT(0);
21019 }
21020
21021
21022error:
21023
21024 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21025 {
21026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21027 }
21028 if (pWdaParams->wdaMsgParam != NULL)
21029 {
21030 vos_mem_free(pWdaParams->wdaMsgParam);
21031 }
21032 vos_mem_free(pWdaParams) ;
21033
21034 return;
21035}
21036
21037/*==========================================================================
21038 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
21039
21040 DESCRIPTION
21041 API to send EXTScan ReSet SSID Hotlist Response to HDD
21042
21043 PARAMETERS
21044 pEventData: Response from FW
21045 pUserData:
21046===========================================================================*/
21047void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21048{
21049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21050 tWDA_CbContext *pWDA = NULL;
21051 void *pCallbackContext;
21052 tpAniSirGlobal pMac;
21053
21054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21055 "%s:", __func__);
21056 if (NULL == pWdaParams)
21057 {
21058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21059 "%s: pWdaParams received NULL", __func__);
21060 VOS_ASSERT(0) ;
21061 return;
21062 }
21063
21064 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21065
21066 if (NULL == pWDA)
21067 {
21068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21069 "%s: pWDA received NULL", __func__);
21070 VOS_ASSERT(0);
21071 goto error;
21072 }
21073
21074 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21075 if (NULL == pMac)
21076 {
21077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21078 "%s:pMac is NULL", __func__);
21079 VOS_ASSERT(0);
21080 goto error;
21081 }
21082
21083 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21084
21085 if (pMac->sme.pEXTScanIndCb)
21086 {
21087 pMac->sme.pEXTScanIndCb(pCallbackContext,
21088 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
21089 pEventData);
21090 }
21091 else
21092 {
21093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21094 "%s:HDD callback is null", __func__);
21095 VOS_ASSERT(0);
21096 }
21097
21098
21099error:
21100
21101 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21102 {
21103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21104 }
21105 if (pWdaParams->wdaMsgParam != NULL)
21106 {
21107 vos_mem_free(pWdaParams->wdaMsgParam);
21108 }
21109 vos_mem_free(pWdaParams) ;
21110
21111 return;
21112}
21113
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021114/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053021115 FUNCTION WDA_ProcessEXTScanStartReq
21116
21117 DESCRIPTION
21118 API to send EXTScan Start Request to WDI
21119
21120 PARAMETERS
21121 pWDA: Pointer to WDA context
21122 wdaRequest: Pointer to EXTScan req parameters
21123===========================================================================*/
21124VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
21125 tSirEXTScanStartReqParams *wdaRequest)
21126{
21127 WDI_Status status = WDI_STATUS_SUCCESS;
21128 tWDA_ReqParams *pWdaParams;
21129
21130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21131 "%s: ", __func__);
21132 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21133 if (NULL == pWdaParams)
21134 {
21135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21136 "%s: VOS MEM Alloc Failure", __func__);
21137 VOS_ASSERT(0);
21138 return VOS_STATUS_E_NOMEM;
21139 }
21140 pWdaParams->pWdaContext = pWDA;
21141 pWdaParams->wdaMsgParam = wdaRequest;
21142 pWdaParams->wdaWdiApiMsgParam = NULL;
21143
21144 status = WDI_EXTScanStartReq((void *)wdaRequest,
21145 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
21146 (void *)pWdaParams);
21147 if (IS_WDI_STATUS_FAILURE(status))
21148 {
21149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21150 "Failure to request. Free all the memory " );
21151 vos_mem_free(pWdaParams->wdaMsgParam);
21152 vos_mem_free(pWdaParams);
21153 }
21154 return CONVERT_WDI2VOS_STATUS(status);
21155}
21156
21157/*==========================================================================
21158 FUNCTION WDA_ProcessEXTScanStopReq
21159
21160 DESCRIPTION
21161 API to send EXTScan Start Request to WDI
21162
21163 PARAMETERS
21164 pWDA: Pointer to WDA context
21165 wdaRequest: Pointer to EXTScan req parameters
21166===========================================================================*/
21167VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
21168 tSirEXTScanStopReqParams *wdaRequest)
21169{
21170 WDI_Status status = WDI_STATUS_SUCCESS;
21171 tWDA_ReqParams *pWdaParams;
21172
21173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21174 "%s:", __func__);
21175 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21176 if (NULL == pWdaParams)
21177 {
21178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21179 "%s: VOS MEM Alloc Failure", __func__);
21180 VOS_ASSERT(0);
21181 return VOS_STATUS_E_NOMEM;
21182 }
21183 pWdaParams->pWdaContext = pWDA;
21184 pWdaParams->wdaMsgParam = wdaRequest;
21185 pWdaParams->wdaWdiApiMsgParam = NULL;
21186
21187 status = WDI_EXTScanStopReq((void *)wdaRequest,
21188 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
21189 (void *)pWdaParams);
21190 if (IS_WDI_STATUS_FAILURE(status))
21191 {
21192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21193 "Failure to request. Free all the memory " );
21194 vos_mem_free(pWdaParams->wdaMsgParam);
21195 vos_mem_free(pWdaParams);
21196 }
21197 return CONVERT_WDI2VOS_STATUS(status);
21198}
21199
21200/*==========================================================================
21201 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
21202
21203 DESCRIPTION
21204 API to send EXTScan Get Cached Results Request to WDI
21205
21206 PARAMETERS
21207 pWDA: Pointer to WDA context
21208 wdaRequest: Pointer to EXTScan req parameters
21209===========================================================================*/
21210VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
21211 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
21212{
21213 WDI_Status status = WDI_STATUS_SUCCESS;
21214 tWDA_ReqParams *pWdaParams;
21215
21216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21217 "%s: ", __func__);
21218 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21219 if (NULL == pWdaParams)
21220 {
21221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21222 "%s: VOS MEM Alloc Failure", __func__);
21223 VOS_ASSERT(0);
21224 return VOS_STATUS_E_NOMEM;
21225 }
21226 pWdaParams->pWdaContext = pWDA;
21227 pWdaParams->wdaMsgParam = wdaRequest;
21228 pWdaParams->wdaWdiApiMsgParam = NULL;
21229
21230 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
21231 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
21232 (void *)pWdaParams);
21233 if (IS_WDI_STATUS_FAILURE(status))
21234 {
21235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21236 "Failure to request. Free all the memory " );
21237 vos_mem_free(pWdaParams->wdaMsgParam);
21238 vos_mem_free(pWdaParams);
21239 }
21240 return CONVERT_WDI2VOS_STATUS(status);
21241}
21242
21243/*==========================================================================
21244 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
21245
21246 DESCRIPTION
21247 API to send EXTScan Get Capabilities Request to WDI
21248
21249 PARAMETERS
21250 pWDA: Pointer to WDA context
21251 wdaRequest: Pointer to EXTScan req parameters
21252===========================================================================*/
21253VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
21254 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
21255{
21256 WDI_Status status = WDI_STATUS_SUCCESS;
21257 tWDA_ReqParams *pWdaParams;
21258
21259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21260 "%s:", __func__);
21261 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21262 if (NULL == pWdaParams)
21263 {
21264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21265 "%s: VOS MEM Alloc Failure", __func__);
21266 VOS_ASSERT(0);
21267 return VOS_STATUS_E_NOMEM;
21268 }
21269 pWdaParams->pWdaContext = pWDA;
21270 pWdaParams->wdaMsgParam = wdaRequest;
21271 pWdaParams->wdaWdiApiMsgParam = NULL;
21272
21273 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
21274 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
21275 (void *)pWdaParams);
21276 if (IS_WDI_STATUS_FAILURE(status))
21277 {
21278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21279 "Failure to request. Free all the memory " );
21280 vos_mem_free(pWdaParams->wdaMsgParam);
21281 vos_mem_free(pWdaParams);
21282 }
21283 return CONVERT_WDI2VOS_STATUS(status);
21284}
21285
21286/*==========================================================================
21287 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
21288
21289 DESCRIPTION
21290 API to send Set BSSID Hotlist Request to WDI
21291
21292 PARAMETERS
21293 pWDA: Pointer to WDA context
21294 wdaRequest: Pointer to EXTScan req parameters
21295===========================================================================*/
21296VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
21297 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
21298{
21299 WDI_Status status = WDI_STATUS_SUCCESS;
21300 tWDA_ReqParams *pWdaParams;
21301
21302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21303 "%s: ", __func__);
21304 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21305 if (NULL == pWdaParams)
21306 {
21307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21308 "%s: VOS MEM Alloc Failure", __func__);
21309 VOS_ASSERT(0);
21310 return VOS_STATUS_E_NOMEM;
21311 }
21312 pWdaParams->pWdaContext = pWDA;
21313 pWdaParams->wdaMsgParam = wdaRequest;
21314 pWdaParams->wdaWdiApiMsgParam = NULL;
21315
21316 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
21317 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
21318 (void *)pWdaParams);
21319 if (IS_WDI_STATUS_FAILURE(status))
21320 {
21321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21322 "Failure to request. Free all the memory " );
21323 vos_mem_free(pWdaParams->wdaMsgParam);
21324 vos_mem_free(pWdaParams);
21325 }
21326 return CONVERT_WDI2VOS_STATUS(status);
21327}
21328
21329/*==========================================================================
21330 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
21331
21332 DESCRIPTION
21333 API to send Reset BSSID Hotlist Request to WDI
21334
21335 PARAMETERS
21336 pWDA: Pointer to WDA context
21337 wdaRequest: Pointer to EXTScan req parameters
21338===========================================================================*/
21339VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
21340 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
21341{
21342 WDI_Status status = WDI_STATUS_SUCCESS;
21343 tWDA_ReqParams *pWdaParams;
21344
21345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21346 "%s:", __func__);
21347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21348 if (NULL == pWdaParams)
21349 {
21350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21351 "%s: VOS MEM Alloc Failure", __func__);
21352 VOS_ASSERT(0);
21353 return VOS_STATUS_E_NOMEM;
21354 }
21355 pWdaParams->pWdaContext = pWDA;
21356 pWdaParams->wdaMsgParam = wdaRequest;
21357 pWdaParams->wdaWdiApiMsgParam = NULL;
21358
21359 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
21360 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
21361 (void *)pWdaParams);
21362 if (IS_WDI_STATUS_FAILURE(status))
21363 {
21364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21365 "Failure to request. Free all the memory " );
21366 vos_mem_free(pWdaParams->wdaMsgParam);
21367 vos_mem_free(pWdaParams);
21368 }
21369 return CONVERT_WDI2VOS_STATUS(status);
21370}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021371
21372/*==========================================================================
21373 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
21374
21375 DESCRIPTION
21376 API to send Set SSID Hotlist Request to WDI
21377
21378 PARAMETERS
21379 pWDA: Pointer to WDA context
21380 wdaRequest: Pointer to EXTScan req parameters
21381===========================================================================*/
21382VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
21383 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
21384{
21385 WDI_Status status = WDI_STATUS_SUCCESS;
21386 tWDA_ReqParams *pWdaParams;
21387
21388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21389 "%s: ", __func__);
21390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21391 if (NULL == pWdaParams)
21392 {
21393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21394 "%s: VOS MEM Alloc Failure", __func__);
21395 VOS_ASSERT(0);
21396 return VOS_STATUS_E_NOMEM;
21397 }
21398 pWdaParams->pWdaContext = pWDA;
21399 pWdaParams->wdaMsgParam = wdaRequest;
21400 pWdaParams->wdaWdiApiMsgParam = NULL;
21401
21402 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
21403 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
21404 (void *)pWdaParams);
21405 if (IS_WDI_STATUS_FAILURE(status))
21406 {
21407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21408 "Failure to request. Free all the memory " );
21409 vos_mem_free(pWdaParams->wdaMsgParam);
21410 vos_mem_free(pWdaParams);
21411 }
21412 return CONVERT_WDI2VOS_STATUS(status);
21413}
21414
21415/*==========================================================================
21416 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
21417
21418 DESCRIPTION
21419 API to send Reset SSID Hotlist Request to WDI
21420
21421 PARAMETERS
21422 pWDA: Pointer to WDA context
21423 wdaRequest: Pointer to EXTScan req parameters
21424===========================================================================*/
21425VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
21426 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
21427{
21428 WDI_Status status = WDI_STATUS_SUCCESS;
21429 tWDA_ReqParams *pWdaParams;
21430
21431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21432 "%s:", __func__);
21433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21434 if (NULL == pWdaParams)
21435 {
21436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21437 "%s: VOS MEM Alloc Failure", __func__);
21438 VOS_ASSERT(0);
21439 return VOS_STATUS_E_NOMEM;
21440 }
21441 pWdaParams->pWdaContext = pWDA;
21442 pWdaParams->wdaMsgParam = wdaRequest;
21443 pWdaParams->wdaWdiApiMsgParam = NULL;
21444
21445 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
21446 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
21447 (void *)pWdaParams);
21448 if (IS_WDI_STATUS_FAILURE(status))
21449 {
21450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21451 "Failure to request. Free all the memory " );
21452 vos_mem_free(pWdaParams->wdaMsgParam);
21453 vos_mem_free(pWdaParams);
21454 }
21455 return CONVERT_WDI2VOS_STATUS(status);
21456}
21457
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053021458/*==========================================================================
21459 FUNCTION WDA_ProcessHighPriorityDataInfoInd
21460
21461 DESCRIPTION
21462 API to send Reset SSID Hotlist Request to WDI
21463
21464 PARAMETERS
21465 pWDA: Pointer to WDA context
21466 wdaRequest: Pointer to EXTScan req parameters
21467===========================================================================*/
21468VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
21469 tSirHighPriorityDataInfoInd *wdaRequest)
21470{
21471 WDI_Status status = WDI_STATUS_SUCCESS;
21472
21473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21474 "%s:", __func__);
21475
21476 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
21477 if (WDI_STATUS_PENDING == status)
21478 {
21479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21480 FL("pending status received "));
21481 }
21482 else if (WDI_STATUS_SUCCESS_SYNC != status)
21483 {
21484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21485 FL("Failure status %d"), status);
21486 }
21487 return CONVERT_WDI2VOS_STATUS(status);
21488}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021489
Dino Mycle41bdc942014-06-10 11:30:24 +053021490#endif /* WLAN_FEATURE_EXTSCAN */
21491
Sunil Duttbd736ed2014-05-26 21:19:41 +053021492#ifdef WLAN_FEATURE_LINK_LAYER_STATS
21493
21494/*==========================================================================
21495 FUNCTION WDA_LLStatsSetRspCallback
21496
21497 DESCRIPTION
21498 API to process set link layer statistics response from FW
21499
21500 PARAMETERS
21501 pRsp: Pointer to set link layer statistics response
21502 pUserData: Pointer to user data
21503
21504 RETURN VALUE
21505 NONE
21506
21507===========================================================================*/
21508void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
21509{
21510 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21511
21512
21513 if (NULL == pWdaParams)
21514 {
21515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21516 "%s: pWdaParams received NULL", __func__);
21517 VOS_ASSERT(0) ;
21518 return ;
21519 }
21520
21521 /* Do not need to send notification to upper layer
21522 * Just free allocated resources */
21523 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21524 {
21525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21526 }
21527 if (pWdaParams->wdaMsgParam != NULL)
21528 {
21529 vos_mem_free(pWdaParams->wdaMsgParam);
21530 }
21531 vos_mem_free(pWdaParams) ;
21532
21533 return;
21534}
21535
21536/*==========================================================================
21537 FUNCTION WDA_ProcessLLStatsSetReq
21538
21539 DESCRIPTION
21540 API to send Set Link Layer Stats request to WDI
21541
21542 PARAMETERS
21543 pWDA: Pointer to WDA context
21544 wdaRequest: Pointer to set Link Layer Stats req parameters
21545===========================================================================*/
21546VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
21547 tSirLLStatsSetReq *wdaRequest)
21548{
21549 WDI_Status status = WDI_STATUS_SUCCESS;
21550 tWDA_ReqParams *pWdaParams;
21551
21552 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21553 if (NULL == pWdaParams)
21554 {
21555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21556 "%s: VOS MEM Alloc Failure", __func__);
21557 VOS_ASSERT(0);
21558 return VOS_STATUS_E_NOMEM;
21559 }
21560 pWdaParams->pWdaContext = pWDA;
21561 pWdaParams->wdaMsgParam = wdaRequest;
21562 pWdaParams->wdaWdiApiMsgParam = NULL;
21563
21564 status = WDI_LLStatsSetReq((void *)wdaRequest,
21565 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
21566 (void *)pWdaParams);
21567 if (IS_WDI_STATUS_FAILURE(status))
21568 {
21569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21570 "Failure to request. Free all the memory " );
21571 vos_mem_free(pWdaParams->wdaMsgParam);
21572 vos_mem_free(pWdaParams);
21573 }
21574 return CONVERT_WDI2VOS_STATUS(status);
21575}
21576
21577/*==========================================================================
21578 FUNCTION WDA_LLStatsGetRspCallback
21579
21580 DESCRIPTION
21581 API to process get link layer statistics response from FW
21582
21583 PARAMETERS
21584 pRsp: Pointer to get link layer statistics response
21585 pUserData: Pointer to user data
21586
21587 RETURN VALUE
21588 NONE
21589
21590===========================================================================*/
21591void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
21592{
21593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21594
21595 if (NULL == pWdaParams)
21596 {
21597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21598 "%s: pWdaParams received NULL", __func__);
21599 VOS_ASSERT(0) ;
21600 return ;
21601 }
21602
21603 /* Do not need to send notification to upper layer
21604 * Just free allocated resources */
21605 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21606 {
21607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21608 }
21609 if (pWdaParams->wdaMsgParam != NULL)
21610 {
21611 vos_mem_free(pWdaParams->wdaMsgParam);
21612 }
21613 vos_mem_free(pWdaParams) ;
21614
21615 return;
21616}
21617
21618/*==========================================================================
21619 FUNCTION WDA_ProcessLLStatsGetReq
21620
21621 DESCRIPTION
21622 API to send Get Link Layer Stats request to WDI
21623
21624 PARAMETERS
21625 pWDA: Pointer to WDA context
21626 wdaRequest: Pointer to get Link Layer Stats req parameters
21627===========================================================================*/
21628VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
21629 tSirLLStatsGetReq *wdaRequest)
21630{
21631 WDI_Status status = WDI_STATUS_SUCCESS;
21632 tWDA_ReqParams *pWdaParams;
21633
21634 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21635 if (NULL == pWdaParams)
21636 {
21637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21638 "%s: VOS MEM Alloc Failure", __func__);
21639 VOS_ASSERT(0);
21640 return VOS_STATUS_E_NOMEM;
21641 }
21642 pWdaParams->pWdaContext = pWDA;
21643 pWdaParams->wdaMsgParam = wdaRequest;
21644 pWdaParams->wdaWdiApiMsgParam = NULL;
21645
21646 status = WDI_LLStatsGetReq((void *) wdaRequest,
21647 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
21648 (void *)pWdaParams);
21649 if (IS_WDI_STATUS_FAILURE(status))
21650 {
21651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21652 "Failure to request. Free all the memory " );
21653 vos_mem_free(pWdaParams->wdaMsgParam);
21654 vos_mem_free(pWdaParams);
21655 }
21656 return CONVERT_WDI2VOS_STATUS(status);
21657}
21658
21659/*==========================================================================
21660 FUNCTION WDA_LLStatsClearRspCallback
21661
21662 DESCRIPTION
21663 API to process clear link layer statistics response from FW
21664
21665 PARAMETERS
21666 pRsp: Pointer to clear link layer statistics response
21667 pUserData: Pointer to user data
21668
21669 RETURN VALUE
21670 NONE
21671
21672===========================================================================*/
21673void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
21674{
21675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21676
21677
21678 if (NULL == pWdaParams)
21679 {
21680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21681 "%s: pWdaParams received NULL", __func__);
21682 VOS_ASSERT(0) ;
21683 return ;
21684 }
21685 /* Do not need to send notification to upper layer
21686 * Just free allocated resources */
21687 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21688 {
21689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21690 }
21691 if (pWdaParams->wdaMsgParam != NULL)
21692 {
21693 vos_mem_free(pWdaParams->wdaMsgParam);
21694 }
21695 vos_mem_free(pWdaParams) ;
21696 return;
21697}
21698
21699/*==========================================================================
21700 FUNCTION WDA_ProcessLLStatsClearReq
21701
21702 DESCRIPTION
21703 API to send Clear Link Layer Stats request to WDI
21704
21705 PARAMETERS
21706 pWDA: Pointer to WDA context
21707 wdaRequest: Pointer to earLink Layer Stats req
21708===========================================================================*/
21709VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
21710 tSirLLStatsClearReq *wdaRequest)
21711{
21712 WDI_Status status = WDI_STATUS_SUCCESS;
21713 tWDA_ReqParams *pWdaParams;
21714
21715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21716 if (NULL == pWdaParams)
21717 {
21718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21719 "%s: VOS MEM Alloc Failure", __func__);
21720 VOS_ASSERT(0);
21721 return VOS_STATUS_E_NOMEM;
21722 }
21723 pWdaParams->pWdaContext = pWDA;
21724 pWdaParams->wdaMsgParam = wdaRequest;
21725 pWdaParams->wdaWdiApiMsgParam = NULL;
21726
21727 status = WDI_LLStatsClearReq((void *) wdaRequest,
21728 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
21729 (void *)pWdaParams);
21730 if (IS_WDI_STATUS_FAILURE(status))
21731 {
21732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21733 "Failure to request. Free all the memory " );
21734 vos_mem_free(pWdaParams->wdaMsgParam);
21735 vos_mem_free(pWdaParams);
21736 }
21737 return CONVERT_WDI2VOS_STATUS(status);
21738}
21739
21740#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053021741
Abhishek Singh85b74712014-10-08 11:38:19 +053021742void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
21743{
21744 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
21745
21746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21747 "<------ %s " ,__func__);
21748 if (NULL == fwStatsinfo)
21749 {
21750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21751 "%s: pWdaParams received NULL", __func__);
21752 VOS_ASSERT(0);
21753 return;
21754 }
21755
21756 if(fwStatsinfo->callback)
21757 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
21758
21759 vos_mem_free(pUserData);
21760 return;
21761}
21762
21763
21764v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
21765 tSirFWStatsGetReq *pData)
21766{
21767
21768 WDI_Status wdiStatus;
21769 tSirFWStatsInfo *fwStatsinfo;
21770
21771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21772 "------> %s" , __func__);
21773
21774 fwStatsinfo =
21775 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
21776 if (NULL == fwStatsinfo)
21777 {
21778 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21779 "%s: VOS MEM Alloc Failure", __func__);
21780 VOS_ASSERT(0);
21781 vos_mem_free(pData);
21782 return;
21783 }
21784
21785 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
21786 fwStatsinfo->data = pData->data;
21787
21788 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
21789 WDA_FWStatsGetRspCallback,
21790 pData->stats);
21791 if (WDI_STATUS_PENDING == wdiStatus)
21792 {
21793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21794 "Pending received for %s:%d ", __func__, __LINE__);
21795 }
21796 else if (WDI_STATUS_SUCCESS != wdiStatus)
21797 {
21798 if (fwStatsinfo->callback)
21799 {
21800 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
21801 }
21802 vos_mem_free(fwStatsinfo);
21803 }
21804 vos_mem_free(pData);
21805}
21806
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053021807/*==========================================================================
21808 FUNCTION WDA_EncryptMsgRspCallback
21809
21810 DESCRIPTION
21811 API to send Encrypt message response to HDD
21812
21813 PARAMETERS
21814 pEventData: Response from FW
21815 pUserData: Data sent to firmware as part of request
21816===========================================================================*/
21817void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
21818 void* pUserData)
21819{
21820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21821 tWDA_CbContext *pWDA = NULL;
21822 tpAniSirGlobal pMac;
21823 vos_msg_t vosMsg;
21824 tpSirEncryptedDataRspParams pEncRspParams;
21825 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21826
21827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21828 FL("%s:"), __func__);
21829 if (NULL == pWdaParams)
21830 {
21831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21832 FL("%s: pWdaParams received NULL"), __func__);
21833 VOS_ASSERT(0);
21834 return;
21835 }
21836
21837 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21838
21839 if (NULL == pWDA)
21840 {
21841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21842 FL("%s: pWDA received NULL"), __func__);
21843 VOS_ASSERT(0);
21844 goto error;
21845 }
21846
21847 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21848 if (NULL == pMac)
21849 {
21850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21851 FL("%s:pMac is NULL"), __func__);
21852 VOS_ASSERT(0);
21853 goto error;
21854 }
21855
21856 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21857
21858 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21859 if (NULL == pEncRspParams)
21860 {
21861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21862 FL("%s: VOS MEM Alloc Failure"), __func__);
21863 VOS_ASSERT(0);
21864 goto error;
21865 }
21866
21867 /* Message Header */
21868 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21869 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21870 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21871 pEncryptedDataRsp->encryptedPayload.length;
21872 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21873 pEncryptedDataRsp->encryptedPayload.data,
21874 pEncryptedDataRsp->encryptedPayload.length);
21875
21876 /* VOS message wrapper */
21877 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21878 vosMsg.bodyptr = (void *)pEncRspParams;
21879 vosMsg.bodyval = 0;
21880
21881 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21882 {
21883 /* free the mem */
21884 vos_mem_free((v_VOID_t *) pEncRspParams);
21885 }
21886
21887error:
21888
21889 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21890 {
21891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21892 }
21893 if (pWdaParams->wdaMsgParam != NULL)
21894 {
21895 vos_mem_free(pWdaParams->wdaMsgParam);
21896 }
21897 vos_mem_free(pWdaParams) ;
21898
21899 return;
21900}
21901/*==========================================================================
21902 FUNCTION WDA_ProcessEncryptMsgReq
21903
21904 DESCRIPTION
21905 API to send Encrypt message Request to WDI
21906
21907 PARAMETERS
21908 pWDA: Pointer to WDA context
21909 wdaRequest: Pointer to Encrypt_msg req parameters
21910===========================================================================*/
21911VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21912 u8 *wdaRequest)
21913{
21914 WDI_Status status = WDI_STATUS_SUCCESS;
21915 tWDA_ReqParams *pWdaParams;
21916
21917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21918 FL("%s: "), __func__);
21919 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21920 if (NULL == pWdaParams)
21921 {
21922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21923 FL("%s: VOS MEM Alloc Failure"), __func__);
21924 VOS_ASSERT(0);
21925 return VOS_STATUS_E_NOMEM;
21926 }
21927 pWdaParams->pWdaContext = pWDA;
21928 pWdaParams->wdaMsgParam = wdaRequest;
21929 pWdaParams->wdaWdiApiMsgParam = NULL;
21930
21931 status = WDI_EncryptMsgReq((void *)wdaRequest,
21932 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21933 (void *)pWdaParams);
21934 if (IS_WDI_STATUS_FAILURE(status))
21935 {
21936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21937 FL("Failure to request. Free all the memory " ));
21938 vos_mem_free(pWdaParams->wdaMsgParam);
21939 vos_mem_free(pWdaParams);
21940 }
21941 return CONVERT_WDI2VOS_STATUS(status);
21942}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021943/*==========================================================================
21944 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21945
21946 DESCRIPTION
21947 API to enable/disable RTS/CTS for different modes.
21948
21949 PARAMETERS
21950 pWDA: Pointer to WDA context
21951 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21952===========================================================================*/
21953
21954VOS_STATUS
21955WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21956 tANI_U32 rtsCtsVal)
21957{
21958 WDI_Status status;
21959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21960 FL("---> %s"), __func__);
21961 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21962 if (WDI_STATUS_PENDING == status)
21963 {
21964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21965 FL("pending status received "));
21966 }
21967 else if (WDI_STATUS_SUCCESS_SYNC != status)
21968 {
21969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21970 FL("Failure status %d"), status);
21971 }
21972 return CONVERT_WDI2VOS_STATUS(status) ;
21973}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021974
21975void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021976{
21977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021978 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021979
21980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21981 "<------ %s " ,__func__);
21982 if (NULL == pWdaParams)
21983 {
21984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21985 "%s: pWdaParams received NULL", __func__);
21986 VOS_ASSERT(0) ;
21987 return ;
21988 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021989 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21990 if (pData != NULL) {
21991 pData->callback(pData->magic, pData->cmpVar);
21992 vos_mem_free(pWdaParams->wdaMsgParam);
21993 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021994 vos_mem_free(pWdaParams) ;
21995
21996 return;
21997}
21998
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021999VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053022000{
22001
22002 WDI_Status status = WDI_STATUS_SUCCESS;
22003 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022004 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053022005
22006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22007 FL("%s: "), __func__);
22008 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22009 if (NULL == pWdaParams)
22010 {
22011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22012 FL("%s: VOS MEM Alloc Failure"), __func__);
22013 VOS_ASSERT(0);
22014 return VOS_STATUS_E_NOMEM;
22015 }
22016 pWdaParams->pWdaContext = pWDA;
22017 pWdaParams->wdaMsgParam = wdaRequest;
22018 pWdaParams->wdaWdiApiMsgParam = NULL;
22019
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022020 status = WDI_MonStartReq(pMonModeData->data,
22021 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022022 (void *)pWdaParams);
22023 if (IS_WDI_STATUS_FAILURE(status))
22024 {
22025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22026 "Failure to request. Free all the memory " );
22027 vos_mem_free(pWdaParams->wdaMsgParam);
22028 vos_mem_free(pWdaParams);
22029 }
22030 return CONVERT_WDI2VOS_STATUS(status);
22031}
22032
Katya Nigamf0511f62015-05-05 16:40:57 +053022033VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
22034{
22035
22036 WDI_Status status = WDI_STATUS_SUCCESS;
22037 tWDA_ReqParams *pWdaParams;
22038
22039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22040 FL("%s: "), __func__);
22041 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22042 if (NULL == pWdaParams)
22043 {
22044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22045 FL("%s: VOS MEM Alloc Failure"), __func__);
22046 VOS_ASSERT(0);
22047 return VOS_STATUS_E_NOMEM;
22048 }
22049 pWdaParams->pWdaContext = pWDA;
22050 pWdaParams->wdaMsgParam = wdaRequest;
22051 pWdaParams->wdaWdiApiMsgParam = NULL;
22052
Bhargav Shah1ae5de02015-07-20 13:32:31 +053022053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22054 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022055 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022056 (void *)pWdaParams);
22057
22058 if (IS_WDI_STATUS_FAILURE(status))
22059 {
22060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22061 "Failure to request. Free all the memory " );
22062 vos_mem_free(pWdaParams->wdaMsgParam);
22063 vos_mem_free(pWdaParams);
22064 }
22065 return CONVERT_WDI2VOS_STATUS(status);
22066}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053022067
22068VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
22069{
22070 WDI_Status status;
22071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22072 FL("---> %s"), __func__);
22073 status = WDI_EnableDisableCAEventInd(val);
22074 if (WDI_STATUS_PENDING == status)
22075 {
22076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22077 FL("pending status received "));
22078 }
22079 else if (WDI_STATUS_SUCCESS_SYNC != status)
22080 {
22081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22082 FL("Failure status %d"), status);
22083 }
22084 return CONVERT_WDI2VOS_STATUS(status) ;
22085}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022086
22087/*==========================================================================
22088 FUNCTION WDA_WifiConfigSetRspCallback
22089
22090 DESCRIPTION
22091 API to process set WifiConfig response from FW
22092
22093 PARAMETERS
22094 pRsp: Pointer to set WifiConfig response
22095 pUserData: Pointer to user data
22096
22097 RETURN VALUE
22098 NONE
22099
22100===========================================================================*/
22101void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
22102{
22103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22104
22105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22106 "<------ %s " ,__func__);
22107
22108 if(NULL == pWdaParams)
22109 {
22110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22111 "%s: pWdaParams received NULL", __func__);
22112 VOS_ASSERT(0);
22113 return ;
22114 }
22115
22116 if(NULL == pWdaParams->wdaMsgParam)
22117 {
22118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22119 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
22120 VOS_ASSERT(0);
22121 vos_mem_free(pWdaParams);
22122 return ;
22123 }
22124
22125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22126 vos_mem_free(pWdaParams->wdaMsgParam);
22127 vos_mem_free(pWdaParams);
22128
22129 return;
22130}
22131
22132/*==========================================================================
22133 FUNCTION WDA_ProcessWifiConfigReq
22134
22135 DESCRIPTION
22136 API to send Set WifiConfig params request to WDI
22137
22138 PARAMETERS
22139 pWDA: Pointer to WDA context
22140 wdaRequest: Pointer to set WifiConfig req parameters
22141===========================================================================*/
22142
22143VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
22144 tSetWifiConfigParams *pwdaWificonfig)
22145{
22146 WDI_Status status = WDI_STATUS_SUCCESS;
22147 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
22148 tWDA_ReqParams *pWdaParams ;
22149 WDI_Status wstatus;
22150
22151 /* Sanity Check*/
22152 if(NULL == pwdaWificonfig)
22153 {
22154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22155 "%s: tSetWifiConfigParams received NULL", __func__);
22156 VOS_ASSERT(0) ;
22157 return VOS_STATUS_E_FAULT;
22158 }
22159
22160 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
22161 sizeof(WDI_WifiConfigSetReqType));
22162 if(NULL == pwdiWifConfigSetReqParams)
22163 {
22164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22165 "%s: VOS MEM Alloc Failure", __func__);
22166 VOS_ASSERT(0);
22167 vos_mem_free(pwdaWificonfig);
22168 return VOS_STATUS_E_NOMEM;
22169 }
22170
22171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
22172 if(NULL == pWdaParams)
22173 {
22174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22175 "%s: VOS MEM Alloc Failure", __func__);
22176 VOS_ASSERT(0);
22177 vos_mem_free(pwdiWifConfigSetReqParams);
22178 vos_mem_free(pwdaWificonfig);
22179 return VOS_STATUS_E_NOMEM;
22180 }
22181 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
22182 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
22183 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
22184 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
22185
22186 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053022187 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022188 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
22189
22190 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
22191 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
22192 pWdaParams);
22193 if(IS_WDI_STATUS_FAILURE(wstatus))
22194 {
22195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22196 "Failure in sendind WifiConfigReq, free all the memory" );
22197 status = CONVERT_WDI2VOS_STATUS(wstatus);
22198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
22199 vos_mem_free(pWdaParams->wdaMsgParam);
22200 vos_mem_free(pWdaParams);
22201 }
22202
22203 return status;
22204
22205}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022206
22207#ifdef FEATURE_OEM_DATA_SUPPORT
22208/*
22209 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
22210 * Request to WDI.
22211 */
22212VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
22213 tOemDataReqNewConfig *pOemDataReqNewConfig)
22214{
22215 VOS_STATUS status = VOS_STATUS_SUCCESS;
22216 WDI_Status wstatus;
22217 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
22218
22219 /* Sanity Check*/
22220 if(NULL == pOemDataReqNewConfig)
22221 {
22222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22223 "%s: pOemDataReqNewConfig received NULL", __func__);
22224 VOS_ASSERT(0) ;
22225 return VOS_STATUS_E_FAULT;
22226 }
22227
22228 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
22229 sizeof(WDI_OemDataReqNewConfig));
22230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22231 "------> %s " ,__func__);
22232
22233 if(NULL == wdiOemDataReqNewConfig)
22234 {
22235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22236 "%s: VOS MEM Alloc Failure", __func__);
22237 VOS_ASSERT(0);
22238 vos_mem_free(pOemDataReqNewConfig);
22239 return VOS_STATUS_E_NOMEM;
22240 }
22241
22242 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
22243 sizeof(WDI_OemDataReqNewConfig));
22244
22245 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
22246
22247 if (WDI_STATUS_PENDING == wstatus)
22248 {
22249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22250 FL("pending status received "));
22251 }
22252 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
22253 {
22254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22255 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022256 }
22257
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053022258 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022259 vos_mem_free(pOemDataReqNewConfig);
22260
22261 return status;
22262}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022263
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053022264void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
22265 void *pUserData)
22266{
22267 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
22268 (tSirAntennaDiversitySelectionInfo *)pUserData;
22269
22270 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
22271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22272 "<------ %s " ,__func__);
22273 if (NULL == pAntennaDivSelInfo)
22274 {
22275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22276 "%s: pWdaParams received NULL", __func__);
22277 VOS_ASSERT(0) ;
22278 return ;
22279 }
22280 if (NULL == resParams)
22281 {
22282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22283 "%s: resParams received NULL", __func__);
22284 VOS_ASSERT(0) ;
22285 return ;
22286 }
22287
22288 if (pAntennaDivSelInfo->callback)
22289 {
22290 if (WDI_STATUS_SUCCESS == status)
22291 {
22292 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
22293 pAntennaDivSelInfo->data);
22294 }
22295 else
22296 {
22297 pAntennaDivSelInfo->callback(-1,
22298 pAntennaDivSelInfo->data);
22299 }
22300 }
22301
22302 vos_mem_free(pUserData);
22303 return;
22304}
22305
22306/*
22307 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
22308 * Request to WDI.
22309 */
22310v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
22311 tSirAntennaDiversitySelectionReq *pData)
22312{
22313 WDI_Status wdiStatus;
22314 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
22315
22316 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22317 "------> %s " , __func__);
22318
22319 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
22320 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
22321 if (NULL == pAntennaDivSelInfo)
22322 {
22323 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22324 "%s: VOS MEM Alloc Failure", __func__);
22325 VOS_ASSERT(0);
22326 vos_mem_free(pData);
22327 return;
22328 }
22329
22330 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
22331 pAntennaDivSelInfo->data = pData->data;
22332
22333 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
22334 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
22335
22336 if (WDI_STATUS_PENDING == wdiStatus)
22337 {
22338 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22339 "Pending received for %s:%d ", __func__, __LINE__);
22340 }
22341 else if (WDI_STATUS_SUCCESS != wdiStatus)
22342 {
22343 if (pAntennaDivSelInfo->callback)
22344 {
22345 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
22346 }
22347 }
22348
22349 vos_mem_free(pData);
22350 return;
22351}
22352
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053022353/*
22354 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
22355 * Request to WDI.
22356 */
22357VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
22358 tModifyRoamParamsReqParams *params)
22359{
22360 WDI_Status status;
22361
22362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22363 FL("---> %s"), __func__);
22364
22365 if (NULL == params)
22366 {
22367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22368 FL("tModifyRoamParamsReqParams is received NULL"));
22369 return VOS_STATUS_E_NOMEM;
22370 }
22371
22372 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
22373 if (WDI_STATUS_PENDING == status)
22374 {
22375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22376 FL("pending status received "));
22377 }
22378 else if (WDI_STATUS_SUCCESS_SYNC != status)
22379 {
22380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22381 FL("Failure status %d"), status);
22382 }
22383 vos_mem_free(params);
22384 return CONVERT_WDI2VOS_STATUS(status) ;
22385}
22386
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053022387#endif