blob: 99250bcb60fa3e5ebea42e49a55b826d836b2b23 [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 ;
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302445
2446 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2447 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2448 tlvStruct->length = sizeof(tANI_U32);
2449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2450
2451 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2452 configDataValue ) != eSIR_SUCCESS)
2453 {
2454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2455 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2456 goto handle_failure;
2457 }
2458 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2459 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002460#ifdef WLAN_DEBUG
2461 {
2462 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2464 "****** Dumping CFG TLV ***** ");
2465 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2466 {
2467 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2468 "%02x %02x %02x %02x %02x %02x %02x %02x",
2469 tlvStructStart[i],
2470 tlvStructStart[i+1],
2471 tlvStructStart[i+2],
2472 tlvStructStart[i+3],
2473 tlvStructStart[i+4],
2474 tlvStructStart[i+5],
2475 tlvStructStart[i+6],
2476 tlvStructStart[i+7]);
2477 }
2478 /* Dump the bytes in the last line*/
2479 for (; i < wdiStartParams->usConfigBufferLen; i++)
2480 {
2481 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2482 "%02x ",tlvStructStart[i]);
2483 }
2484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2485 "**************************** ");
2486 }
2487#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002489handle_failure:
2490 vos_mem_free(configParam);
2491 return VOS_STATUS_E_FAILURE;
2492}
Jeff Johnson295189b2012-06-20 16:38:30 -07002493/*
2494 * FUNCTION: WDA_wdiCompleteCB
2495 * call the voss call back function
2496 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002497void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002498{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2500 tWDA_CbContext *wdaContext;
2501
2502 if(NULL == pWdaParams)
2503 {
2504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002505 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002506 VOS_ASSERT(0) ;
2507 return ;
2508 }
2509
2510 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2511
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 if (NULL == wdaContext)
2513 {
2514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002515 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 return ;
2517 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002518
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002520 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002524 vos_mem_free(pWdaParams);
2525
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 if(WDI_STATUS_SUCCESS != status)
2527 {
2528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2529 "WDI stop callback returned failure" );
2530 VOS_ASSERT(0) ;
2531 }
2532 else
2533 {
2534 wdaContext->wdaState = WDA_STOP_STATE;
2535 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002536
Leo Chang9d76f622013-08-23 16:34:52 -07002537 /* FTM Driver stop procedure should be synced.
2538 * Stop and Close will happen on same context */
2539 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2540 {
2541 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2542 {
2543 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2544 "%s: FTM Stop Event Set Fail", __func__);
2545 VOS_ASSERT(0);
2546 }
2547 }
2548
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002550 vos_WDAComplete_cback(wdaContext->pVosContext);
2551
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 return ;
2553}
Jeff Johnson295189b2012-06-20 16:38:30 -07002554/*
2555 * FUNCTION: WDA_stop
2556 * call WDI_stop
2557 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002558VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2559{
2560 WDI_Status wdiStatus;
2561 VOS_STATUS status = VOS_STATUS_SUCCESS;
2562 WDI_StopReqParamsType *wdiStopReq;
2563 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002564 tWDA_ReqParams *pWdaParams ;
2565
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 if (NULL == pWDA)
2567 {
2568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002569 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 VOS_ASSERT(0);
2571 return VOS_STATUS_E_FAILURE;
2572 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002573 if (pWDA->wdiFailed == true)
2574 {
2575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002576 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002577 return VOS_STATUS_E_ALREADY;
2578 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002579
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 /* FTM mode stay START_STATE */
2581 if( (WDA_READY_STATE != pWDA->wdaState) &&
2582 (WDA_INIT_STATE != pWDA->wdaState) &&
2583 (WDA_START_STATE != pWDA->wdaState) )
2584 {
2585 VOS_ASSERT(0);
2586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 wdiStopReq = (WDI_StopReqParamsType *)
2588 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2589 if(NULL == wdiStopReq)
2590 {
2591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 VOS_ASSERT(0);
2594 return VOS_STATUS_E_NOMEM;
2595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002596
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 wdiStopReq->wdiStopReason = reason;
2598 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302599
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002600 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2601 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002602 {
2603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 VOS_ASSERT(0);
2606 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002607 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002609
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002610 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2611 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002612 {
2613 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002614 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002616
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002617 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2618 pWdaParams->wdaMsgParam = NULL;
2619 pWdaParams->pWdaContext = pWDA;
2620
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 /* call WDI stop */
2622 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002623 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2624
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2626 {
2627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2628 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2630 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 status = VOS_STATUS_E_FAILURE;
2632 }
Leo Chang9d76f622013-08-23 16:34:52 -07002633
2634 /* FTM Driver stop procedure should be synced.
2635 * Stop and Close will happen on same context */
2636 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2637 {
2638 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2639 WDI_RESPONSE_TIMEOUT);
2640 if (status != VOS_STATUS_SUCCESS)
2641 {
2642 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2643 "%s: FTM Stop Timepoout", __func__);
2644 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002645 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302646 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 return status;
2649}
Jeff Johnson295189b2012-06-20 16:38:30 -07002650/*
2651 * FUNCTION: WDA_close
2652 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302653 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002654VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2655{
Jeff Johnson43971f52012-07-17 12:26:56 -07002656 VOS_STATUS status = VOS_STATUS_SUCCESS;
2657 WDI_Status wstatus;
2658 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 if (NULL == wdaContext)
2661 {
2662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002663 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 return VOS_STATUS_E_FAILURE;
2665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2667 (WDA_STOP_STATE != wdaContext->wdaState))
2668 {
2669 VOS_ASSERT(0);
2670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002672 wstatus = WDI_Close();
2673 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 {
2675 status = VOS_STATUS_E_FAILURE;
2676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002679 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2680 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 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 status = VOS_STATUS_E_FAILURE;
2685 }
2686
Jeff Johnson43971f52012-07-17 12:26:56 -07002687 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002688 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 {
2690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002691 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 status = VOS_STATUS_E_FAILURE;
2693 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002694 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002695 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 {
2697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002698 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002699 status = VOS_STATUS_E_FAILURE;
2700 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002701 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002702 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 {
2704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002705 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 status = VOS_STATUS_E_FAILURE;
2707 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302708
2709 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
2710
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002712 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002713 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 {
2715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2716 "error in WDA close " );
2717 status = VOS_STATUS_E_FAILURE;
2718 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302719
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 return status;
2721}
Jeff Johnson295189b2012-06-20 16:38:30 -07002722/*
2723 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2724 * returns 1 if the compiled version is greater than or equal to the input version
2725 */
2726
2727uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2728{
2729 VOS_STATUS status = VOS_STATUS_SUCCESS;
2730 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2731 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2734 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2735 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2736 (compiledVersion.revision >= revision)))
2737 return 1;
2738 else
2739 return 0;
2740}
Jeff Johnson295189b2012-06-20 16:38:30 -07002741/*
2742 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2743 * returns 1 if the compiled version is greater than or equal to the input version
2744 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002745uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2746{
2747 VOS_STATUS status = VOS_STATUS_SUCCESS;
2748 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2749 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2752 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2753 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2754 (reportedVersion.revision >= revision)))
2755 return 1;
2756 else
2757 return 0;
2758}
Jeff Johnson295189b2012-06-20 16:38:30 -07002759/*
2760 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2761 * Returns the version of the WCNSS WLAN API with which the HOST
2762 * device driver was compiled
2763 */
2764VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2765 tSirVersionType *pVersion)
2766{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302767 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 if ((NULL == pvosGCtx) || (NULL == pVersion))
2769 {
2770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002771 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 VOS_ASSERT(0);
2773 return VOS_STATUS_E_FAILURE;
2774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2776 if (NULL == pWDA )
2777 {
2778 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002779 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 VOS_ASSERT(0);
2781 return VOS_STATUS_E_FAILURE;
2782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 *pVersion = pWDA->wcnssWlanCompiledVersion;
2784 return VOS_STATUS_SUCCESS;
2785}
Jeff Johnson295189b2012-06-20 16:38:30 -07002786/*
2787 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2788 * Returns the version of the WCNSS WLAN API with which the WCNSS
2789 * device driver was compiled
2790 */
2791VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2792 tSirVersionType *pVersion)
2793{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302794 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 if ((NULL == pvosGCtx) || (NULL == pVersion))
2796 {
2797 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002798 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 VOS_ASSERT(0);
2800 return VOS_STATUS_E_FAILURE;
2801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2803 if (NULL == pWDA )
2804 {
2805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002806 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 VOS_ASSERT(0);
2808 return VOS_STATUS_E_FAILURE;
2809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 *pVersion = pWDA->wcnssWlanReportedVersion;
2811 return VOS_STATUS_SUCCESS;
2812}
Jeff Johnson295189b2012-06-20 16:38:30 -07002813/*
2814 * FUNCTION: WDA_GetWcnssSoftwareVersion
2815 * Returns the WCNSS Software version string
2816 */
2817VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2818 tANI_U8 *pVersion,
2819 tANI_U32 versionBufferSize)
2820{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302821 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002823 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002824 if ((NULL == pvosGCtx) || (NULL == pVersion))
2825 {
2826 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002827 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 VOS_ASSERT(0);
2829 return VOS_STATUS_E_FAILURE;
2830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2832 if (NULL == pWDA )
2833 {
2834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_ASSERT(0);
2837 return VOS_STATUS_E_FAILURE;
2838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2840 return VOS_STATUS_SUCCESS;
2841}
Jeff Johnson295189b2012-06-20 16:38:30 -07002842/*
2843 * FUNCTION: WDA_GetWcnssHardwareVersion
2844 * Returns the WCNSS Hardware version string
2845 */
2846VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2847 tANI_U8 *pVersion,
2848 tANI_U32 versionBufferSize)
2849{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302850 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002852 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 if ((NULL == pvosGCtx) || (NULL == pVersion))
2854 {
2855 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002856 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 VOS_ASSERT(0);
2858 return VOS_STATUS_E_FAILURE;
2859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2861 if (NULL == pWDA )
2862 {
2863 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002864 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 VOS_ASSERT(0);
2866 return VOS_STATUS_E_FAILURE;
2867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2869 return VOS_STATUS_SUCCESS;
2870}
Jeff Johnson295189b2012-06-20 16:38:30 -07002871/*
2872 * FUNCTION: WDA_WniCfgDnld
2873 * Trigger CFG Download
2874 */
2875VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2876{
2877 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302878 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002879
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 if (NULL == pMac )
2881 {
2882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 VOS_ASSERT(0);
2885 return VOS_STATUS_E_FAILURE;
2886 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302887 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 return vosStatus;
2889}
Jeff Johnson295189b2012-06-20 16:38:30 -07002890/* -----------------------------------------------------------------
2891 * WDI interface
2892 * -----------------------------------------------------------------
2893 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002894/*
2895 * FUNCTION: WDA_suspendDataTxCallback
2896 * call back function called from TL after suspend Transmission
2897 */
2898VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2899 v_U8_t* ucSTAId,
2900 VOS_STATUS vosStatus)
2901{
2902 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002904 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 if (NULL == pWDA )
2906 {
2907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002908 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 VOS_ASSERT(0);
2910 return VOS_STATUS_E_FAILURE;
2911 }
2912 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2913 {
2914 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2915 }
2916 else
2917 {
2918 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 /* Trigger the event to bring the WDA TL suspend function to come
2921 * out of wait*/
2922 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2923 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2924 {
2925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002926 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 /* If TL suspended had timedout before this callback was called, resume back
2929 * TL.*/
2930 if (pWDA->txSuspendTimedOut)
2931 {
2932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002933 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 WDA_ResumeDataTx(pWDA);
2935 pWDA->txSuspendTimedOut = FALSE;
2936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 return VOS_STATUS_SUCCESS;
2938}
Jeff Johnson295189b2012-06-20 16:38:30 -07002939/*
2940 * FUNCTION: WDA_suspendDataTx
2941 * Update TL to suspend the data Transmission
2942 */
2943VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2944{
2945 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2946 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947
2948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002949 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002950 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 if (pWDA->txSuspendTimedOut)
2952 {
2953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002954 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 return status;
2956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 /* Reset the event to be not signalled */
2958 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2959 if(!VOS_IS_STATUS_SUCCESS(status))
2960 {
2961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002962 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 return VOS_STATUS_E_FAILURE;
2964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002966 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 WDA_SuspendDataTxCallback);
2968 if(status != VOS_STATUS_SUCCESS)
2969 {
2970 return status;
2971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 /* Wait for the event to be set by the TL, to get the response of
2973 * suspending the TX queues, this event should be set by the Callback
2974 * function called by TL*/
2975 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2976 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2977 if(!VOS_IS_STATUS_SUCCESS(status))
2978 {
2979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2980 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 /* Set this flag to true when TL suspend times out, so that when TL
2983 * suspend eventually happens and calls the callback, TL can be resumed
2984 * right away by looking at this flag when true.*/
2985 pWDA->txSuspendTimedOut = TRUE;
2986 }
2987 else
2988 {
2989 pWDA->txSuspendTimedOut = FALSE;
2990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2992 {
2993 status = VOS_STATUS_SUCCESS;
2994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 return status;
2996}
Jeff Johnson295189b2012-06-20 16:38:30 -07002997/*
2998 * FUNCTION: WDA_resumeDataTx
2999 * Update TL to resume the data Transmission
3000 */
3001VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3002{
3003 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003004
3005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003006 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003007
3008 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 return status;
3010}
Jeff Johnson295189b2012-06-20 16:38:30 -07003011/*
3012 * FUNCTION: WDA_InitScanReqCallback
3013 * Trigger Init SCAN callback
3014 */
3015void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3016{
3017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3018 tWDA_CbContext *pWDA;
3019 tInitScanParams *pWDA_ScanParam ;
3020 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003022 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 if(NULL == pWdaParams)
3024 {
3025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003026 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 VOS_ASSERT(0) ;
3028 return ;
3029 }
3030 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3031 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 if(NULL == pWDA_ScanParam)
3033 {
3034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003035 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003036 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3038 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 return ;
3040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 if(WDI_STATUS_SUCCESS != wdiStatus)
3042 {
3043 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 if(VOS_STATUS_SUCCESS != status)
3045 {
3046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003047 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 }
3049 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 /* free WDI command buffer */
3051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303053
3054
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003056 /* without converting the Status to Failure or Success Just
3057 pass the same status to lim */
3058 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 /* send SCAN RSP message back to PE */
3060 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 return ;
3062}
3063
3064/*
3065 * FUNCTION: WDA_ProcessInitScanReq
3066 * Trigger Init SCAN in DAL
3067 */
3068VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3069 tInitScanParams *initScanParams)
3070{
3071 WDI_Status status = WDI_STATUS_SUCCESS ;
3072 WDI_InitScanReqParamsType *wdiInitScanParam =
3073 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3074 sizeof(WDI_InitScanReqParamsType)) ;
3075 tWDA_ReqParams *pWdaParams;
3076 tANI_U8 i = 0;
3077
3078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003079 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 if(NULL == wdiInitScanParam)
3081 {
3082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003083 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003084 VOS_ASSERT(0);
3085 return VOS_STATUS_E_NOMEM;
3086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3088 if(NULL == pWdaParams)
3089 {
3090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 VOS_ASSERT(0);
3093 vos_mem_free(wdiInitScanParam);
3094 return VOS_STATUS_E_NOMEM;
3095 }
3096
3097 /* Copy init Scan params to WDI structure */
3098 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3099 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3100 sizeof(tSirMacAddr)) ;
3101 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3102 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3103 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3105 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3107 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3109 {
3110 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3111 initScanParams->scanEntry.bssIdx[i] ;
3112 }
3113
3114 /* if Frame length, copy macMgmtHdr or WDI structure */
3115 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3116 {
3117 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3118 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3119 }
3120 wdiInitScanParam->wdiReqStatusCB = NULL ;
3121
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 /* Store Init Req pointer, as this will be used for response */
3123 pWdaParams->pWdaContext = pWDA;
3124 pWdaParams->wdaMsgParam = initScanParams;
3125 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 /* first try to suspend TX */
3127 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 if(WDI_STATUS_SUCCESS != status)
3129 {
3130 goto handleWdiFailure;
3131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 /* call DAL API to pass init scan request to DAL */
3133 status = WDI_InitScanReq(wdiInitScanParam,
3134 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 if(IS_WDI_STATUS_FAILURE(status))
3136 {
3137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3138 "error in WDA Init Scan, Resume Tx " );
3139 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 VOS_ASSERT(0) ;
3141
3142 goto handleWdiFailure;
3143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145handleWdiFailure:
3146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3147 "Failure in WDI Api, free all the memory " );
3148 /* free WDI command buffer */
3149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3150 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 /* send Failure to PE */
3152 initScanParams->status = eSIR_FAILURE ;
3153 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 return CONVERT_WDI2VOS_STATUS(status) ;
3155}
3156
Jeff Johnson295189b2012-06-20 16:38:30 -07003157/*
3158 * FUNCTION: WDA_StartScanReqCallback
3159 * send Start SCAN RSP back to PE
3160 */
3161void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3162 void* pUserData)
3163{
3164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3165 tWDA_CbContext *pWDA;
3166 tStartScanParams *pWDA_ScanParam;
3167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003168 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 if(NULL == pWdaParams)
3170 {
3171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003172 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 VOS_ASSERT(0) ;
3174 return ;
3175 }
3176 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3177 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 if(NULL == pWDA_ScanParam)
3179 {
3180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003181 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003183 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 return ;
3185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3187 {
3188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003189 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003191 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 return ;
3193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3195 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003196
Jeff Johnson295189b2012-06-20 16:38:30 -07003197
3198 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003199 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 /* send SCAN RSP message back to PE */
3201 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 return ;
3203}
3204
Jeff Johnson295189b2012-06-20 16:38:30 -07003205/*
3206 * FUNCTION: WDA_ProcessStartScanReq
3207 * Trigger start SCAN in WDI
3208 */
3209VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3210 tStartScanParams *startScanParams)
3211{
3212 WDI_Status status = WDI_STATUS_SUCCESS;
3213 WDI_StartScanReqParamsType *wdiStartScanParams =
3214 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3215 sizeof(WDI_StartScanReqParamsType)) ;
3216 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 if(NULL == wdiStartScanParams)
3220 {
3221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 VOS_ASSERT(0);
3224 return VOS_STATUS_E_NOMEM;
3225 }
3226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3227 if(NULL == pWdaParams)
3228 {
3229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 VOS_ASSERT(0);
3232 vos_mem_free(wdiStartScanParams);
3233 return VOS_STATUS_E_NOMEM;
3234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 /* Copy init Scan params to WDI structure */
3236 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3237 wdiStartScanParams->wdiReqStatusCB = NULL ;
3238
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 /* Store Init Req pointer, as this will be used for response */
3240 /* store Params pass it to WDI */
3241 pWdaParams->pWdaContext = pWDA;
3242 pWdaParams->wdaMsgParam = startScanParams;
3243 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 /* call DAL API to pass init scan request to DAL */
3245 status = WDI_StartScanReq(wdiStartScanParams,
3246 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 /* failure returned by WDI API */
3248 if(IS_WDI_STATUS_FAILURE(status))
3249 {
3250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3251 "Failure in Start Scan WDI API, free all the memory "
3252 "It should be due to previous abort scan." );
3253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3254 vos_mem_free(pWdaParams) ;
3255 startScanParams->status = eSIR_FAILURE ;
3256 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 return CONVERT_WDI2VOS_STATUS(status) ;
3259}
Jeff Johnson295189b2012-06-20 16:38:30 -07003260/*
3261 * FUNCTION: WDA_EndScanReqCallback
3262 * END SCAN callback
3263 */
3264void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3265{
3266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3267 tWDA_CbContext *pWDA;
3268 tEndScanParams *endScanParam;
3269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003270 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 if(NULL == pWdaParams)
3272 {
3273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003274 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 VOS_ASSERT(0) ;
3276 return ;
3277 }
3278 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3279 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003280 if(NULL == endScanParam)
3281 {
3282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003283 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3286 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 return ;
3288 }
3289
3290 /* Free WDI command buffer */
3291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3292 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003294 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 /* send response back to PE */
3296 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3297 return ;
3298}
3299
Jeff Johnson295189b2012-06-20 16:38:30 -07003300/*
3301 * FUNCTION: WDA_ProcessEndScanReq
3302 * Trigger END SCAN in WDI
3303 */
3304VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3305 tEndScanParams *endScanParams)
3306{
3307 WDI_Status status = WDI_STATUS_SUCCESS;
3308 WDI_EndScanReqParamsType *wdiEndScanParams =
3309 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3310 sizeof(WDI_EndScanReqParamsType)) ;
3311 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 if(NULL == wdiEndScanParams)
3315 {
3316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 VOS_ASSERT(0);
3319 return VOS_STATUS_E_NOMEM;
3320 }
3321 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3322 if(NULL == pWdaParams)
3323 {
3324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 VOS_ASSERT(0);
3327 vos_mem_free(wdiEndScanParams);
3328 return VOS_STATUS_E_NOMEM;
3329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 /* Copy init Scan params to WDI structure */
3331 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3332 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 /* Store Init Req pointer, as this will be used for response */
3334 /* store Params pass it to WDI */
3335 pWdaParams->pWdaContext = pWDA;
3336 pWdaParams->wdaMsgParam = endScanParams;
3337 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 /* call DAL API to pass init scan request to DAL */
3339 status = WDI_EndScanReq(wdiEndScanParams,
3340 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 if(IS_WDI_STATUS_FAILURE(status))
3342 {
3343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3344 "Failure in End Scan WDI API, free all the memory "
3345 "It should be due to previous abort scan." );
3346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3347 vos_mem_free(pWdaParams) ;
3348 endScanParams->status = eSIR_FAILURE ;
3349 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 return CONVERT_WDI2VOS_STATUS(status) ;
3352}
Jeff Johnson295189b2012-06-20 16:38:30 -07003353/*
3354 * FUNCTION: WDA_FinishScanReqCallback
3355 * Trigger Finish SCAN callback
3356 */
3357void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3358{
3359 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3360 tWDA_CbContext *pWDA;
3361 tFinishScanParams *finishScanParam;
3362 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003364 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 if(NULL == pWdaParams)
3366 {
3367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003368 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 VOS_ASSERT(0) ;
3370 return ;
3371 }
3372
3373 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3374 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 if(NULL == finishScanParam)
3376 {
3377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3381 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 return ;
3383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3385 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 /*
3387 * Now Resume TX, if we reached here means, TX is already suspended, we
3388 * have to resume it unconditionaly
3389 */
3390 status = WDA_ResumeDataTx(pWDA) ;
3391
3392 if(VOS_STATUS_SUCCESS != status)
3393 {
3394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003395 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003397 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3399 return ;
3400}
Jeff Johnson295189b2012-06-20 16:38:30 -07003401/*
3402 * FUNCTION: WDA_ProcessFinshScanReq
3403 * Trigger Finish SCAN in WDI
3404 */
3405VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3406 tFinishScanParams *finishScanParams)
3407{
3408 WDI_Status status = WDI_STATUS_SUCCESS;
3409 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3410 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3411 sizeof(WDI_FinishScanReqParamsType)) ;
3412 tWDA_ReqParams *pWdaParams ;
3413 tANI_U8 i = 0;
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 if(NULL == wdiFinishScanParams)
3417 {
3418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 VOS_ASSERT(0);
3421 return VOS_STATUS_E_NOMEM;
3422 }
3423 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3424 if(NULL == pWdaParams)
3425 {
3426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003428 VOS_ASSERT(0);
3429 vos_mem_free(wdiFinishScanParams);
3430 return VOS_STATUS_E_NOMEM;
3431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 /* Copy init Scan params to WDI structure */
3433 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3434 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3435 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3437 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3438 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3439 finishScanParams->frameLength ;
3440 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3441 finishScanParams->currentOperChannel ;
3442 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3443 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3444 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3446 {
3447 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3448 finishScanParams->scanEntry.bssIdx[i] ;
3449 }
3450
3451
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 /* if Frame length, copy macMgmtHdr ro WDI structure */
3453 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3454 {
3455 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3456 &finishScanParams->macMgmtHdr,
3457 sizeof(WDI_MacMgmtHdr)) ;
3458 }
3459 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 /* Store Init Req pointer, as this will be used for response */
3461 /* store Params pass it to WDI */
3462 pWdaParams->pWdaContext = pWDA;
3463 pWdaParams->wdaMsgParam = finishScanParams;
3464 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 /* call DAL API to pass init scan request to DAL */
3466 status = WDI_FinishScanReq(wdiFinishScanParams,
3467 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003468
Jeff Johnson295189b2012-06-20 16:38:30 -07003469
3470 /*
3471 * WDI API returns failure..
3472 */
3473 if(IS_WDI_STATUS_FAILURE( status))
3474 {
3475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3476 "Failure in Finish Scan WDI API, free all the memory " );
3477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3478 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 finishScanParams->status = eSIR_FAILURE ;
3480 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 return CONVERT_WDI2VOS_STATUS(status) ;
3483}
Jeff Johnson295189b2012-06-20 16:38:30 -07003484/*---------------------------------------------------------------------
3485 * ASSOC API's
3486 *---------------------------------------------------------------------
3487 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003488/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303489 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 * Trigger Init SCAN callback
3491 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303492void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003493{
3494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3495 tWDA_CbContext *pWDA;
3496 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003498 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 if(NULL == pWdaParams)
3500 {
3501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003502 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 VOS_ASSERT(0) ;
3504 return ;
3505 }
3506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3507 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3509 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 /* reset macBSSID */
3511 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 /* reset macSTASelf */
3513 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003514 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 return ;
3517}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303518
3519/*
3520 * FUNCTION: WDA_JoinReqCallback
3521 * Free memory and send SWITCH CHANNEL RSP back to PE.
3522 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3523 */
3524void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3525{
3526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3527 tWDA_CbContext *pWDA;
3528 tSwitchChannelParams *joinReqParam;
3529
3530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3531 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3532
3533 if(NULL == pWdaParams)
3534 {
3535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3536 "%s: pWdaParams received NULL", __func__);
3537 VOS_ASSERT(0);
3538 return;
3539 }
3540
3541 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3542 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3543 joinReqParam->status = wdiStatus;
3544
3545 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3546 {
3547 /* reset macBSSID */
3548 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3549 /* reset macSTASelf */
3550 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3551
3552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3553 vos_mem_free(pWdaParams);
3554 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3555 }
3556
3557 return;
3558}
3559
Jeff Johnson295189b2012-06-20 16:38:30 -07003560/*
3561 * FUNCTION: WDA_ProcessJoinReq
3562 * Trigger Join REQ in WDI
3563 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003564VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3565 tSwitchChannelParams* joinReqParam)
3566{
3567 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 WDI_JoinReqParamsType *wdiJoinReqParam =
3569 (WDI_JoinReqParamsType *)vos_mem_malloc(
3570 sizeof(WDI_JoinReqParamsType)) ;
3571 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 if(NULL == wdiJoinReqParam)
3575 {
3576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003579 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 return VOS_STATUS_E_NOMEM;
3581 }
3582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3583 if(NULL == pWdaParams)
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0);
3588 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003589 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 return VOS_STATUS_E_NOMEM;
3591 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003592
3593 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3594 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3595 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3596 {
3597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3598 "%s: received join request when BSSID or self-STA is NULL "
3599 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003600 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003601 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3602 VOS_ASSERT(0);
3603 vos_mem_free(wdiJoinReqParam);
3604 vos_mem_free(pWdaParams);
3605 joinReqParam->status = eSIR_FAILURE ;
3606 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3607 return VOS_STATUS_E_INVAL;
3608 }
3609
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 /* copy the BSSID for pWDA */
3611 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3612 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3614 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3616 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003617#ifdef WLAN_FEATURE_VOWIFI
3618 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3619 joinReqParam->maxTxPower ;
3620#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3622 joinReqParam->localPowerConstraint ;
3623#endif
3624 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3625 joinReqParam->secondaryChannelOffset ;
3626 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3627
Sachin Ahuja935eda782014-07-30 14:57:41 +05303628 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3629 wdiJoinReqParam->pUserData = pWdaParams;
3630
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 /* Store Init Req pointer, as this will be used for response */
3632 /* store Params pass it to WDI */
3633 pWdaParams->pWdaContext = pWDA;
3634 pWdaParams->wdaMsgParam = joinReqParam;
3635 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003636 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303637 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 if(IS_WDI_STATUS_FAILURE(status))
3639 {
3640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3641 "Failure in Join WDI API, free all the memory " );
3642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3643 vos_mem_free(pWdaParams) ;
3644 joinReqParam->status = eSIR_FAILURE ;
3645 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 return CONVERT_WDI2VOS_STATUS(status) ;
3648}
Jeff Johnson295189b2012-06-20 16:38:30 -07003649/*
3650 * FUNCTION: WDA_SwitchChannelReqCallback
3651 * send Switch channel RSP back to PE
3652 */
3653void WDA_SwitchChannelReqCallback(
3654 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3655{
3656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3657 tWDA_CbContext *pWDA;
3658 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003660 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 if(NULL == pWdaParams)
3662 {
3663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003664 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 VOS_ASSERT(0) ;
3666 return ;
3667 }
3668 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3669 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3670
3671#ifdef WLAN_FEATURE_VOWIFI
3672 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3673#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3675 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003677 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 return ;
3680}
Jeff Johnson295189b2012-06-20 16:38:30 -07003681/*
3682 * FUNCTION: WDA_ProcessChannelSwitchReq
3683 * Request to WDI to switch channel REQ params.
3684 */
3685VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3686 tSwitchChannelParams *pSwitchChanParams)
3687{
3688 WDI_Status status = WDI_STATUS_SUCCESS ;
3689 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3690 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3691 sizeof(WDI_SwitchChReqParamsType)) ;
3692 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003694 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 if(NULL == wdiSwitchChanParam)
3696 {
3697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003698 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 VOS_ASSERT(0);
3700 return VOS_STATUS_E_NOMEM;
3701 }
3702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3703 if(NULL == pWdaParams)
3704 {
3705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 VOS_ASSERT(0);
3708 vos_mem_free(wdiSwitchChanParam);
3709 return VOS_STATUS_E_NOMEM;
3710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3712#ifndef WLAN_FEATURE_VOWIFI
3713 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3714 pSwitchChanParams->localPowerConstraint;
3715#endif
3716 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3717 pSwitchChanParams->secondaryChannelOffset;
3718 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 /* Store req pointer, as this will be used for response */
3720 /* store Params pass it to WDI */
3721 pWdaParams->pWdaContext = pWDA;
3722 pWdaParams->wdaMsgParam = pSwitchChanParams;
3723 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003724#ifdef WLAN_FEATURE_VOWIFI
3725 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3726 = pSwitchChanParams->maxTxPower;
3727 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3728 pSwitchChanParams ->selfStaMacAddr,
3729 sizeof(tSirMacAddr));
3730#endif
3731 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3732 pSwitchChanParams->bssId,
3733 sizeof(tSirMacAddr));
3734
3735 status = WDI_SwitchChReq(wdiSwitchChanParam,
3736 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003737 if(IS_WDI_STATUS_FAILURE(status))
3738 {
3739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3740 "Failure in process channel switch Req WDI API, free all the memory " );
3741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3742 vos_mem_free(pWdaParams) ;
3743 pSwitchChanParams->status = eSIR_FAILURE ;
3744 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003746 return CONVERT_WDI2VOS_STATUS(status) ;
3747}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003748
3749/*
3750 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3751 * send Switch channel RSP back to PE
3752 */
3753void WDA_SwitchChannelReqCallback_V1(
3754 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3755 void* pUserData)
3756{
3757 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3758 tWDA_CbContext *pWDA;
3759 tSwitchChannelParams *pSwitchChanParams;
3760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3761 "<------ %s " ,__func__);
3762
3763 if (NULL == pWdaParams)
3764 {
3765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3766 "%s: pWdaParams received NULL", __func__);
3767 VOS_ASSERT(0);
3768 return ;
3769 }
3770 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3771 pSwitchChanParams =
3772 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3773 pSwitchChanParams->channelSwitchSrc =
3774 wdiSwitchChanRsp->channelSwitchSrc;
3775#ifdef WLAN_FEATURE_VOWIFI
3776 pSwitchChanParams->txMgmtPower =
3777 wdiSwitchChanRsp->ucTxMgmtPower;
3778#endif
3779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3780 vos_mem_free(pWdaParams);
3781 pSwitchChanParams->status =
3782 wdiSwitchChanRsp->wdiStatus ;
3783 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3784 (void *)pSwitchChanParams , 0);
3785 return;
3786}
3787
3788/*
3789 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3790 * Request to WDI to switch channel REQ params.
3791 */
3792VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3793 tSwitchChannelParams *pSwitchChanParams)
3794{
3795 WDI_Status status = WDI_STATUS_SUCCESS ;
3796 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3797 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3798 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3799 tWDA_ReqParams *pWdaParams ;
3800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3801 "------> %s " ,__func__);
3802 if (NULL == wdiSwitchChanParam)
3803 {
3804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3805 "%s: VOS MEM Alloc Failure", __func__);
3806 VOS_ASSERT(0);
3807 return VOS_STATUS_E_NOMEM;
3808 }
3809 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3810 if (NULL == pWdaParams)
3811 {
3812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3813 "%s: VOS MEM Alloc Failure", __func__);
3814 VOS_ASSERT(0);
3815 vos_mem_free(wdiSwitchChanParam);
3816 return VOS_STATUS_E_NOMEM;
3817 }
3818 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3819 pSwitchChanParams->channelSwitchSrc;
3820
3821 wdiSwitchChanParam->wdiChInfo.ucChannel =
3822 pSwitchChanParams->channelNumber;
3823#ifndef WLAN_FEATURE_VOWIFI
3824 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3825 pSwitchChanParams->localPowerConstraint;
3826#endif
3827 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3828 pSwitchChanParams->secondaryChannelOffset;
3829 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3830 /* Store req pointer, as this will be used for response */
3831 /* store Params pass it to WDI */
3832 pWdaParams->pWdaContext = pWDA;
3833 pWdaParams->wdaMsgParam = pSwitchChanParams;
3834 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3835#ifdef WLAN_FEATURE_VOWIFI
3836 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3837 pSwitchChanParams->maxTxPower;
3838 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3839 pSwitchChanParams ->selfStaMacAddr,
3840 sizeof(tSirMacAddr));
3841#endif
3842 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3843 pSwitchChanParams->bssId,
3844 sizeof(tSirMacAddr));
3845
3846 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3847 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3848 pWdaParams);
3849 if (IS_WDI_STATUS_FAILURE(status))
3850 {
3851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3852 "Failure in process channel switch Req WDI "
3853 "API, free all the memory " );
3854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3855 vos_mem_free(pWdaParams) ;
3856 pSwitchChanParams->status = eSIR_FAILURE ;
3857 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3858 (void *)pSwitchChanParams, 0) ;
3859 }
3860 return CONVERT_WDI2VOS_STATUS(status) ;
3861}
3862
Jeff Johnson295189b2012-06-20 16:38:30 -07003863/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303864 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003865 * config BSS Req Callback, called by WDI
3866 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303867void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 ,void* pUserData)
3869{
3870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3871 tWDA_CbContext *pWDA;
3872 tAddBssParams *configBssReqParam;
3873 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003875 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 if(NULL == pWdaParams)
3877 {
3878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003879 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 VOS_ASSERT(0) ;
3881 return ;
3882 }
3883 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3884 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3885 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003887 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3889 {
3890 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3891 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3893 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3894 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3895
3896 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3897 {
3898 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3899 {
3900 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3901 staConfigBssParam->staType = STA_ENTRY_BSSID;
3902 }
3903 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3904 (staConfigBssParam->staType == STA_ENTRY_SELF))
3905 {
3906 /* This is the 1st add BSS Req for the BTAMP STA */
3907 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3908 staConfigBssParam->staType = STA_ENTRY_BSSID;
3909 }
3910 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3911 (staConfigBssParam->staType == STA_ENTRY_PEER))
3912 {
3913 /* This is the 2nd ADD BSS Request that is sent
3914 * on the BTAMP STA side. The Sta type is
3915 * set to STA_ENTRY_PEER here.*/
3916 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3917 }
3918 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3919 (staConfigBssParam->staType == STA_ENTRY_SELF))
3920 {
3921 /* statype is already set by PE.
3922 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3923 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3924 staConfigBssParam->staType = STA_ENTRY_BSSID;
3925 }
3926 else
3927 {
3928 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3929 staConfigBssParam->staType = STA_ENTRY_PEER;
3930 }
3931 }
3932 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3933 {
3934 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3935 staConfigBssParam->staType = STA_ENTRY_SELF;
3936 }
3937 else
3938 {
3939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3940 "Invalid operation mode specified");
3941 VOS_ASSERT(0);
3942 }
3943
3944 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3949 sizeof(tSirMacAddr));
3950 staConfigBssParam->txChannelWidthSet =
3951 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3953 staConfigBssParam->htCapable)
3954 {
3955 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3956 wdiConfigBssRsp->ucBSSIdx;
3957 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3958 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303959 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3960 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3963 wdiConfigBssRsp->ucBSSIdx,
3964 wdiConfigBssRsp->ucSTAIdx))
3965 {
3966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003967 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 VOS_ASSERT(0) ;
3969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3971 {
3972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003973 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 VOS_ASSERT(0) ;
3975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003976#ifdef WLAN_FEATURE_VOWIFI
3977 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3978#endif
3979 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303980 else
3981 {
3982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3983 "%s: Failure with status %d", __func__,
3984 wdiConfigBssRsp->wdiStatus);
3985 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3986 WLAN_LOG_INDICATOR_HOST_DRIVER,
3987 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3988 FALSE, TRUE);
3989 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303990 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3991 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3993 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 return ;
3996}
Jeff Johnson295189b2012-06-20 16:38:30 -07003997/*
3998 * FUNCTION: WDA_UpdateEdcaParamsForAC
3999 * Update WDI EDCA params with PE edca params
4000 */
4001void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4002 WDI_EdcaParamRecord *wdiEdcaParam,
4003 tSirMacEdcaParamRecord *macEdcaParam)
4004{
4005 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4006 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4007 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4008 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4009 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4010 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4011}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304012void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4013 void* pUserData)
4014{
4015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4016 tWDA_CbContext *pWDA;
4017 tAddBssParams *addBssParams;
4018
4019 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4020 "<------ %s, wdiStatus: %d",
4021 __func__, wdiStatus);
4022
4023 if (NULL == pWdaParams)
4024 {
4025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4026 "%s: Invalid pWdaParams pointer", __func__);
4027 VOS_ASSERT(0);
4028 return;
4029 }
4030
4031 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4032 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4033
4034 addBssParams->status = wdiStatus;
4035
4036 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4037 {
4038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4039 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304040 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4041 WLAN_LOG_INDICATOR_HOST_DRIVER,
4042 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4043 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304044 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4045 }
4046
4047 return ;
4048}
4049
Jeff Johnson295189b2012-06-20 16:38:30 -07004050/*
4051 * FUNCTION: WDA_ProcessConfigBssReq
4052 * Configure BSS before starting Assoc with AP
4053 */
4054VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4055 tAddBssParams* configBssReqParam)
4056{
4057 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304058 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004059 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004061 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304062 if (NULL == configBssReqParam)
4063 {
4064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4065 "%s: configBssReqParam is NULL", __func__);
4066 return VOS_STATUS_E_INVAL;
4067 }
4068
4069 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4070 sizeof(WDI_ConfigBSSReqParamsType)) ;
4071
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 if(NULL == wdiConfigBssReqParam)
4073 {
4074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 VOS_ASSERT(0);
4077 return VOS_STATUS_E_NOMEM;
4078 }
4079 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4080 if(NULL == pWdaParams)
4081 {
4082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004083 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004084 VOS_ASSERT(0);
4085 vos_mem_free(wdiConfigBssReqParam);
4086 return VOS_STATUS_E_NOMEM;
4087 }
Kiran4a17ebe2013-01-31 10:43:43 -08004088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4089 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4092 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304093 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4094 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 /* Store Init Req pointer, as this will be used for response */
4096 /* store Params pass it to WDI */
4097 pWdaParams->pWdaContext = pWDA;
4098 pWdaParams->wdaMsgParam = configBssReqParam;
4099 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304101 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 if(IS_WDI_STATUS_FAILURE(status))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4105 "Failure in Config BSS WDI API, free all the memory " );
4106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4107 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 return CONVERT_WDI2VOS_STATUS(status) ;
4112}
Jeff Johnson295189b2012-06-20 16:38:30 -07004113#ifdef ENABLE_HAL_COMBINED_MESSAGES
4114/*
4115 * FUNCTION: WDA_PostAssocReqCallback
4116 * Post ASSOC req callback, send RSP back to PE
4117 */
4118void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4119 void* pUserData)
4120{
4121 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4122 tPostAssocParams *postAssocReqParam =
4123 (tPostAssocParams *)pWDA->wdaMsgParam ;
4124 /*STA context within the BSS Params*/
4125 tAddStaParams *staPostAssocParam =
4126 &postAssocReqParam->addBssParams.staContext ;
4127 /*STA Params for self STA*/
4128 tAddStaParams *selfStaPostAssocParam =
4129 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004131 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004133 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4135 {
4136 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4137 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4138 sizeof(tSirMacAddr)) ;
4139 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4140 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4141 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4143 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304144 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4146 pWDA->wdaWdiApiMsgParam = NULL;
4147 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 return ;
4150}
Jeff Johnson295189b2012-06-20 16:38:30 -07004151/*
4152 * FUNCTION: WDA_ProcessPostAssocReq
4153 * Trigger POST ASSOC processing in WDI
4154 */
4155VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4156 tPostAssocParams *postAssocReqParam)
4157{
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 WDI_Status status = WDI_STATUS_SUCCESS ;
4159
4160 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4161 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4162 sizeof(WDI_PostAssocReqParamsType)) ;
4163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004164 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004165
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 if(NULL == wdiPostAssocReqParam)
4167 {
4168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004169 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 VOS_ASSERT(0);
4171 return VOS_STATUS_E_NOMEM;
4172 }
4173
4174 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4175 {
4176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004177 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 VOS_ASSERT(0);
4179 return VOS_STATUS_E_FAILURE;
4180 }
4181
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 /* update BSS params into WDI structure */
4183 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4184 &postAssocReqParam->addBssParams) ;
4185 /* update STA params into WDI structure */
4186 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4187 &postAssocReqParam->addStaParams) ;
4188
4189 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4190 postAssocReqParam->addBssParams.highPerformance;
4191 WDA_UpdateEdcaParamsForAC(pWDA,
4192 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4193 &postAssocReqParam->addBssParams.acbe);
4194 WDA_UpdateEdcaParamsForAC(pWDA,
4195 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4196 &postAssocReqParam->addBssParams.acbk);
4197 WDA_UpdateEdcaParamsForAC(pWDA,
4198 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4199 &postAssocReqParam->addBssParams.acvi);
4200 WDA_UpdateEdcaParamsForAC(pWDA,
4201 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4202 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 /* Store Init Req pointer, as this will be used for response */
4204 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 /* store Params pass it to WDI */
4206 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004207 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4208 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 if(IS_WDI_STATUS_FAILURE(status))
4210 {
4211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4212 "Failure in Post Assoc WDI API, free all the memory " );
4213 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4214 pWDA->wdaWdiApiMsgParam = NULL;
4215 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 return CONVERT_WDI2VOS_STATUS(status) ;
4220}
4221#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004222/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304223 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 * ADD STA req callback, send RSP back to PE
4225 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304226void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 void* pUserData)
4228{
4229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4230 tWDA_CbContext *pWDA;
4231 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004233 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004234 if(NULL == pWdaParams)
4235 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004237 VOS_ASSERT(0) ;
4238 return ;
4239 }
4240 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4241 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004243 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4245 {
4246 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4247 /*TODO: UMAC structure doesn't have these fields*/
4248 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4249 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4250 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4251 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4252 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4253 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004254#ifdef FEATURE_WLAN_TDLS
4255 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4256 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4257#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004259#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 {
4261 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4262 wdiConfigStaRsp->ucBssIdx;
4263 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4264 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304265 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4266 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 }
4268 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4269 {
4270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004271 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 VOS_ASSERT(0) ;
4273 return ;
4274 }
4275 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304276 else
4277 {
4278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4279 "%s: Failure with status %d", __func__,
4280 wdiConfigStaRsp->wdiStatus);
4281 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4282 WLAN_LOG_INDICATOR_HOST_DRIVER,
4283 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4284 FALSE, TRUE);
4285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4287 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 return ;
4290}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304291void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4292 void* pUserData)
4293{
4294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4295 tWDA_CbContext *pWDA;
4296 tAddStaParams *addStaParams;
4297
4298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4299 "<------ %s, wdiStatus: %d",
4300 __func__, wdiStatus);
4301
4302 if (NULL == pWdaParams)
4303 {
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4305 "%s: Invalid pWdaParams pointer", __func__);
4306 VOS_ASSERT(0);
4307 return;
4308 }
4309
4310 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4311 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4312
4313 addStaParams->status = wdiStatus;
4314
4315 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4316 {
4317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4318 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304319 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4320 WLAN_LOG_INDICATOR_HOST_DRIVER,
4321 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4322 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304323 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4324 }
4325
4326 return ;
4327}
4328
Jeff Johnson295189b2012-06-20 16:38:30 -07004329/*
4330 * FUNCTION: WDA_ConfigStaReq
4331 * Trigger Config STA processing in WDI
4332 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304333VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 tAddStaParams *addStaReqParam)
4335{
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4338 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4339 sizeof(WDI_ConfigSTAReqParamsType)) ;
4340 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004342 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 if(NULL == wdiConfigStaReqParam)
4344 {
4345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 VOS_ASSERT(0);
4348 return VOS_STATUS_E_NOMEM;
4349 }
4350 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4351 if(NULL == pWdaParams)
4352 {
4353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 VOS_ASSERT(0);
4356 vos_mem_free(wdiConfigStaReqParam);
4357 return VOS_STATUS_E_NOMEM;
4358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 /* update STA params into WDI structure */
4361 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4362 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304363 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4364 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 /* Store Init Req pointer, as this will be used for response */
4366 /* store Params pass it to WDI */
4367 pWdaParams->pWdaContext = pWDA;
4368 pWdaParams->wdaMsgParam = addStaReqParam;
4369 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304370
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304372 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 if(IS_WDI_STATUS_FAILURE(status))
4374 {
4375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4376 "Failure in Config STA WDI API, free all the memory " );
4377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4378 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 return CONVERT_WDI2VOS_STATUS(status) ;
4383}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304384
Jeff Johnson295189b2012-06-20 16:38:30 -07004385/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304386 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304388 */
4389void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 void* pUserData)
4391{
4392 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4393 tWDA_CbContext *pWDA;
4394 tDeleteBssParams *delBssReqParam;
4395 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 if(NULL == pWdaParams)
4399 {
4400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004401 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 VOS_ASSERT(0) ;
4403 return ;
4404 }
4405 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4406 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004407 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4409 {
4410 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4411 sizeof(tSirMacAddr)) ;
4412 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304413 else
4414 {
4415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4416 "%s: Failure with status %d", __func__,
4417 wdiDelBssRsp->wdiStatus);
4418 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4419 WLAN_LOG_INDICATOR_HOST_DRIVER,
4420 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4421 FALSE, TRUE);
4422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4424 {
4425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004426 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 VOS_ASSERT(0) ;
4428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4430 {
4431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004432 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004433 VOS_ASSERT(0) ;
4434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4436 {
4437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004438 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 VOS_ASSERT(0) ;
4440 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304441
4442 WLANTL_StartForwarding(staIdx,0,0);
4443
Jeff Johnson295189b2012-06-20 16:38:30 -07004444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4445 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 /* reset the the system role*/
4447 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4448
4449 /* Reset the BA related information */
4450 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4451 {
4452 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4453 {
4454 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4455 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304456 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 /* Reset framesTxed counters here */
4458 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4459 {
4460 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4461 }
4462 }
4463 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304464
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 return ;
4467}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304468void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4469 void* pUserData)
4470{
4471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4472 tWDA_CbContext *pWDA;
4473 tDeleteBssParams *delbssParams;
4474
4475 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4476 "<------ %s, wdiStatus: %d",
4477 __func__, wdiStatus);
4478
4479 if (NULL == pWdaParams)
4480 {
4481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4482 "%s: Invalid pWdaParams pointer", __func__);
4483 VOS_ASSERT(0);
4484 return;
4485 }
4486
4487 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4488 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4489
4490 delbssParams->status = wdiStatus ;
4491
4492 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4493 {
4494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4495 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304496 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4497 WLAN_LOG_INDICATOR_HOST_DRIVER,
4498 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4499 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304500 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4501 }
4502
4503 return ;
4504}
Jeff Johnson295189b2012-06-20 16:38:30 -07004505
Jeff Johnson295189b2012-06-20 16:38:30 -07004506/*
4507 * FUNCTION: WDA_ProcessDelBssReq
4508 * Init DEL BSS req with WDI
4509 */
4510VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4511 tDeleteBssParams *delBssParam)
4512{
4513 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4515 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4516 sizeof(WDI_DelBSSReqParamsType)) ;
4517 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004519 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 if(NULL == wdiDelBssReqParam)
4521 {
4522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 VOS_ASSERT(0);
4525 return VOS_STATUS_E_NOMEM;
4526 }
4527 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4528 if(NULL == pWdaParams)
4529 {
4530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 VOS_ASSERT(0);
4533 vos_mem_free(wdiDelBssReqParam);
4534 return VOS_STATUS_E_NOMEM;
4535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304537 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4538 wdiDelBssReqParam->pUserData = pWdaParams;
4539
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 /* Store Init Req pointer, as this will be used for response */
4541 /* store Params pass it to WDI */
4542 pWdaParams->pWdaContext = pWDA;
4543 pWdaParams->wdaMsgParam = delBssParam;
4544 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304545
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304547 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 if(IS_WDI_STATUS_FAILURE(status))
4549 {
4550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4551 "Failure in Del BSS WDI API, free all the memory " );
4552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4553 vos_mem_free(pWdaParams) ;
4554 delBssParam->status = eSIR_FAILURE ;
4555 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 return CONVERT_WDI2VOS_STATUS(status) ;
4558}
Jeff Johnson295189b2012-06-20 16:38:30 -07004559/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304560 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304562 */
4563void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 void* pUserData)
4565{
4566 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4567 tWDA_CbContext *pWDA;
4568 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004570 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 if(NULL == pWdaParams)
4572 {
4573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004574 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304575 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 return ;
4577 }
4578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4579 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004580 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4582 {
4583 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4584 {
4585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004586 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 VOS_ASSERT(0) ;
4588 }
4589 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304590 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304592 else
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4595 "%s: Failure with status %d", __func__,
4596 wdiDelStaRsp->wdiStatus);
4597 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4598 WLAN_LOG_INDICATOR_HOST_DRIVER,
4599 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4600 FALSE, TRUE);
4601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4603 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 /*Reset the BA information corresponding to this STAIdx */
4605 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4606 WDA_INVALID_STA_INDEX;
4607 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304608 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004610 return ;
4611}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304612void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4613 void* pUserData)
4614{
4615 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4616 tWDA_CbContext *pWDA;
4617 tDeleteStaParams *delStaParams;
4618
4619 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4620 "<------ %s, wdiStatus: %d",
4621 __func__, wdiStatus);
4622
4623 if (NULL == pWdaParams)
4624 {
4625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4626 "%s: Invalid pWdaParams pointer", __func__);
4627 VOS_ASSERT(0);
4628 return;
4629 }
4630
4631 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4632 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4633
4634 delStaParams->status = wdiStatus ;
4635
4636 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4637 {
4638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4639 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304640 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4641 WLAN_LOG_INDICATOR_HOST_DRIVER,
4642 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4643 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304644 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4645 }
4646
4647 return ;
4648}
4649
Jeff Johnson295189b2012-06-20 16:38:30 -07004650/*
4651 * FUNCTION: WDA_ProcessDelStaReq
4652 * Init DEL STA req with WDI
4653 */
4654VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4655 tDeleteStaParams *delStaParam)
4656{
4657 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4659 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4660 sizeof(WDI_DelSTAReqParamsType)) ;
4661 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004663 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 if(NULL == wdiDelStaReqParam)
4665 {
4666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004667 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 VOS_ASSERT(0);
4669 return VOS_STATUS_E_NOMEM;
4670 }
4671 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4672 if(NULL == pWdaParams)
4673 {
4674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 VOS_ASSERT(0);
4677 vos_mem_free(wdiDelStaReqParam);
4678 return VOS_STATUS_E_NOMEM;
4679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304681 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4682 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 /* Store Init Req pointer, as this will be used for response */
4684 /* store Params pass it to WDI */
4685 pWdaParams->pWdaContext = pWDA;
4686 pWdaParams->wdaMsgParam = delStaParam;
4687 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304688
Jeff Johnson295189b2012-06-20 16:38:30 -07004689 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304690 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 if(IS_WDI_STATUS_FAILURE(status))
4692 {
4693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4694 "Failure in Del STA WDI API, free all the memory status = %d",
4695 status );
4696 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4697 vos_mem_free(pWdaParams) ;
4698 delStaParam->status = eSIR_FAILURE ;
4699 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 return CONVERT_WDI2VOS_STATUS(status) ;
4702}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304703void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004704{
4705 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4706 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304707 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004709 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004710 if(NULL == pWdaParams)
4711 {
4712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004713 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 VOS_ASSERT(0) ;
4715 return ;
4716 }
4717 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4718 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4720 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4722 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4723 pwdiAddSTASelfRsp->macSelfSta,
4724 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304725 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4726 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4727 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4728 {
4729 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4730 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4732 "%s: Failure with status %d failcnter %d", __func__,
4733 pwdiAddSTASelfRsp->wdiStatus,
4734 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4735 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4736 WLAN_LOG_INDICATOR_HOST_DRIVER,
4737 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4738 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 return ;
4742}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304743void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4744 void* pUserData)
4745{
4746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4747 tWDA_CbContext *pWDA;
4748 tAddStaSelfParams *addStaSelfParams;
4749
4750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4751 "<------ %s, wdiStatus: %d",
4752 __func__, wdiStatus);
4753
4754 if (NULL == pWdaParams)
4755 {
4756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4757 "%s: Invalid pWdaParams pointer", __func__);
4758 VOS_ASSERT(0);
4759 return;
4760 }
4761
4762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4763 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4764
4765 addStaSelfParams->status = wdiStatus ;
4766
4767 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4768 {
4769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4770 vos_mem_free(pWdaParams) ;
4771 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4772 = WDA_ADDSTA_REQ_WDI_FAIL;
4773 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4775 "%s: Failure with status %d failcnter %d", __func__,
4776 wdiStatus,
4777 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4778 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4779 WLAN_LOG_INDICATOR_HOST_DRIVER,
4780 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4781 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304782 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4783 }
4784
4785 return ;
4786}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304787
Jeff Johnson295189b2012-06-20 16:38:30 -07004788/*
4789 * FUNCTION: WDA_ProcessAddStaSelfReq
4790 *
4791 */
4792VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4793{
4794 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004795 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4797 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4798 sizeof(WDI_AddSTASelfReqParamsType)) ;
4799 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004801 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304802 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 if( NULL == wdiAddStaSelfReq )
4804 {
4805 VOS_ASSERT( 0 );
4806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004807 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304808 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4809 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 return( VOS_STATUS_E_NOMEM );
4811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 if( NULL == pWdaParams )
4814 {
4815 VOS_ASSERT( 0 );
4816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004817 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304818 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4819 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 vos_mem_free(wdiAddStaSelfReq) ;
4821 return( VOS_STATUS_E_NOMEM );
4822 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304823 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4824 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004826 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 /* Store Init Req pointer, as this will be used for response */
4828 /* store Params pass it to WDI */
4829 pWdaParams->pWdaContext = pWDA;
4830 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304831 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4832
4833 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4834 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004835
Jeff Johnson43971f52012-07-17 12:26:56 -07004836 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 {
4838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4839 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004840 wstatus );
4841 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4843 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304844 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4845 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 pAddStaSelfReq->status = eSIR_FAILURE ;
4847 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4848 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004849 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004850}
Jeff Johnson295189b2012-06-20 16:38:30 -07004851/*
4852 * FUNCTION: WDA_DelSTASelfRespCallback
4853 *
4854 */
4855void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4856 wdiDelStaSelfRspParams , void* pUserData)
4857{
4858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4859 tWDA_CbContext *pWDA;
4860 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 if (NULL == pWdaParams)
4864 {
4865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004866 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 VOS_ASSERT(0);
4868 return;
4869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4871 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004873 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004874
4875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4876 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304877 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304878 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4880 "%s: Failure with status %d", __func__,
4881 wdiDelStaSelfRspParams->wdiStatus);
4882 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4883 WLAN_LOG_INDICATOR_HOST_DRIVER,
4884 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4885 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 return ;
4889}
Jeff Johnson295189b2012-06-20 16:38:30 -07004890/*
4891 * FUNCTION: WDA_DelSTASelfReqCallback
4892 *
4893 */
4894void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4895 void* pUserData)
4896{
4897 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4898 tWDA_CbContext *pWDA;
4899 tDelStaSelfParams *delStaSelfParams;
4900
4901 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304902 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004903 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004904
4905 if (NULL == pWdaParams)
4906 {
4907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004908 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 VOS_ASSERT(0);
4910 return;
4911 }
4912
4913 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4914 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4915
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004916 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004917
4918 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4919 {
4920 VOS_ASSERT(0);
4921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4922 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304923 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4924 WLAN_LOG_INDICATOR_HOST_DRIVER,
4925 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4926 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4928 }
4929
4930 return ;
4931}
4932
4933/*
4934 * FUNCTION: WDA_DelSTASelfReq
4935 * Trigger Config STA processing in WDI
4936 */
4937VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4938 tDelStaSelfParams* pDelStaSelfReqParam)
4939{
4940 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004941 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 tWDA_ReqParams *pWdaParams = NULL;
4943 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4944 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4945 sizeof(WDI_DelSTASelfReqParamsType)) ;
4946
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004948 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 if( NULL == wdiDelStaSelfReq )
4950 {
4951 VOS_ASSERT( 0 );
4952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004953 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 return( VOS_STATUS_E_NOMEM );
4955 }
4956
4957 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4958 if( NULL == pWdaParams )
4959 {
4960 VOS_ASSERT( 0 );
4961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004962 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 vos_mem_free(wdiDelStaSelfReq) ;
4964 return( VOS_STATUS_E_NOMEM );
4965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 pWdaParams->pWdaContext = pWDA;
4967 /* Store param pointer as passed in by caller */
4968 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4969 /* store Params pass it to WDI */
4970 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4972 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4973
4974 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4975 wdiDelStaSelfReq->pUserData = pWdaParams;
4976
Jeff Johnson43971f52012-07-17 12:26:56 -07004977 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4979
Jeff Johnson43971f52012-07-17 12:26:56 -07004980 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 {
4982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4983 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4984 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004985 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4987 vos_mem_free(pWdaParams) ;
4988 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4989 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4990 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004991 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992}
4993
Jeff Johnson295189b2012-06-20 16:38:30 -07004994/*
4995 * FUNCTION: WDA_SendMsg
4996 * Send Message back to PE
4997 */
4998void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4999 void *pBodyptr, tANI_U32 bodyVal)
5000{
5001 tSirMsgQ msg = {0} ;
5002 tANI_U32 status = VOS_STATUS_SUCCESS ;
5003 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005004 msg.type = msgType;
5005 msg.bodyval = bodyVal;
5006 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 if (VOS_STATUS_SUCCESS != status)
5009 {
5010 if(NULL != pBodyptr)
5011 {
5012 vos_mem_free(pBodyptr);
5013 }
5014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005015 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 VOS_ASSERT(0) ;
5017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 return ;
5019}
Jeff Johnson295189b2012-06-20 16:38:30 -07005020/*
5021 * FUNCTION: WDA_UpdateBSSParams
5022 * Translated WDA/PE BSS info into WDI BSS info..
5023 */
5024void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5025 WDI_ConfigBSSReqInfoType *wdiBssParams,
5026 tAddBssParams *wdaBssParams)
5027{
5028 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305029 v_U8_t i = 0;
5030
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 /* copy bssReq Params to WDI structure */
5032 vos_mem_copy(wdiBssParams->macBSSID,
5033 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5034 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5035 sizeof(tSirMacAddr)) ;
5036 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5037 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5038 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 wdiBssParams->ucShortSlotTimeSupported =
5040 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5042 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5043 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5044 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5045 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5046
5047 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5048 wdiBssParams->ucTXOPProtectionFullSupport =
5049 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005050 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5051 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5054 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5055 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5056 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5057
Chet Lanctot186b5732013-03-18 10:26:30 -07005058 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5059
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 /* copy SSID into WDI structure */
5061 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5062 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5063 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005064 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5065 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005067#ifdef WLAN_FEATURE_VOWIFI
5068 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5069#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005072#ifdef WLAN_FEATURE_VOWIFI_11R
5073 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 if(wdiBssParams->bExtSetStaKeyParamValid)
5075 {
5076 /* copy set STA key params to WDI structure */
5077 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5078 wdaBssParams->extSetStaKeyParam.staIdx;
5079 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5080 wdaBssParams->extSetStaKeyParam.encType;
5081 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5082 wdaBssParams->extSetStaKeyParam.wepType;
5083 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5084 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005085 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5086 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005087 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5089 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5090 {
5091 WDA_GetWepKeysFromCfg( pWDA,
5092 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5093 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5094 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5095 }
5096 else
5097 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5099 keyIndex++)
5100 {
5101 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5102 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5103 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5104 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5105 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5106 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305107
5108 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5109 {
5110 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5111 {
5112 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5113 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5114 }
5115
5116 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5117 {
5118 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5119 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5120 }
5121 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5122 FL("%s: Negated Keys"), __func__);
5123 }
5124 else
5125 {
5126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5127 FL("%s: No change in Keys "), __func__);
5128 vos_mem_copy(
5129 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5130 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5131 WLAN_MAX_KEY_RSC_LEN);
5132 vos_mem_copy(
5133 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5134 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5135 SIR_MAC_MAX_KEY_LENGTH);
5136 }
5137
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5139 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5140 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5141 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305143 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 }
5146 }
5147 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5148 }
5149 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5150 {
5151 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5152 sizeof(wdaBssParams->extSetStaKeyParam) );
5153 }
5154#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005155#ifdef WLAN_FEATURE_11AC
5156 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5157 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5158#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005159
5160 return ;
5161}
Jeff Johnson295189b2012-06-20 16:38:30 -07005162/*
5163 * FUNCTION: WDA_UpdateSTAParams
5164 * Translated WDA/PE BSS info into WDI BSS info..
5165 */
5166void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5167 WDI_ConfigStaReqInfoType *wdiStaParams,
5168 tAddStaParams *wdaStaParams)
5169{
5170 tANI_U8 i = 0;
5171 /* Update STA params */
5172 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5173 sizeof(tSirMacAddr)) ;
5174 wdiStaParams->usAssocId = wdaStaParams->assocId;
5175 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005176 wdiStaParams->staIdx = wdaStaParams->staIdx;
5177
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 wdiStaParams->ucShortPreambleSupported =
5179 wdaStaParams->shortPreambleSupported;
5180 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5181 sizeof(tSirMacAddr)) ;
5182 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5183
5184 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5185
5186 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5187 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5188 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5189 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5190 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5191 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5192 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5193
5194 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5195 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 wdiStaParams->wdiSupportedRates.opRateMode =
5197 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5199 {
5200 wdiStaParams->wdiSupportedRates.llbRates[i] =
5201 wdaStaParams->supportedRates.llbRates[i];
5202 }
5203 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5204 {
5205 wdiStaParams->wdiSupportedRates.llaRates[i] =
5206 wdaStaParams->supportedRates.llaRates[i];
5207 }
5208 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5209 {
5210 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5211 wdaStaParams->supportedRates.aniLegacyRates[i];
5212 }
5213 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5214 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005215#ifdef WLAN_FEATURE_11AC
5216 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5217 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5218 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5219 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5220#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005221 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5222 {
5223 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5224 wdaStaParams->supportedRates.supportedMCSSet[i];
5225 }
5226 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5227 wdaStaParams->supportedRates.rxHighestDataRate;
5228
5229 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5230
5231 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5232
5233 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5234 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5235 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5236
5237 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5238 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5239 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5240 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005242#ifdef WLAN_FEATURE_11AC
5243 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5244 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005245 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305246 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5247 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5248 * must be set by default */
5249 if ( wdiStaParams->vhtTxMUBformeeCapable )
5250 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005251#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005252 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5253 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 return ;
5255}
Jeff Johnson295189b2012-06-20 16:38:30 -07005256/*
5257 * -------------------------------------------------------------------------
5258 * CFG update to WDI
5259 * -------------------------------------------------------------------------
5260 */
5261
5262 /*
5263 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5264 * Convert the WNI CFG ID to HAL CFG ID
5265 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005266static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005267{
5268 switch(wniCfgId)
5269 {
5270 case WNI_CFG_STA_ID:
5271 return QWLAN_HAL_CFG_STA_ID;
5272 case WNI_CFG_CURRENT_TX_ANTENNA:
5273 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5274 case WNI_CFG_CURRENT_RX_ANTENNA:
5275 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5276 case WNI_CFG_LOW_GAIN_OVERRIDE:
5277 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5278 case WNI_CFG_POWER_STATE_PER_CHAIN:
5279 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5280 case WNI_CFG_CAL_PERIOD:
5281 return QWLAN_HAL_CFG_CAL_PERIOD;
5282 case WNI_CFG_CAL_CONTROL:
5283 return QWLAN_HAL_CFG_CAL_CONTROL;
5284 case WNI_CFG_PROXIMITY:
5285 return QWLAN_HAL_CFG_PROXIMITY;
5286 case WNI_CFG_NETWORK_DENSITY:
5287 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5288 case WNI_CFG_MAX_MEDIUM_TIME:
5289 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5290 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5291 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5292 case WNI_CFG_RTS_THRESHOLD:
5293 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5294 case WNI_CFG_SHORT_RETRY_LIMIT:
5295 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5296 case WNI_CFG_LONG_RETRY_LIMIT:
5297 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5298 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5299 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5300 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5301 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5302 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5303 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5304 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5305 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5306 case WNI_CFG_FIXED_RATE:
5307 return QWLAN_HAL_CFG_FIXED_RATE;
5308 case WNI_CFG_RETRYRATE_POLICY:
5309 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5310 case WNI_CFG_RETRYRATE_SECONDARY:
5311 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5312 case WNI_CFG_RETRYRATE_TERTIARY:
5313 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5314 case WNI_CFG_FORCE_POLICY_PROTECTION:
5315 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5316 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5317 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5318 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5319 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5320 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5321 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5322 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5323 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5324 case WNI_CFG_MAX_BA_SESSIONS:
5325 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5326 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5327 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5328 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5329 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5330 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5331 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5332 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5333 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5334 case WNI_CFG_STATS_PERIOD:
5335 return QWLAN_HAL_CFG_STATS_PERIOD;
5336 case WNI_CFG_CFP_MAX_DURATION:
5337 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5338#if 0 /*This is not part of CFG*/
5339 case WNI_CFG_FRAME_TRANS_ENABLED:
5340 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5341#endif
5342 case WNI_CFG_DTIM_PERIOD:
5343 return QWLAN_HAL_CFG_DTIM_PERIOD;
5344 case WNI_CFG_EDCA_WME_ACBK:
5345 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5346 case WNI_CFG_EDCA_WME_ACBE:
5347 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5348 case WNI_CFG_EDCA_WME_ACVI:
5349 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5350 case WNI_CFG_EDCA_WME_ACVO:
5351 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5352#if 0
5353 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5354 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5355 case WNI_CFG_TELE_BCN_TRANS_LI:
5356 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5357 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5358 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5359 case WNI_CFG_TELE_BCN_MAX_LI:
5360 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5361 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5362 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5363#endif
5364 case WNI_CFG_ENABLE_CLOSE_LOOP:
5365 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005366 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5367 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305368 case WNI_CFG_ENABLE_CONC_BMISS:
5369 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5370 case WNI_CFG_ENABLE_UNITS_BWAIT:
5371 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305372 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5373 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 default:
5375 {
5376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005377 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 wniCfgId);
5379 return VOS_STATUS_E_INVAL;
5380 }
5381 }
5382}
Jeff Johnson295189b2012-06-20 16:38:30 -07005383/*
5384 * FUNCTION: WDA_UpdateCfgCallback
5385 *
5386 */
5387void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5388{
5389 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5390 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5391 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005393 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 /*
5395 * currently there is no response message is expected between PE and
5396 * WDA, Failure return from WDI is a ASSERT condition
5397 */
5398 if(WDI_STATUS_SUCCESS != wdiStatus)
5399 {
5400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005401 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5403 }
5404
5405 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5406 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5407 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 return ;
5409}
Jeff Johnson295189b2012-06-20 16:38:30 -07005410/*
5411 * FUNCTION: WDA_UpdateCfg
5412 *
5413 */
5414VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5415{
5416
5417 WDI_Status status = WDI_STATUS_SUCCESS ;
5418 tANI_U32 val =0;
5419 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5420 tHalCfg *configData;
5421 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5422 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005424 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 if (NULL == pMac )
5426 {
5427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005428 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 return VOS_STATUS_E_FAILURE;
5430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 if(WDA_START_STATE != pWDA->wdaState)
5432 {
5433 return VOS_STATUS_E_FAILURE;
5434 }
5435
5436 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5437 {
5438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005439 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 VOS_ASSERT(0);
5441 return VOS_STATUS_E_FAILURE;
5442 }
5443
5444 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5445 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 if(NULL == wdiCfgReqParam)
5447 {
5448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005449 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005450 VOS_ASSERT(0);
5451 return VOS_STATUS_E_NOMEM;
5452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5454 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 if(NULL == wdiCfgReqParam->pConfigBuffer)
5456 {
5457 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005458 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 vos_mem_free(wdiCfgReqParam);
5460 VOS_ASSERT(0);
5461 return VOS_STATUS_E_NOMEM;
5462 }
5463
5464 /*convert the WNI CFG Id to HAL CFG Id*/
5465 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5466 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5467
5468 /*TODO: revisit this for handling string parameters */
5469 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5470 &val) != eSIR_SUCCESS)
5471 {
5472 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005473 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5475 vos_mem_free(wdiCfgReqParam);
5476 return eSIR_FAILURE;
5477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005478 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5479 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5480 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5481 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5482 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5483
5484 /* store Params pass it to WDI */
5485 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005486#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5487 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5488 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 if(IS_WDI_STATUS_FAILURE(status))
5490 {
5491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5492 "Failure in Update CFG WDI API, free all the memory " );
5493 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5494 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5495 pWDA->wdaWdiCfgApiMsgParam = NULL;
5496 /* Failure is not expected */
5497 VOS_ASSERT(0) ;
5498 }
5499#else
5500 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5501 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5502 pWDA->wdaWdiCfgApiMsgParam = NULL;
5503#endif
5504 return CONVERT_WDI2VOS_STATUS(status) ;
5505}
5506
Jeff Johnson295189b2012-06-20 16:38:30 -07005507VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5508 v_U8_t *pDefaultKeyId,
5509 v_U8_t *pNumKeys,
5510 WDI_KeysType *pWdiKeys )
5511{
5512 v_U32_t i, j, defKeyId = 0;
5513 v_U32_t val = SIR_MAC_KEY_LENGTH;
5514 VOS_STATUS status = WDI_STATUS_SUCCESS;
5515 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 if (NULL == pMac )
5517 {
5518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005519 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 return VOS_STATUS_E_FAILURE;
5521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5523 &defKeyId ))
5524 {
5525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5526 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5527 }
5528
5529 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 /* Need to extract ALL of the configured WEP Keys */
5531 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5532 {
5533 val = SIR_MAC_KEY_LENGTH;
5534 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5535 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5536 pWdiKeys[j].key,
5537 &val ))
5538 {
5539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005540 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 }
5542 else
5543 {
5544 pWdiKeys[j].keyId = (tANI_U8) i;
5545 /*
5546 * Actually, a DC (Don't Care) because
5547 * this is determined (and set) by PE/MLME
5548 */
5549 pWdiKeys[j].unicast = 0;
5550 /*
5551 * Another DC (Don't Care)
5552 */
5553 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5554 /* Another DC (Don't Care). Unused for WEP */
5555 pWdiKeys[j].paeRole = 0;
5556 /* Determined from wlan_cfgGetStr() above.*/
5557 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 j++;
5559 *pNumKeys = (tANI_U8) j;
5560 }
5561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 return status;
5563}
Jeff Johnson295189b2012-06-20 16:38:30 -07005564/*
5565 * FUNCTION: WDA_SetBssKeyReqCallback
5566 * send SET BSS key RSP back to PE
5567 */
5568void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5569{
5570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5571 tWDA_CbContext *pWDA;
5572 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005574 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 if(NULL == pWdaParams)
5576 {
5577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005578 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 VOS_ASSERT(0) ;
5580 return ;
5581 }
5582 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5583 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305584 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5585 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5587 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005588 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 return ;
5591}
Jeff Johnson295189b2012-06-20 16:38:30 -07005592/*
5593 * FUNCTION: WDA_ProcessSetBssKeyReq
5594 * Request to WDI for programming the BSS key( key for
5595 * broadcast/multicast frames Encryption)
5596 */
5597VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5598 tSetBssKeyParams *setBssKeyParams )
5599{
5600 WDI_Status status = WDI_STATUS_SUCCESS ;
5601 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5602 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5603 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5604 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005607 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 if(NULL == wdiSetBssKeyParam)
5609 {
5610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 VOS_ASSERT(0);
5613 return VOS_STATUS_E_NOMEM;
5614 }
5615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5616 if(NULL == pWdaParams)
5617 {
5618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 VOS_ASSERT(0);
5621 vos_mem_free(wdiSetBssKeyParam);
5622 return VOS_STATUS_E_NOMEM;
5623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005624 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 /* copy set BSS params to WDI structure */
5626 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5627 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5628 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 if(setBssKeyParams->encType != eSIR_ED_NONE)
5630 {
5631 if( setBssKeyParams->numKeys == 0 &&
5632 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5633 setBssKeyParams->encType == eSIR_ED_WEP104))
5634 {
5635 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5637 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5638 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5639 }
5640 else
5641 {
5642 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5643 {
5644 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5645 setBssKeyParams->key[keyIndex].keyId;
5646 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5647 setBssKeyParams->key[keyIndex].unicast;
5648 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5649 setBssKeyParams->key[keyIndex].keyDirection;
5650 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5651 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5652 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5653 setBssKeyParams->key[keyIndex].paeRole;
5654 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5655 setBssKeyParams->key[keyIndex].keyLength;
5656 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5657 setBssKeyParams->key[keyIndex].key,
5658 SIR_MAC_MAX_KEY_LENGTH);
5659 }
5660 }
5661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5663 setBssKeyParams->singleTidRc;
5664 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 /* Store set key pointer, as this will be used for response */
5666 /* store Params pass it to WDI */
5667 pWdaParams->pWdaContext = pWDA;
5668 pWdaParams->wdaMsgParam = setBssKeyParams;
5669 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5671 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5672
5673 if(IS_WDI_STATUS_FAILURE(status))
5674 {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5676 "Failure in Set BSS Key Req WDI API, free all the memory " );
5677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5678 vos_mem_free(pWdaParams) ;
5679 setBssKeyParams->status = eSIR_FAILURE ;
5680 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005682 return CONVERT_WDI2VOS_STATUS(status) ;
5683}
Jeff Johnson295189b2012-06-20 16:38:30 -07005684/*
5685 * FUNCTION: WDA_RemoveBssKeyReqCallback
5686 * send SET BSS key RSP back to PE
5687 */
5688void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5689{
5690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5691 tWDA_CbContext *pWDA;
5692 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 if(NULL == pWdaParams)
5696 {
5697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005698 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 VOS_ASSERT(0) ;
5700 return ;
5701 }
5702 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5703 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5705 vos_mem_free(pWdaParams) ;
5706
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005707 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 return ;
5710}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305711
5712/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305713 * FUNCTION: WDA_GetFrameLogRspCallback
5714 * recieves get frame log response from FW
5715 */
5716void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5717 void* pUserData)
5718{
5719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5720 tWDA_CbContext *pWDA = NULL;
5721 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5722
5723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5724 "<------ Entering: %s " ,__func__);
5725 if(NULL == pWdaParams)
5726 {
5727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5728 "%s: pWdaParams received NULL", __func__);
5729 VOS_ASSERT(0) ;
5730 return ;
5731 }
5732
5733 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5734 if (NULL == pWDA)
5735 {
5736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5737 "%s:pWDA is NULL", __func__);
5738 VOS_ASSERT(0);
5739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5740 vos_mem_free(pWdaParams);
5741 return ;
5742 }
5743
5744 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5745 if(NULL == pGetFrameLogReqParams)
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5748 "%s: pGetFrameLogReqParams received NULL", __func__);
5749 VOS_ASSERT(0);
5750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5751 vos_mem_free(pWdaParams);
5752 return;
5753 }
5754
Siddharth Bhal64246172015-02-27 01:04:37 +05305755 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305757 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5758 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305759 }
5760
5761 /* free WDI command buffer only */
5762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5763 vos_mem_free(pWdaParams->wdaMsgParam);
5764 vos_mem_free(pWdaParams);
5765
5766 return ;
5767
5768}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305769
5770/*
5771 * FUNCTION: WDA_RssiMonitorStopRspCallback
5772 * recieves Rssi Monitor stop response from FW
5773 */
5774void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5775 void* pUserData)
5776{
5777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5778 tSirRssiMonitorReq *pRssiMonitorReqParams;
5779
5780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5781 "<------ %s " ,__func__);
5782
5783 if(NULL == pWdaParams)
5784 {
5785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5786 "%s: pWdaParams received NULL", __func__);
5787 VOS_ASSERT(0);
5788 return ;
5789 }
5790
5791 if(NULL == pWdaParams->wdaMsgParam)
5792 {
5793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5794 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5795 VOS_ASSERT(0);
5796 vos_mem_free(pWdaParams);
5797 return ;
5798 }
5799
5800 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5801
5802 if(pRssiMonitorReqParams->rssiMonitorCallback)
5803 {
5804 pRssiMonitorReqParams->rssiMonitorCallback(
5805 pRssiMonitorReqParams->rssiMonitorCbContext,
5806 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5807 }
5808 else
5809 {
5810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5811 "%s: pFWLoggingInitParams callback is NULL", __func__);
5812 }
5813
5814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5815 vos_mem_free(pWdaParams->wdaMsgParam);
5816 vos_mem_free(pWdaParams);
5817
5818 return;
5819}
5820
5821/*
5822 * FUNCTION: WDA_RssiMonitorStartRspCallback
5823 * recieves Rssi Monitor start response from FW
5824 */
5825void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5826 void* pUserData)
5827{
5828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5829 tSirRssiMonitorReq *pRssiMonitorReqParams;
5830
5831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5832 "<------ %s " ,__func__);
5833
5834 if(NULL == pWdaParams)
5835 {
5836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5837 "%s: pWdaParams received NULL", __func__);
5838 VOS_ASSERT(0);
5839 return ;
5840 }
5841
5842 if(NULL == pWdaParams->wdaMsgParam)
5843 {
5844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5845 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5846 VOS_ASSERT(0);
5847 vos_mem_free(pWdaParams);
5848 return ;
5849 }
5850
5851 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5852
5853 if(pRssiMonitorReqParams->rssiMonitorCallback)
5854 {
5855 pRssiMonitorReqParams->rssiMonitorCallback(
5856 pRssiMonitorReqParams->rssiMonitorCbContext,
5857 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5858 }
5859 else
5860 {
5861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5862 "%s: pFWLoggingInitParams callback is NULL", __func__);
5863 }
5864
5865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5866 vos_mem_free(pWdaParams->wdaMsgParam);
5867 vos_mem_free(pWdaParams);
5868
5869 return;
5870}
5871
Siddharth Bhal64246172015-02-27 01:04:37 +05305872/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305873 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305874 * recieves Mgmt Logging init response from FW
5875 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305876void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305877 void* pUserData)
5878{
5879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305880 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305881 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305882
5883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5884 "<------ %s " ,__func__);
5885
5886 if(NULL == pWdaParams)
5887 {
5888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5889 "%s: pWdaParams received NULL", __func__);
5890 VOS_ASSERT(0);
5891 return ;
5892 }
5893
5894 if(NULL == pWdaParams->wdaMsgParam)
5895 {
5896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5897 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5898 VOS_ASSERT(0);
5899 vos_mem_free(pWdaParams);
5900 return ;
5901 }
5902
c_manjeecfd1efb2015-09-25 19:32:34 +05305903 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5904 if(NULL == pWdaParams)
5905 {
5906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5907 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5908 VOS_ASSERT(0);
5909 vos_mem_free(pWdaParams);
5910 return;
5911 }
5912
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305913 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305914 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305915
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305916 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305917 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305918 pFWLoggingInitParams->fwlogInitCallback(
5919 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305920 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305921 }
5922 else
5923 {
5924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305925 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305926 }
5927
c_manjeecfd1efb2015-09-25 19:32:34 +05305928 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5930 vos_mem_free(pWdaParams->wdaMsgParam);
5931 vos_mem_free(pWdaParams);
5932
5933 return;
5934}
5935
5936/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305937 * FUNCTION: WDA_SpoofMacAddrRspCallback
5938 * recieves spoof mac addr response from FW
5939 */
5940void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5941{
5942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5943 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305944
Siddharth Bhal171788a2014-09-29 21:02:40 +05305945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5946 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305947
Siddharth Bhal171788a2014-09-29 21:02:40 +05305948 if(NULL == pWdaParams)
5949 {
5950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5951 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305952 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305953 return ;
5954 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305955 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305956
Siddharth Bhal029d6732014-10-09 21:31:23 +05305957 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305959 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305960 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305961 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5962 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305963
Siddharth Bhal171788a2014-09-29 21:02:40 +05305964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305965 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305966 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305967
5968 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305969}
5970
Jeff Johnson295189b2012-06-20 16:38:30 -07005971/*
5972 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5973 * Request to WDI to remove the BSS key( key for broadcast/multicast
5974 * frames Encryption)
5975 */
5976VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5977 tRemoveBssKeyParams *removeBssKeyParams )
5978{
5979 WDI_Status status = WDI_STATUS_SUCCESS ;
5980 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5981 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5982 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5983 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005985 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 if(NULL == wdiRemoveBssKeyParam)
5987 {
5988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 VOS_ASSERT(0);
5991 return VOS_STATUS_E_NOMEM;
5992 }
5993 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5994 if(NULL == pWdaParams)
5995 {
5996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 VOS_ASSERT(0);
5999 vos_mem_free(wdiRemoveBssKeyParam);
6000 return VOS_STATUS_E_NOMEM;
6001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 /* copy Remove BSS key params to WDI structure*/
6003 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6004 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6005 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6006 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6007 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 /* Store remove key pointer, as this will be used for response */
6009 /* store Params pass it to WDI */
6010 pWdaParams->pWdaContext = pWDA;
6011 pWdaParams->wdaMsgParam = removeBssKeyParams;
6012 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6014 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 if(IS_WDI_STATUS_FAILURE(status))
6016 {
6017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6018 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6020 vos_mem_free(pWdaParams) ;
6021 removeBssKeyParams->status = eSIR_FAILURE ;
6022 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 return CONVERT_WDI2VOS_STATUS(status) ;
6025}
Jeff Johnson295189b2012-06-20 16:38:30 -07006026/*
6027 * FUNCTION: WDA_SetBssKeyReqCallback
6028 * send SET BSS key RSP back to PE
6029 */
6030void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6031{
6032 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6033 tWDA_CbContext *pWDA;
6034 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006036 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 if(NULL == pWdaParams)
6038 {
6039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006040 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006041 VOS_ASSERT(0) ;
6042 return ;
6043 }
6044 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6045 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306046 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6047 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6049 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006050 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 return ;
6053}
Jeff Johnson295189b2012-06-20 16:38:30 -07006054/*
6055 * FUNCTION: WDA_ProcessSetStaKeyReq
6056 * Request to WDI for programming the STA key( key for Unicast frames
6057 * Encryption)
6058 */
6059VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6060 tSetStaKeyParams *setStaKeyParams )
6061{
6062 WDI_Status status = WDI_STATUS_SUCCESS ;
6063 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6064 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6065 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6066 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006069 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 if(NULL == wdiSetStaKeyParam)
6071 {
6072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 VOS_ASSERT(0);
6075 return VOS_STATUS_E_NOMEM;
6076 }
6077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6078 if(NULL == pWdaParams)
6079 {
6080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 VOS_ASSERT(0);
6083 vos_mem_free(wdiSetStaKeyParam);
6084 return VOS_STATUS_E_NOMEM;
6085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 /* copy set STA key params to WDI structure */
6089 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6090 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6091 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6092 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 if(setStaKeyParams->encType != eSIR_ED_NONE)
6094 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006095 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6097 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6098 {
6099 WDA_GetWepKeysFromCfg( pWDA,
6100 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6101 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6102 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6103 }
6104 else
6105 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6107 keyIndex++)
6108 {
6109 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6110 setStaKeyParams->key[keyIndex].keyId;
6111 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6112 setStaKeyParams->key[keyIndex].unicast;
6113 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6114 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6116 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6117 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6118 setStaKeyParams->key[keyIndex].paeRole;
6119 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6120 setStaKeyParams->key[keyIndex].keyLength;
6121 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6122 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6123 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6124 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6125 {
6126 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6127 }
6128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6130 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 }
6132 }
6133 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6134 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 /* Store set key pointer, as this will be used for response */
6136 /* store Params pass it to WDI */
6137 pWdaParams->pWdaContext = pWDA;
6138 pWdaParams->wdaMsgParam = setStaKeyParams;
6139 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6141 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 if(IS_WDI_STATUS_FAILURE(status))
6143 {
6144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6145 "Failure in set STA Key Req WDI API, free all the memory " );
6146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6147 vos_mem_free(pWdaParams) ;
6148 setStaKeyParams->status = eSIR_FAILURE ;
6149 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 return CONVERT_WDI2VOS_STATUS(status) ;
6152}
Jeff Johnson295189b2012-06-20 16:38:30 -07006153/*
6154 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6155 * send SET Bcast STA key RSP back to PE
6156 */
6157void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6158{
6159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6160 tWDA_CbContext *pWDA;
6161 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006163 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 if(NULL == pWdaParams)
6165 {
6166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006167 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006168 VOS_ASSERT(0) ;
6169 return ;
6170 }
6171 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6172 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6174 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006175 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 return ;
6178}
6179
Jeff Johnson295189b2012-06-20 16:38:30 -07006180/*
6181 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6182 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6183 * Encryption)
6184 */
6185VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6186 tSetStaKeyParams *setStaKeyParams )
6187{
6188 WDI_Status status = WDI_STATUS_SUCCESS ;
6189 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6190 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6191 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6192 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006193 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006195 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 if(NULL == wdiSetStaKeyParam)
6197 {
6198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 VOS_ASSERT(0);
6201 return VOS_STATUS_E_NOMEM;
6202 }
6203 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6204 if(NULL == pWdaParams)
6205 {
6206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 VOS_ASSERT(0);
6209 vos_mem_free(wdiSetStaKeyParam);
6210 return VOS_STATUS_E_NOMEM;
6211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 /* copy set STA key params to WDI structure */
6215 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6216 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6217 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6218 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 if(setStaKeyParams->encType != eSIR_ED_NONE)
6220 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6222 keyIndex++)
6223 {
6224 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6225 setStaKeyParams->key[keyIndex].keyId;
6226 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6227 setStaKeyParams->key[keyIndex].unicast;
6228 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6229 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6231 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6232 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6233 setStaKeyParams->key[keyIndex].paeRole;
6234 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6235 setStaKeyParams->key[keyIndex].keyLength;
6236 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6237 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6240 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 }
6242 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 /* Store set key pointer, as this will be used for response */
6244 /* store Params pass it to WDI */
6245 pWdaParams->pWdaContext = pWDA;
6246 pWdaParams->wdaMsgParam = setStaKeyParams;
6247 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6249 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 if(IS_WDI_STATUS_FAILURE(status))
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6253 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6255 vos_mem_free(pWdaParams) ;
6256 setStaKeyParams->status = eSIR_FAILURE ;
6257 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 return CONVERT_WDI2VOS_STATUS(status) ;
6260}
Jeff Johnson295189b2012-06-20 16:38:30 -07006261/*
6262 * FUNCTION: WDA_RemoveStaKeyReqCallback
6263 * send SET BSS key RSP back to PE
6264 */
6265void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6266{
6267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6268 tWDA_CbContext *pWDA;
6269 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006272 if(NULL == pWdaParams)
6273 {
6274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 VOS_ASSERT(0) ;
6277 return ;
6278 }
6279 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6280 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6282 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006283 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 return ;
6286}
6287
Jeff Johnson295189b2012-06-20 16:38:30 -07006288/*
6289 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6290 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6291 */
6292VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6293 tRemoveStaKeyParams *removeStaKeyParams )
6294{
6295 WDI_Status status = WDI_STATUS_SUCCESS ;
6296 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6297 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6298 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6299 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 if(NULL == wdiRemoveStaKeyParam)
6303 {
6304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 VOS_ASSERT(0);
6307 return VOS_STATUS_E_NOMEM;
6308 }
6309 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6310 if(NULL == pWdaParams)
6311 {
6312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 VOS_ASSERT(0);
6315 vos_mem_free(wdiRemoveStaKeyParam);
6316 return VOS_STATUS_E_NOMEM;
6317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 /* copy remove STA key params to WDI structure*/
6319 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6320 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6321 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6322 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6323 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 /* Store remove key pointer, as this will be used for response */
6325 /* store Params pass it to WDI */
6326 pWdaParams->pWdaContext = pWDA;
6327 pWdaParams->wdaMsgParam = removeStaKeyParams;
6328 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6330 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 if(IS_WDI_STATUS_FAILURE(status))
6332 {
6333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6334 "Failure in remove STA Key Req WDI API, free all the memory " );
6335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6336 vos_mem_free(pWdaParams) ;
6337 removeStaKeyParams->status = eSIR_FAILURE ;
6338 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 return CONVERT_WDI2VOS_STATUS(status) ;
6341}
Jeff Johnson295189b2012-06-20 16:38:30 -07006342/*
6343 * FUNCTION: WDA_IsHandleSetLinkStateReq
6344 * Update the WDA state and return the status to handle this message or not
6345 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006346WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6347 tWDA_CbContext *pWDA,
6348 tLinkStateParams *linkStateParams)
6349{
6350 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 switch(linkStateParams->state)
6352 {
6353 case eSIR_LINK_PREASSOC_STATE:
6354 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6355 /*
6356 * set the WDA state to PRE ASSOC
6357 * copy the BSSID into pWDA to use it in join request and return,
6358 * No need to handle these messages.
6359 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006360 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6361 {
6362 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006363 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006364 }
6365 else
6366 {
6367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006368 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006369 VOS_ASSERT(0);
6370 }
6371
6372 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6373 {
6374 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006376 }
6377 else
6378 {
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006380 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006381 VOS_ASSERT(0);
6382 }
6383
Jeff Johnson295189b2012-06-20 16:38:30 -07006384 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6385 *channel and after ) so reset the WDA state to ready when the second
6386 * time UMAC issue the link state with PREASSOC
6387 */
6388 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6389 {
6390 /* RESET WDA state back to WDA_READY_STATE */
6391 pWDA->wdaState = WDA_READY_STATE;
6392 }
6393 else
6394 {
6395 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6396 }
6397 //populate linkState info in WDACbCtxt
6398 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 default:
6401 if(pWDA->wdaState != WDA_READY_STATE)
6402 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006403 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6404 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6405 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6406 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6407 *the ASSERT in WDA_Stop during module unload.*/
6408 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6409 {
6410 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006411 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006412 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006413 else
6414 {
6415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006416 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006417 status = WDA_IGNORE_SET_LINK_STATE;
6418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 }
6420 break;
6421 }
6422
6423 return status;
6424}
Jeff Johnson295189b2012-06-20 16:38:30 -07006425/*
6426 * FUNCTION: WDA_SetLinkStateCallback
6427 * call back function for set link state from WDI
6428 */
6429void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6430{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306431 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 tLinkStateParams *linkStateParams;
6433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006435 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306436 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 {
6438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006439 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 VOS_ASSERT(0) ;
6441 return ;
6442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306444 if (NULL == pWDA)
6445 {
6446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6447 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6449 vos_mem_free(pWdaParams->wdaMsgParam);
6450 vos_mem_free(pWdaParams);
6451
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306452 VOS_ASSERT(0);
6453 return ;
6454 }
6455
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 /*
6458 * In STA mode start the BA activity check timer after association
6459 * and in AP mode start BA activity check timer after BSS start */
6460 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6461 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006462 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6463 ((status == WDI_STATUS_SUCCESS) &&
6464 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 {
6466 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 /*
6470 * No respone required for WDA_SET_LINK_STATE so free the request
6471 * param here
6472 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6474 vos_mem_free(pWdaParams);
6475
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 return ;
6477}
Jeff Johnson295189b2012-06-20 16:38:30 -07006478/*
6479 * FUNCTION: WDA_ProcessSetLinkState
6480 * Request to WDI to set the link status.
6481 */
6482VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6483 tLinkStateParams *linkStateParams)
6484{
6485 WDI_Status status = WDI_STATUS_SUCCESS ;
6486 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6487 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6488 sizeof(WDI_SetLinkReqParamsType)) ;
6489 tWDA_ReqParams *pWdaParams ;
6490 tpAniSirGlobal pMac;
6491 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6492
6493 if(NULL == pMac)
6494 {
6495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006496 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006498 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 return VOS_STATUS_E_FAILURE;
6500 }
6501
6502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 if(NULL == wdiSetLinkStateParam)
6505 {
6506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 VOS_ASSERT(0);
6509 return VOS_STATUS_E_NOMEM;
6510 }
6511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6512 if(NULL == pWdaParams)
6513 {
6514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 VOS_ASSERT(0);
6517 vos_mem_free(wdiSetLinkStateParam);
6518 return VOS_STATUS_E_NOMEM;
6519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 if(WDA_IGNORE_SET_LINK_STATE ==
6521 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6522 {
6523 status = WDI_STATUS_E_FAILURE;
6524 }
6525 else
6526 {
6527 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6528 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6530 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6532 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 pWdaParams->pWdaContext = pWDA;
6534 /* Store remove key pointer, as this will be used for response */
6535 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 /* store Params pass it to WDI */
6537 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6538 /* Stop Timer only other than GO role and concurrent session */
6539 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006540 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6542 {
6543 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6546 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006547 if(IS_WDI_STATUS_FAILURE(status))
6548 {
6549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6550 "Failure in set link state Req WDI API, free all the memory " );
6551 }
6552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006553 if(IS_WDI_STATUS_FAILURE(status))
6554 {
6555 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006556 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 vos_mem_free(pWdaParams);
6558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 return CONVERT_WDI2VOS_STATUS(status) ;
6560}
Jeff Johnson295189b2012-06-20 16:38:30 -07006561/*
6562 * FUNCTION: WDA_GetStatsReqParamsCallback
6563 * send the response to PE with Stats received from WDI
6564 */
6565void WDA_GetStatsReqParamsCallback(
6566 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6567 void* pUserData)
6568{
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306570 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006571
6572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006573 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 pGetPEStatsRspParams =
6575 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6576 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6577
6578 if(NULL == pGetPEStatsRspParams)
6579 {
6580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006582 VOS_ASSERT(0);
6583 return;
6584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306586 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006587 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6588 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006589
6590 //Fill the Session Id Properly in PE
6591 pGetPEStatsRspParams->sessionId = 0;
6592 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006593 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6595 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 vos_mem_copy( pGetPEStatsRspParams + 1,
6597 wdiGetStatsRsp + 1,
6598 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306599
6600 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6601 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6602 vosMsg.bodyval = 0;
6603 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6604 (vos_msg_t*)&vosMsg))
6605 {
6606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6607 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6608 vos_mem_free(pGetPEStatsRspParams);
6609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006610
6611 return;
6612}
6613
Jeff Johnson295189b2012-06-20 16:38:30 -07006614/*
6615 * FUNCTION: WDA_ProcessGetStatsReq
6616 * Request to WDI to get the statistics
6617 */
6618VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6619 tAniGetPEStatsReq *pGetStatsParams)
6620{
6621 WDI_Status status = WDI_STATUS_SUCCESS ;
6622 WDI_GetStatsReqParamsType wdiGetStatsParam;
6623 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306624 vos_msg_t vosMsg;
6625
Jeff Johnson295189b2012-06-20 16:38:30 -07006626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006627 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006628 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6629 pGetStatsParams->staId;
6630 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6631 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 status = WDI_GetStatsReq(&wdiGetStatsParam,
6634 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006635 if(IS_WDI_STATUS_FAILURE(status))
6636 {
6637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6638 "Failure in Get Stats Req WDI API, free all the memory " );
6639 pGetPEStatsRspParams =
6640 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6641 if(NULL == pGetPEStatsRspParams)
6642 {
6643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006646 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006647 return VOS_STATUS_E_NOMEM;
6648 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306649 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006650 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6651 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6652 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306653
6654 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6655 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6656 vosMsg.bodyval = 0;
6657 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6658 (vos_msg_t*)&vosMsg))
6659 {
6660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6661 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6662 vos_mem_free(pGetPEStatsRspParams);
6663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006665 /* Free the request message */
6666 vos_mem_free(pGetStatsParams);
6667 return CONVERT_WDI2VOS_STATUS(status);
6668}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006669
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006670#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006671/*
6672 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6673 * send the response to PE with roam Rssi received from WDI
6674 */
6675void WDA_GetRoamRssiReqParamsCallback(
6676 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6677 void* pUserData)
6678{
6679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6680 tWDA_CbContext *pWDA = NULL;
6681 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6682 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6684 "<------ %s " ,__func__);
6685 if(NULL == pWdaParams)
6686 {
6687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6688 "%s: pWdaParams received NULL", __func__);
6689 VOS_ASSERT(0) ;
6690 return ;
6691 }
6692 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6693 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6694
6695 if(NULL == pGetRoamRssiReqParams)
6696 {
6697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6698 "%s: pGetRoamRssiReqParams received NULL", __func__);
6699 VOS_ASSERT(0);
6700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6701 vos_mem_free(pWdaParams);
6702 return ;
6703 }
6704 pGetRoamRssiRspParams =
6705 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6706
6707 if(NULL == pGetRoamRssiRspParams)
6708 {
6709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6710 "%s: VOS MEM Alloc Failure", __func__);
6711 VOS_ASSERT(0);
6712 return;
6713 }
6714 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6715 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006716 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006717 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6718 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6719
6720 /* Assign get roam rssi req (backup) in to the response */
6721 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6722
6723 /* free WDI command buffer */
6724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6725 vos_mem_free(pWdaParams) ;
6726
6727 /* send response to UMAC*/
6728 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6729
6730 return;
6731}
6732
6733
6734
6735/*
6736 * FUNCTION: WDA_ProcessGetRoamRssiReq
6737 * Request to WDI to get the statistics
6738 */
6739VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6740 tAniGetRssiReq *pGetRoamRssiParams)
6741{
6742 WDI_Status status = WDI_STATUS_SUCCESS ;
6743 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6744 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6745 tWDA_ReqParams *pWdaParams = NULL;
6746
6747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6748 "------> %s " ,__func__);
6749 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6750 pGetRoamRssiParams->staId;
6751 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6752
6753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6754 if(NULL == pWdaParams)
6755 {
6756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6757 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306758 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006759 VOS_ASSERT(0);
6760 return VOS_STATUS_E_NOMEM;
6761 }
6762
6763 /* Store Init Req pointer, as this will be used for response */
6764 pWdaParams->pWdaContext = pWDA;
6765
6766 /* Take Get roam Rssi req backup as it stores the callback to be called after
6767 receiving the response */
6768 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6769 pWdaParams->wdaWdiApiMsgParam = NULL;
6770
6771 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6772 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6773 if(IS_WDI_STATUS_FAILURE(status))
6774 {
6775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6776 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6777 pGetRoamRssiRspParams =
6778 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6779 if(NULL == pGetRoamRssiRspParams)
6780 {
6781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6782 "%s: VOS MEM Alloc Failure", __func__);
6783 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306784 vos_mem_free(pGetRoamRssiParams);
6785 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006786 return VOS_STATUS_E_NOMEM;
6787 }
6788 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6789 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6790 pGetRoamRssiRspParams->rssi = 0;
6791 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6792 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6793 (void *)pGetRoamRssiRspParams, 0) ;
6794 }
6795 return CONVERT_WDI2VOS_STATUS(status);
6796}
6797#endif
6798
6799
Jeff Johnson295189b2012-06-20 16:38:30 -07006800/*
6801 * FUNCTION: WDA_UpdateEDCAParamCallback
6802 * call back function for Update EDCA params from WDI
6803 */
6804void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6805{
6806 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6807 tEdcaParams *pEdcaParams;
6808
6809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006810 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 if(NULL == pWdaParams)
6812 {
6813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006814 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 VOS_ASSERT(0) ;
6816 return ;
6817 }
6818 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6820 vos_mem_free(pWdaParams);
6821 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 return ;
6823}
Jeff Johnson295189b2012-06-20 16:38:30 -07006824/*
6825 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6826 * Request to WDI to Update the EDCA params.
6827 */
6828VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6829 tEdcaParams *pEdcaParams)
6830{
6831 WDI_Status status = WDI_STATUS_SUCCESS ;
6832 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6833 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6834 sizeof(WDI_UpdateEDCAParamsType)) ;
6835 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 if(NULL == wdiEdcaParam)
6839 {
6840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006843 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 return VOS_STATUS_E_NOMEM;
6845 }
6846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6847 if(NULL == pWdaParams)
6848 {
6849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 VOS_ASSERT(0);
6852 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006853 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 return VOS_STATUS_E_NOMEM;
6855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006857 /*
6858 Since firmware is not using highperformance flag, we have removed
6859 this flag from wdiEDCAInfo structure to match sizeof the structure
6860 between host and firmware.In future if we are planning to use
6861 highperformance flag then Please define this flag in wdiEDCAInfo
6862 structure, update it here and send it to firmware. i.e.
6863 Following is the original line which we removed as part of the fix
6864 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6865 pEdcaParams->highPerformance;
6866 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6868 &pEdcaParams->acbe);
6869 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6870 &pEdcaParams->acbk);
6871 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6872 &pEdcaParams->acvi);
6873 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6874 &pEdcaParams->acvo);
6875 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006876 pWdaParams->pWdaContext = pWDA;
6877 /* Store remove key pointer, as this will be used for response */
6878 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006879 /* store Params pass it to WDI */
6880 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6882 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 if(IS_WDI_STATUS_FAILURE(status))
6884 {
6885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6886 "Failure in Update EDCA Params WDI API, free all the memory " );
6887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6888 vos_mem_free(pWdaParams);
6889 vos_mem_free(pEdcaParams);
6890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 return CONVERT_WDI2VOS_STATUS(status) ;
6892}
Jeff Johnson295189b2012-06-20 16:38:30 -07006893/*
6894 * FUNCTION: WDA_AddBAReqCallback
6895 * send ADD BA RSP back to PE
6896 */
6897void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6898 void* pUserData)
6899{
6900 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6901 tWDA_CbContext *pWDA;
6902 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006904 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306905 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 {
6907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006908 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 VOS_ASSERT(0) ;
6910 return ;
6911 }
6912 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306913 if (NULL == pWDA)
6914 {
6915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6916 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6918 vos_mem_free(pWdaParams->wdaMsgParam);
6919 vos_mem_free(pWdaParams);
6920
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306921 VOS_ASSERT(0);
6922 return ;
6923 }
6924
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6927 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006928 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 return ;
6931}
6932
Jeff Johnson295189b2012-06-20 16:38:30 -07006933/*
6934 * FUNCTION: WDA_ProcessAddBAReq
6935 * Request to WDI to Update the ADDBA REQ params.
6936 */
6937VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306938 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006939{
Jeff Johnson43971f52012-07-17 12:26:56 -07006940 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6942 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6943 sizeof(WDI_AddBAReqParamsType)) ;
6944 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006946 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 if(NULL == wdiAddBAReqParam)
6948 {
6949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 VOS_ASSERT(0);
6952 return VOS_STATUS_E_NOMEM;
6953 }
6954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6955 if(NULL == pWdaParams)
6956 {
6957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006959 VOS_ASSERT(0);
6960 vos_mem_free(wdiAddBAReqParam);
6961 return VOS_STATUS_E_NOMEM;
6962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 do
6964 {
6965 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 wdiAddBaInfo->ucSTAIdx = staIdx ;
6967 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306968 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 } while(0) ;
6970 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 pWdaParams->pWdaContext = pWDA;
6972 /* store Params pass it to WDI */
6973 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6974 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006975 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6976 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006977
Jeff Johnson43971f52012-07-17 12:26:56 -07006978 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 {
6980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006981 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6982 status = CONVERT_WDI2VOS_STATUS(wstatus);
6983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 vos_mem_free(pWdaParams);
6985 pAddBAReqParams->status = eSIR_FAILURE;
6986 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6987 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006988 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006989}
Jeff Johnson295189b2012-06-20 16:38:30 -07006990/*
6991 * FUNCTION: WDA_AddBASessionReqCallback
6992 * send ADD BA SESSION RSP back to PE/(or TL)
6993 */
6994void WDA_AddBASessionReqCallback(
6995 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6996{
6997 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306999 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 if(NULL == pWdaParams)
7004 {
7005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 VOS_ASSERT(0) ;
7008 return ;
7009 }
7010 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307011 if (NULL == pWDA)
7012 {
7013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7014 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7016 vos_mem_free(pWdaParams->wdaMsgParam);
7017 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307018 VOS_ASSERT(0);
7019 return ;
7020 }
7021
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 if( NULL == pAddBAReqParams )
7024 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007026 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007027 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7029 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 return ;
7031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7033 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307035 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 * another request to HAL(/WDI) (ADD_BA_REQ)
7037 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 if((VOS_STATUS_SUCCESS ==
7039 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307040 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 {
7042 /* Update TL with BA info received from HAL/WDI */
7043 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7044 wdiAddBaSession->usBaSessionID,
7045 wdiAddBaSession->ucSTAIdx,
7046 wdiAddBaSession->ucBaTID,
7047 wdiAddBaSession->ucBaBufferSize,
7048 wdiAddBaSession->ucWinSize,
7049 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307051 wdiAddBaSession->ucSTAIdx,
7052 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 }
7054 else
7055 {
7056 pAddBAReqParams->status =
7057 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7058
7059 /* Setting Flag to indicate that Set BA is success */
7060 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7061 {
7062 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7063 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7064 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 /*Reset the WDA state to READY */
7069 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 return ;
7071}
7072
Jeff Johnson295189b2012-06-20 16:38:30 -07007073/*
7074 * FUNCTION: WDA_ProcessAddBASessionReq
7075 * Request to WDI to Update the ADDBA REQ params.
7076 */
7077VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7078 tAddBAParams *pAddBAReqParams)
7079{
7080 WDI_Status status = WDI_STATUS_SUCCESS ;
7081 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7082 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7083 sizeof(WDI_AddBASessionReqParamsType)) ;
7084 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007085 WLANTL_STAStateType tlSTAState = 0;
7086
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 if(NULL == wdiAddBASessionReqParam)
7090 {
7091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 VOS_ASSERT(0);
7094 return VOS_STATUS_E_NOMEM;
7095 }
7096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7097 if(NULL == pWdaParams)
7098 {
7099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 VOS_ASSERT(0);
7102 vos_mem_free(wdiAddBASessionReqParam);
7103 return VOS_STATUS_E_NOMEM;
7104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 /*
7106 * Populate ADD BA parameters and pass these paarmeters to WDI.
7107 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7108 * the state to track if these is BA recipient case or BA initiator
7109 * case.
7110 */
7111 do
7112 {
7113 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7114 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7115 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7116 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7117 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7118 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7119 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7122 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7123 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7124 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7125 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307126
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 }while(0) ;
7128 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 pWdaParams->pWdaContext = pWDA;
7130 /* Store ADD BA pointer, as this will be used for response */
7131 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7132 /* store Params pass it to WDI */
7133 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007134
7135 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7136 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7137 */
7138 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7139 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7140 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007142 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007143 status = WDI_STATUS_E_NOT_ALLOWED;
7144 pAddBAReqParams->status =
7145 CONVERT_WDI2SIR_STATUS(status) ;
7146 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7147 /*Reset the WDA state to READY */
7148 pWDA->wdaState = WDA_READY_STATE;
7149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7150 vos_mem_free(pWdaParams);
7151
7152 return CONVERT_WDI2VOS_STATUS(status) ;
7153 }
7154
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7156 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 if(IS_WDI_STATUS_FAILURE(status))
7158 {
7159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007160 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007162 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007163 pAddBAReqParams->status =
7164 CONVERT_WDI2SIR_STATUS(status) ;
7165 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007166 /*Reset the WDA state to READY */
7167 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 vos_mem_free(pWdaParams);
7170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007171 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007172}
Jeff Johnson295189b2012-06-20 16:38:30 -07007173/*
7174 * FUNCTION: WDA_DelBANotifyTL
7175 * send DEL BA IND to TL
7176 */
7177void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7178 tDelBAParams *pDelBAReqParams)
7179{
7180 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7181 //tSirMsgQ msg;
7182 vos_msg_t vosMsg;
7183 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 if(NULL == pDelBAInd)
7185 {
7186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 VOS_ASSERT(0) ;
7189 return;
7190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7192 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7193 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7194 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007195
Jeff Johnson295189b2012-06-20 16:38:30 -07007196
7197 vosMsg.type = WDA_DELETEBA_IND;
7198 vosMsg.bodyptr = pDelBAInd;
7199 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7200 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7201 {
7202 vosStatus = VOS_STATUS_E_BADMSG;
7203 }
7204}
Jeff Johnson295189b2012-06-20 16:38:30 -07007205/*
7206 * FUNCTION: WDA_DelBAReqCallback
7207 * send DEL BA RSP back to PE
7208 */
7209void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7210{
7211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7212 tWDA_CbContext *pWDA;
7213 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007215 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 if(NULL == pWdaParams)
7217 {
7218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007219 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 VOS_ASSERT(0) ;
7221 return ;
7222 }
7223 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307224
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 /* Notify TL about DEL BA in case of recipinet */
7227 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7228 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7229 {
7230 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 /*
7233 * No respone required for WDA_DELBA_IND so just free the request
7234 * param here
7235 */
7236 vos_mem_free(pDelBAReqParams);
7237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7238 vos_mem_free(pWdaParams);
7239 return ;
7240}
7241
Jeff Johnson295189b2012-06-20 16:38:30 -07007242/*
7243 * FUNCTION: WDA_ProcessDelBAReq
7244 * Request to WDI to Update the DELBA REQ params.
7245 */
7246VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7247 tDelBAParams *pDelBAReqParams)
7248{
7249 WDI_Status status = WDI_STATUS_SUCCESS ;
7250 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7251 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7252 sizeof(WDI_DelBAReqParamsType)) ;
7253 tWDA_ReqParams *pWdaParams ;
7254 tANI_U16 staIdx = 0;
7255 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007257 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 if(NULL == wdiDelBAReqParam)
7259 {
7260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 VOS_ASSERT(0);
7263 return VOS_STATUS_E_NOMEM;
7264 }
7265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7266 if(NULL == pWdaParams)
7267 {
7268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 VOS_ASSERT(0);
7271 vos_mem_free(wdiDelBAReqParam);
7272 return VOS_STATUS_E_NOMEM;
7273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7275 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7276 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7277 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007278 pWdaParams->pWdaContext = pWDA;
7279 /* Store DEL BA pointer, as this will be used for response */
7280 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007281 /* store Params pass it to WDI */
7282 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7284 * maintained in WDA, so that WDA can retry for another BA session
7285 */
7286 staIdx = pDelBAReqParams->staIdx;
7287 tid = pDelBAReqParams->baTID;
7288 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 status = WDI_DelBAReq(wdiDelBAReqParam,
7290 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007291 if(IS_WDI_STATUS_FAILURE(status))
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7294 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7296 vos_mem_free(pWdaParams->wdaMsgParam);
7297 vos_mem_free(pWdaParams);
7298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007299 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007300}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007301
7302/*
7303 * FUNCTION: WDA_UpdateChReqCallback
7304 *
7305 */
7306void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7307{
Siddharth Bhala006c122014-05-03 12:13:27 +05307308 tWDA_ReqParams *pWdaParams;
7309 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7310 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7311 WDI_UpdateChannelReqinfoType *pChanInfoType;
7312 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007313
7314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7315 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307316 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007317 {
7318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307319 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007320 VOS_ASSERT(0);
7321 return;
7322 }
7323
Siddharth Bhala006c122014-05-03 12:13:27 +05307324 pWdaParams = (tWDA_ReqParams *)pUserData;
7325 pwdiUpdateChReqParam =
7326 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7327 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7328 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7329 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007330 /*
7331 * currently there is no response message is expected between PE and
7332 * WDA, Failure return from WDI is a ASSERT condition
7333 */
7334 vos_mem_free(pChanInfoType);
7335 vos_mem_free(pChanList);
7336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7337 vos_mem_free(pWdaParams);
7338
7339 return;
7340}
7341
7342/*
7343 * FUNCTION: WDA_ProcessUpdateChannelList
7344 * Request to WDI to Update the ChannelList params.
7345 */
7346VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7347 tSirUpdateChanList *pChanList)
7348{
7349 WDI_Status status = WDI_STATUS_SUCCESS;
7350 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7351 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7352 WDI_UpdateChannelReqinfoType *pChanInfoType;
7353 tWDA_ReqParams *pWdaParams;
7354 wpt_uint8 i;
7355
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7357 "------> %s " ,__func__);
7358 if(NULL == pChanList)
7359 {
7360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7361 "%s: NULL pChanList", __func__);
7362 VOS_ASSERT(0);
7363 return VOS_STATUS_E_INVAL;
7364 }
7365
7366 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7367 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307368 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007369 "Update channel list capability Not Supported");
7370 vos_mem_free(pChanList);
7371 return VOS_STATUS_E_INVAL;
7372 }
7373
7374 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7375 sizeof(WDI_UpdateChReqParamsType));
7376 if(NULL == pwdiUpdateChReqParam)
7377 {
7378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7379 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7380 __func__);
7381 VOS_ASSERT(0);
7382 vos_mem_free(pChanList);
7383 return VOS_STATUS_E_NOMEM;
7384 }
7385 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7386 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7387 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7388 pChanList->numChan);
7389 if(NULL == pChanInfoType)
7390 {
7391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7392 "%s: VOS MEM Alloc Failure", __func__);
7393 VOS_ASSERT(0);
7394 vos_mem_free(pChanList);
7395 vos_mem_free(pwdiUpdateChReqParam);
7396 return VOS_STATUS_E_NOMEM;
7397 }
7398 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7399 * pChanList->numChan);
7400 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7401
7402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7403 if(NULL == pWdaParams)
7404 {
7405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7406 "%s: VOS MEM Alloc Failure", __func__);
7407 VOS_ASSERT(0);
7408 vos_mem_free(pChanList);
7409 vos_mem_free(pChanInfoType);
7410 vos_mem_free(pwdiUpdateChReqParam);
7411 return VOS_STATUS_E_NOMEM;
7412 }
7413 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7414
7415 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7416 {
7417 pChanInfoType->mhz =
7418 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7419
7420 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7421 pChanInfoType->band_center_freq2 = 0;
7422
7423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7424 "chan[%d] = %u", i, pChanInfoType->mhz);
7425 if (pChanList->chanParam[i].dfsSet)
7426 {
7427 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7429 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7430 pChanList->chanParam[i].dfsSet);
7431 }
7432
7433 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7434 {
7435 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7436 }
7437 else
7438 {
7439 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7440 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7441 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7442 }
7443
7444 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7445 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307446 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007447 pChanInfoType++;
7448 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007449 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7450 pWdaParams->pWdaContext = pWDA;
7451 pWdaParams->wdaMsgParam = (void *)pChanList;
7452 /* store Params pass it to WDI */
7453 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7454 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7455 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7456 if(IS_WDI_STATUS_FAILURE(status))
7457 {
7458 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7459 "Failure in Update Channel REQ Params WDI API, free all the memory");
7460 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7461 vos_mem_free(pwdiUpdateChReqParam);
7462 vos_mem_free(pWdaParams->wdaMsgParam);
7463 vos_mem_free(pWdaParams);
7464 }
7465 return CONVERT_WDI2VOS_STATUS(status);
7466}
7467
Jeff Johnson295189b2012-06-20 16:38:30 -07007468/*
7469 * FUNCTION: WDA_AddTSReqCallback
7470 * send ADD TS RSP back to PE
7471 */
7472void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7473{
7474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307475 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 tAddTsParams *pAddTsReqParams;
7477
7478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007479 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 if(NULL == pWdaParams)
7481 {
7482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007483 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 VOS_ASSERT(0) ;
7485 return ;
7486 }
7487 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307488 if (NULL == pWDA)
7489 {
7490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7491 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7493 vos_mem_free(pWdaParams->wdaMsgParam);
7494 vos_mem_free(pWdaParams);
7495
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307496 VOS_ASSERT(0);
7497 return ;
7498 }
7499
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7502 vos_mem_free(pWdaParams);
7503
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007504 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 return ;
7507}
7508
Jeff Johnson295189b2012-06-20 16:38:30 -07007509/*
7510 * FUNCTION: WDA_ProcessAddTSReq
7511 * Request to WDI to Update the ADD TS REQ params.
7512 */
7513VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7514 tAddTsParams *pAddTsReqParams)
7515{
7516 WDI_Status status = WDI_STATUS_SUCCESS ;
7517 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7518 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7519 sizeof(WDI_AddTSReqParamsType)) ;
7520 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007522 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 if(NULL == wdiAddTSReqParam)
7524 {
7525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 VOS_ASSERT(0);
7528 return VOS_STATUS_E_NOMEM;
7529 }
7530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7531 if(NULL == pWdaParams)
7532 {
7533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007534 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 VOS_ASSERT(0);
7536 vos_mem_free(wdiAddTSReqParam);
7537 return VOS_STATUS_E_NOMEM;
7538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7540 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 //TS IE
7542 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7543 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7544 pAddTsReqParams->tspec.length;
7545
7546 //TS IE : TS INFO : TRAFFIC
7547 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7548 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7549 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7550 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7551 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7552 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7553 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7554 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7555 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7556 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7557 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7558 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7559 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7560 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7561 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7562 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7563
7564 //TS IE : TS INFO : SCHEDULE
7565 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7566 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7567 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7568 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007569 //TS IE
7570 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7571 pAddTsReqParams->tspec.nomMsduSz;
7572 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7573 pAddTsReqParams->tspec.maxMsduSz;
7574 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7575 pAddTsReqParams->tspec.minSvcInterval;
7576 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7577 pAddTsReqParams->tspec.maxSvcInterval;
7578 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7579 pAddTsReqParams->tspec.inactInterval;
7580 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7581 pAddTsReqParams->tspec.suspendInterval;
7582 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7583 pAddTsReqParams->tspec.svcStartTime;
7584 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7585 pAddTsReqParams->tspec.minDataRate;
7586 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7587 pAddTsReqParams->tspec.meanDataRate;
7588 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7589 pAddTsReqParams->tspec.peakDataRate;
7590 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7591 pAddTsReqParams->tspec.maxBurstSz;
7592 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7593 pAddTsReqParams->tspec.delayBound;
7594 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7595 pAddTsReqParams->tspec.minPhyRate;
7596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7597 pAddTsReqParams->tspec.surplusBw;
7598 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7599 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007600 /* TODO: tAddTsParams doesn't have the following fields */
7601#if 0
7602 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7603 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7604 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7605 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7606#endif
7607 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7608
7609 pWdaParams->pWdaContext = pWDA;
7610 /* Store ADD TS pointer, as this will be used for response */
7611 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 /* store Params pass it to WDI */
7613 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007614 status = WDI_AddTSReq(wdiAddTSReqParam,
7615 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 if(IS_WDI_STATUS_FAILURE(status))
7617 {
7618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7619 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7621 vos_mem_free(pWdaParams);
7622 pAddTsReqParams->status = eSIR_FAILURE ;
7623 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007626}
7627
Jeff Johnson295189b2012-06-20 16:38:30 -07007628/*
7629 * FUNCTION: WDA_DelTSReqCallback
7630 * send DEL TS RSP back to PE
7631 */
7632void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7633{
7634 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007636 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7638 vos_mem_free(pWdaParams->wdaMsgParam) ;
7639 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007640 /*
7641 * No respone required for WDA_DEL_TS_REQ so just free the request
7642 * param here
7643 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 return ;
7645}
7646
Jeff Johnson295189b2012-06-20 16:38:30 -07007647/*
7648 * FUNCTION: WDA_ProcessDelTSReq
7649 * Request to WDI to Update the DELTS REQ params.
7650 */
7651VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7652 tDelTsParams *pDelTSReqParams)
7653{
7654 WDI_Status status = WDI_STATUS_SUCCESS ;
7655 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7656 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7657 sizeof(WDI_DelTSReqParamsType)) ;
7658 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007660 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 if(NULL == wdiDelTSReqParam)
7662 {
7663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007665 VOS_ASSERT(0);
7666 return VOS_STATUS_E_NOMEM;
7667 }
7668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7669 if(NULL == pWdaParams)
7670 {
7671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 VOS_ASSERT(0);
7674 vos_mem_free(wdiDelTSReqParam);
7675 return VOS_STATUS_E_NOMEM;
7676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7678 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7679 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7680 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7681 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007682 pWdaParams->pWdaContext = pWDA;
7683 /* Store DEL TS pointer, as this will be used for response */
7684 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 /* store Params pass it to WDI */
7686 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 status = WDI_DelTSReq(wdiDelTSReqParam,
7688 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 if(IS_WDI_STATUS_FAILURE(status))
7690 {
7691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7692 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7694 vos_mem_free(pWdaParams->wdaMsgParam);
7695 vos_mem_free(pWdaParams);
7696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007698}
Jeff Johnson295189b2012-06-20 16:38:30 -07007699/*
7700 * FUNCTION: WDA_UpdateBeaconParamsCallback
7701 * Free the memory. No need to send any response to PE in this case
7702 */
7703void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7704{
7705 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007707 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 if(NULL == pWdaParams)
7709 {
7710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007711 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 VOS_ASSERT(0) ;
7713 return ;
7714 }
7715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7716 vos_mem_free(pWdaParams->wdaMsgParam) ;
7717 vos_mem_free(pWdaParams);
7718 /*
7719 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7720 * param here
7721 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007722 return ;
7723}
Jeff Johnson295189b2012-06-20 16:38:30 -07007724/*
7725 * FUNCTION: WDA_ProcessUpdateBeaconParams
7726 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7727 */
7728VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7729 tUpdateBeaconParams *pUpdateBeaconParams)
7730{
7731 WDI_Status status = WDI_STATUS_SUCCESS ;
7732 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7733 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7734 sizeof(WDI_UpdateBeaconParamsType)) ;
7735 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007737 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007738 if(NULL == wdiUpdateBeaconParams)
7739 {
7740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 VOS_ASSERT(0);
7743 return VOS_STATUS_E_NOMEM;
7744 }
7745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7746 if(NULL == pWdaParams)
7747 {
7748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 VOS_ASSERT(0);
7751 vos_mem_free(wdiUpdateBeaconParams);
7752 return VOS_STATUS_E_NOMEM;
7753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7755 pUpdateBeaconParams->bssIdx;
7756 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7757 pUpdateBeaconParams->fShortPreamble;
7758 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7759 pUpdateBeaconParams->fShortSlotTime;
7760 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7761 pUpdateBeaconParams->beaconInterval;
7762 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7763 pUpdateBeaconParams->llaCoexist;
7764 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7765 pUpdateBeaconParams->llbCoexist;
7766 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7767 pUpdateBeaconParams->llgCoexist;
7768 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7769 pUpdateBeaconParams->ht20MhzCoexist;
7770 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7771 pUpdateBeaconParams->llnNonGFCoexist;
7772 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7773 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7774 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7775 pUpdateBeaconParams->fRIFSMode;
7776 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7777 pUpdateBeaconParams->paramChangeBitmap;
7778 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7779
7780 pWdaParams->pWdaContext = pWDA;
7781 /* Store UpdateBeacon Req pointer, as this will be used for response */
7782 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 /* store Params pass it to WDI */
7784 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7786 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7787 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 if(IS_WDI_STATUS_FAILURE(status))
7789 {
7790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7791 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7793 vos_mem_free(pWdaParams->wdaMsgParam);
7794 vos_mem_free(pWdaParams);
7795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007797}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007798#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007799/*
7800 * FUNCTION: WDA_TSMStatsReqCallback
7801 * send TSM Stats RSP back to PE
7802 */
7803void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7804{
7805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7806 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007807 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7808 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007809
7810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007811 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 if(NULL == pWdaParams)
7813 {
7814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007815 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007816 VOS_ASSERT(0) ;
7817 return ;
7818 }
7819 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307820 if (NULL == pWDA)
7821 {
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7823 "%s:pWDA is NULL", __func__);
7824 VOS_ASSERT(0);
7825 return ;
7826 }
7827
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007828 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7829
7830 if(NULL == pGetTsmStatsReqParams)
7831 {
7832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7833 "%s: pGetTsmStatsReqParams received NULL", __func__);
7834 VOS_ASSERT(0);
7835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7836 vos_mem_free(pWdaParams);
7837 return;
7838 }
7839
7840 pTsmRspParams =
7841 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 if( NULL == pTsmRspParams )
7843 {
7844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007845 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 VOS_ASSERT( 0 );
7847 return ;
7848 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007849 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7850 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7851 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7852
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7854 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7855 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7856 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7857 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7858 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7859 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7860 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7861 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7862 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007863
7864 /* Assign get tsm stats req req (backup) in to the response */
7865 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7866
7867 /* free WDI command buffer */
7868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7869 vos_mem_free(pWdaParams);
7870
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007872 return ;
7873}
7874
7875
Jeff Johnson295189b2012-06-20 16:38:30 -07007876/*
7877 * FUNCTION: WDA_ProcessTsmStatsReq
7878 * Request to WDI to get the TSM Stats params.
7879 */
7880VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007881 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007882{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007883 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007884 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007885 tWDA_ReqParams *pWdaParams = NULL;
7886 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7887
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007889 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7891 sizeof(WDI_TSMStatsReqParamsType));
7892 if(NULL == wdiTSMReqParam)
7893 {
7894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 VOS_ASSERT(0);
7897 return VOS_STATUS_E_NOMEM;
7898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7900 if(NULL == pWdaParams)
7901 {
7902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 VOS_ASSERT(0);
7905 vos_mem_free(wdiTSMReqParam);
7906 return VOS_STATUS_E_NOMEM;
7907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007908 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7909 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7910 pTsmStats->bssId,
7911 sizeof(wpt_macAddr));
7912 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7913
7914 pWdaParams->pWdaContext = pWDA;
7915 /* Store TSM Stats pointer, as this will be used for response */
7916 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007917 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 status = WDI_TSMStatsReq(wdiTSMReqParam,
7919 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 if(IS_WDI_STATUS_FAILURE(status))
7921 {
7922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7923 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007924 vos_mem_free(pWdaParams);
7925
7926 pGetTsmStatsRspParams =
7927 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7928 if(NULL == pGetTsmStatsRspParams)
7929 {
7930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7931 "%s: VOS MEM Alloc Failure", __func__);
7932 VOS_ASSERT(0);
7933 vos_mem_free(pTsmStats);
7934 return VOS_STATUS_E_NOMEM;
7935 }
7936 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7937 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7938 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7939
7940 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 return CONVERT_WDI2VOS_STATUS(status) ;
7943}
7944#endif
7945/*
7946 * FUNCTION: WDA_SendBeaconParamsCallback
7947 * No need to send any response to PE in this case
7948 */
7949void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7950{
7951
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 return ;
7955}
Jeff Johnson295189b2012-06-20 16:38:30 -07007956/*
7957 * FUNCTION: WDA_ProcessSendBeacon
7958 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7959 * start beacon trasmission
7960 */
7961VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7962 tSendbeaconParams *pSendbeaconParams)
7963{
7964 WDI_Status status = WDI_STATUS_SUCCESS ;
7965 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007967 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7969 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7970 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7971 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007972 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7973 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307974 /* p2pIeOffset should be atleast greater than timIeOffset */
7975 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7976 (pSendbeaconParams->p2pIeOffset <
7977 pSendbeaconParams->timIeOffset))
7978 {
7979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7980 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307981 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307982 VOS_ASSERT( 0 );
7983 return WDI_STATUS_E_FAILURE;
7984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7986 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007987 /* Copy the beacon template to local buffer */
7988 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7989 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7990 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7991
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7993 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 if(IS_WDI_STATUS_FAILURE(status))
7995 {
7996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7997 "Failure in SEND BEACON REQ Params WDI API" );
7998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 vos_mem_free(pSendbeaconParams);
8000 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008001}
Jeff Johnson295189b2012-06-20 16:38:30 -07008002/*
8003 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8004 * No need to send any response to PE in this case
8005 */
8006void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8007{
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008009 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 return ;
8011}
8012
Jeff Johnson295189b2012-06-20 16:38:30 -07008013/*
8014 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8015 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8016 * send probe response
8017 */
8018VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8019 tSendProbeRespParams *pSendProbeRspParams)
8020{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008021 WDI_Status status = WDI_STATUS_SUCCESS;
8022 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8023 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008025 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008026
8027 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308028 {
8029 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008030 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308031 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008032
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008034 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008036 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 /* Copy the Probe Response template to local buffer */
8039 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008040 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 pSendProbeRspParams->pProbeRespTemplate,
8042 pSendProbeRspParams->probeRespTemplateLen);
8043 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008044 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8046 WDI_PROBE_REQ_BITMAP_IE_LEN);
8047
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008048 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008049
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008050 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 if(IS_WDI_STATUS_FAILURE(status))
8053 {
8054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8055 "Failure in SEND Probe RSP Params WDI API" );
8056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008058 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008060}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008061#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008062/*
8063 * FUNCTION: WDA_SetMaxTxPowerCallBack
8064 * send the response to PE with power value received from WDI
8065 */
8066void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8067 void* pUserData)
8068{
8069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8070 tWDA_CbContext *pWDA = NULL;
8071 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8072
8073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008074 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 if(NULL == pWdaParams)
8076 {
8077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008078 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 VOS_ASSERT(0) ;
8080 return ;
8081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308083 if (NULL == pWDA)
8084 {
8085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8086 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8088 vos_mem_free(pWdaParams->wdaMsgParam);
8089 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308090 VOS_ASSERT(0);
8091 return ;
8092 }
8093
Jeff Johnson295189b2012-06-20 16:38:30 -07008094 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 if( NULL == pMaxTxPowerParams )
8096 {
8097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008098 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008099 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8101 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 return ;
8103 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008104
Jeff Johnson295189b2012-06-20 16:38:30 -07008105
8106 /*need to free memory for the pointers used in the
8107 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8109 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008111
Jeff Johnson295189b2012-06-20 16:38:30 -07008112
8113 /* send response to UMAC*/
8114 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8115
8116 return;
8117}
Jeff Johnson295189b2012-06-20 16:38:30 -07008118/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008119 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 * Request to WDI to send set Max Tx Power Request
8121 */
8122 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8123 tMaxTxPowerParams *MaxTxPowerParams)
8124{
8125 WDI_Status status = WDI_STATUS_SUCCESS;
8126 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8127 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008128
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008130 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008131
Jeff Johnson295189b2012-06-20 16:38:30 -07008132 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8133 sizeof(WDI_SetMaxTxPowerParamsType));
8134 if(NULL == wdiSetMaxTxPowerParams)
8135 {
8136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008138 VOS_ASSERT(0);
8139 return VOS_STATUS_E_NOMEM;
8140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8142 if(NULL == pWdaParams)
8143 {
8144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 vos_mem_free(wdiSetMaxTxPowerParams);
8147 VOS_ASSERT(0);
8148 return VOS_STATUS_E_NOMEM;
8149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 /* Copy.Max.Tx.Power Params to WDI structure */
8151 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8152 MaxTxPowerParams->bssId,
8153 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8155 MaxTxPowerParams->selfStaMacAddr,
8156 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8158 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008159 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 pWdaParams->pWdaContext = pWDA;
8161 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 /* store Params pass it to WDI */
8163 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8165 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 if(IS_WDI_STATUS_FAILURE(status))
8167 {
8168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8169 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8171 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008172 /* send response to UMAC*/
8173 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 }
8175 return CONVERT_WDI2VOS_STATUS(status);
8176
8177}
Jeff Johnson295189b2012-06-20 16:38:30 -07008178#endif
schang86c22c42013-03-13 18:41:24 -07008179
8180/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008181 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8182 * send the response to PE with power value received from WDI
8183 */
8184void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8185 *pwdiSetMaxTxPowerPerBandRsp,
8186 void* pUserData)
8187{
8188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8189 tWDA_CbContext *pWDA = NULL;
8190 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8191
8192 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8193 "<------ %s ", __func__);
8194 if (NULL == pWdaParams)
8195 {
8196 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8197 "%s: pWdaParams received NULL", __func__);
8198 VOS_ASSERT(0);
8199 return ;
8200 }
8201 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308202 if (NULL == pWDA)
8203 {
8204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8205 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8207 vos_mem_free(pWdaParams->wdaMsgParam);
8208 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308209 VOS_ASSERT(0);
8210 return ;
8211 }
8212
Arif Hussaina5ebce02013-08-09 15:09:58 -07008213 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8214 if ( NULL == pMxTxPwrPerBandParams )
8215 {
8216 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8217 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8218 VOS_ASSERT(0);
8219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8220 vos_mem_free(pWdaParams);
8221 return;
8222 }
8223
8224 /*need to free memory for the pointers used in the
8225 WDA Process.Set Max Tx Power Req function*/
8226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8227 vos_mem_free(pWdaParams);
8228 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8229
8230 /* send response to UMAC*/
8231 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8232 pMxTxPwrPerBandParams, 0);
8233
8234 return;
8235}
8236
8237/*
8238 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8239 * Request to WDI to send set Max Tx Power Per band Request
8240 */
8241 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8242 tMaxTxPowerPerBandParams
8243 *MaxTxPowerPerBandParams)
8244{
8245 WDI_Status status = WDI_STATUS_SUCCESS;
8246 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8247 tWDA_ReqParams *pWdaParams = NULL;
8248
8249 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8250 "------> %s ", __func__);
8251
8252 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8253 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8254
8255 if (NULL == wdiSetMxTxPwrPerBandParams)
8256 {
8257 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8258 "%s: VOS MEM Alloc Failure", __func__);
8259 VOS_ASSERT(0);
8260 return VOS_STATUS_E_NOMEM;
8261 }
8262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8263 if (NULL == pWdaParams)
8264 {
8265 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8266 "%s: VOS MEM Alloc Failure", __func__);
8267 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8268 VOS_ASSERT(0);
8269 return VOS_STATUS_E_NOMEM;
8270 }
8271 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8272 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8273 MaxTxPowerPerBandParams->bandInfo;
8274 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8275 MaxTxPowerPerBandParams->power;
8276 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8277 pWdaParams->pWdaContext = pWDA;
8278 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8279 /* store Params pass it to WDI */
8280 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8281 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8282 WDA_SetMaxTxPowerPerBandCallBack,
8283 pWdaParams);
8284 if (IS_WDI_STATUS_FAILURE(status))
8285 {
8286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8287 "Failure in SET MAX TX Power REQ Params WDI API,"
8288 " free all the memory");
8289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8290 vos_mem_free(pWdaParams);
8291 /* send response to UMAC*/
8292 WDA_SendMsg(pWDA,
8293 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8294 MaxTxPowerPerBandParams, 0);
8295 }
8296 return CONVERT_WDI2VOS_STATUS(status);
8297}
8298
8299/*
schang86c22c42013-03-13 18:41:24 -07008300 * FUNCTION: WDA_SetTxPowerCallBack
8301 * send the response to PE with power value received from WDI
8302 */
8303void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8304 void* pUserData)
8305{
8306 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8307 tWDA_CbContext *pWDA = NULL;
8308 tSirSetTxPowerReq *pTxPowerParams = NULL;
8309
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8311 "<------ %s ", __func__);
8312 if(NULL == pWdaParams)
8313 {
8314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8315 "%s: pWdaParams received NULL", __func__);
8316 VOS_ASSERT(0) ;
8317 return ;
8318 }
8319 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308320 if (NULL == pWDA)
8321 {
8322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8323 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8325 vos_mem_free(pWdaParams->wdaMsgParam);
8326 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308327 VOS_ASSERT(0);
8328 return ;
8329 }
8330
schang86c22c42013-03-13 18:41:24 -07008331 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8332 if(NULL == pTxPowerParams)
8333 {
8334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8335 "%s: pTxPowerParams received NULL " ,__func__);
8336 VOS_ASSERT(0);
8337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8338 vos_mem_free(pWdaParams);
8339 return ;
8340 }
8341
8342 /*need to free memory for the pointers used in the
8343 WDA Process.Set Max Tx Power Req function*/
8344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8345 vos_mem_free(pWdaParams);
8346
8347 /* send response to UMAC*/
8348 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8349 return;
8350}
8351
8352/*
8353 * FUNCTION: WDA_ProcessSetTxPowerReq
8354 * Request to WDI to send set Tx Power Request
8355 */
8356 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8357 tSirSetTxPowerReq *txPowerParams)
8358{
8359 WDI_Status status = WDI_STATUS_SUCCESS;
8360 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8361 tWDA_ReqParams *pWdaParams = NULL;
8362
8363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8364 "------> %s ", __func__);
8365
8366 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8367 sizeof(WDI_SetTxPowerParamsType));
8368 if(NULL == wdiSetTxPowerParams)
8369 {
8370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8371 "%s: VOS MEM Alloc Failure", __func__);
8372 VOS_ASSERT(0);
8373 return VOS_STATUS_E_NOMEM;
8374 }
8375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8376 if(NULL == pWdaParams)
8377 {
8378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8379 "%s: VOS MEM Alloc Failure", __func__);
8380 vos_mem_free(wdiSetTxPowerParams);
8381 VOS_ASSERT(0);
8382 return VOS_STATUS_E_NOMEM;
8383 }
8384 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8385 txPowerParams->bssIdx;
8386 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8387 txPowerParams->mwPower;
8388 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8389 pWdaParams->pWdaContext = pWDA;
8390 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8391 /* store Params pass it to WDI */
8392 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8393 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8394 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8395 if(IS_WDI_STATUS_FAILURE(status))
8396 {
8397 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8398 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8400 vos_mem_free(pWdaParams);
8401 /* send response to UMAC*/
8402 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8403 }
8404 return CONVERT_WDI2VOS_STATUS(status);
8405}
8406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407/*
8408 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8409 * Free the memory. No need to send any response to PE in this case
8410 */
8411void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8412{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8414
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008416 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008417
8418 if(NULL == pWdaParams)
8419 {
8420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008421 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008422 VOS_ASSERT(0) ;
8423 return ;
8424 }
8425
8426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8427 vos_mem_free(pWdaParams->wdaMsgParam) ;
8428 vos_mem_free(pWdaParams);
8429
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 /*
8431 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8432 * so just free the request param here
8433 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 return ;
8435}
8436
Jeff Johnson295189b2012-06-20 16:38:30 -07008437/*
8438 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8439 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8440 */
8441VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8442 tP2pPsParams *pP2pPsConfigParams)
8443{
8444 WDI_Status status = WDI_STATUS_SUCCESS ;
8445 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8446 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8447 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008448 tWDA_ReqParams *pWdaParams = NULL;
8449
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008451 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 if(NULL == wdiSetP2PGONOAReqParam)
8453 {
8454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008455 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308456 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 VOS_ASSERT(0);
8458 return VOS_STATUS_E_NOMEM;
8459 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008460
8461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8462 if(NULL == pWdaParams)
8463 {
8464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008465 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008466 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008467 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008468 VOS_ASSERT(0);
8469 return VOS_STATUS_E_NOMEM;
8470 }
8471
Jeff Johnson295189b2012-06-20 16:38:30 -07008472 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8473 pP2pPsConfigParams->opp_ps;
8474 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8475 pP2pPsConfigParams->ctWindow;
8476 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8477 pP2pPsConfigParams->count;
8478 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8479 pP2pPsConfigParams->duration;
8480 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8481 pP2pPsConfigParams->interval;
8482 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8483 pP2pPsConfigParams->single_noa_duration;
8484 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8485 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008486
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8488 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008489 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8490
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008492 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8493 pWdaParams->pWdaContext = pWDA;
8494
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008496 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8497
Jeff Johnson295189b2012-06-20 16:38:30 -07008498 if(IS_WDI_STATUS_FAILURE(status))
8499 {
8500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8501 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8503 vos_mem_free(pWdaParams->wdaMsgParam);
8504 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008505 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 return CONVERT_WDI2VOS_STATUS(status);
8507
Jeff Johnson295189b2012-06-20 16:38:30 -07008508}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308509
8510#ifdef FEATURE_WLAN_TDLS
8511/*
8512 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8513 * Free the memory. No need to send any response to PE in this case
8514 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308515void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8516 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308517{
8518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8519 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308520 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308521
8522
8523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8524 "<------ %s " ,__func__);
8525 if(NULL == pWdaParams)
8526 {
8527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8528 "%s: pWdaParams received NULL", __func__);
8529 VOS_ASSERT(0) ;
8530 return ;
8531 }
8532 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8533
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308534 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308535 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8537 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8539 vos_mem_free(pWdaParams->wdaMsgParam);
8540 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308541 VOS_ASSERT(0);
8542 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308543 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308544
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308545 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8546 if( NULL == pTdlsLinkEstablishParams )
8547 {
8548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8549 "%s: pTdlsLinkEstablishParams "
8550 "received NULL " ,__func__);
8551 VOS_ASSERT(0);
8552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8553 vos_mem_free(pWdaParams);
8554 return ;
8555 }
8556 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8557 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308559 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308560 /* send response to UMAC*/
8561 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8562
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308563 return ;
8564}
8565
8566VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8567 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8568{
8569 WDI_Status status = WDI_STATUS_SUCCESS ;
8570 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8571 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8572 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8573 tWDA_ReqParams *pWdaParams = NULL;
8574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8575 "------> %s " ,__func__);
8576 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8577 {
8578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8579 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308580 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308581 VOS_ASSERT(0);
8582 return VOS_STATUS_E_NOMEM;
8583 }
8584 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8585 if(NULL == pWdaParams)
8586 {
8587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8588 "%s: VOS MEM Alloc Failure", __func__);
8589 vos_mem_free(pTdlsLinkEstablishParams);
8590 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8591 VOS_ASSERT(0);
8592 return VOS_STATUS_E_NOMEM;
8593 }
8594 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308595 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308596 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308597 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308598 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308599 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308600 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308601 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308602 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308603 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308604 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8605 pTdlsLinkEstablishParams->isOffChannelSupported;
8606
8607 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8608 pTdlsLinkEstablishParams->validChannels,
8609 pTdlsLinkEstablishParams->validChannelsLen);
8610
8611 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8612 pTdlsLinkEstablishParams->validChannelsLen;
8613
8614 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8615 pTdlsLinkEstablishParams->validOperClasses,
8616 pTdlsLinkEstablishParams->validOperClassesLen);
8617 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8618 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308619
8620 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8621 /* Store msg pointer from PE, as this will be used for response */
8622 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8623 /* store Params pass it to WDI */
8624 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8625 pWdaParams->pWdaContext = pWDA;
8626
8627 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8628 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8629 WDA_SetTDLSLinkEstablishReqParamsCallback,
8630 pWdaParams);
8631 if(IS_WDI_STATUS_FAILURE(status))
8632 {
8633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8634 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8636 vos_mem_free(pWdaParams->wdaMsgParam);
8637 vos_mem_free(pWdaParams);
8638 }
8639 return CONVERT_WDI2VOS_STATUS(status);
8640}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308641
8642// tdlsoffchan
8643void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8644 void* pUserData)
8645{
8646 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8647 tWDA_CbContext *pWDA = NULL;
8648 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8649
8650
8651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8652 "<------ %s " ,__func__);
8653 if(NULL == pWdaParams)
8654 {
8655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8656 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308657 VOS_ASSERT(0) ;
8658 return ;
8659 }
8660 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8661
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308662 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308663 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8665 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8667 vos_mem_free(pWdaParams->wdaMsgParam);
8668 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308669 VOS_ASSERT(0);
8670 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308671 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308672
Atul Mittalc0f739f2014-07-31 13:47:47 +05308673 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308674 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308675 {
8676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8677 "%s: pTdlsChanSwitchParams "
8678 "received NULL " ,__func__);
8679 VOS_ASSERT(0);
8680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8681 vos_mem_free(pWdaParams);
8682 return ;
8683 }
8684 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8685 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8687 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308688 /* send response to UMAC*/
8689 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308690
8691 return ;
8692}
8693VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8694 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8695{
8696 WDI_Status status = WDI_STATUS_SUCCESS ;
8697 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8698 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8699 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8700 tWDA_ReqParams *pWdaParams = NULL;
8701
8702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8703 "Enter: %s ",__func__);
8704 if(NULL == wdiSetTDLSChanSwitchReqParam)
8705 {
8706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8707 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308708 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308709 VOS_ASSERT(0);
8710 return VOS_STATUS_E_NOMEM;
8711 }
8712
8713 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8714 if(NULL == pWdaParams)
8715 {
8716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8717 "%s: VOS MEM Alloc Failure", __func__);
8718 vos_mem_free(pTdlsChanSwitchParams);
8719 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8720 VOS_ASSERT(0);
8721 return VOS_STATUS_E_NOMEM;
8722 }
8723 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8724 pTdlsChanSwitchParams->staIdx;
8725 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8726 pTdlsChanSwitchParams->tdlsSwMode;
8727 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8728 pTdlsChanSwitchParams->operClass;
8729 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8730 pTdlsChanSwitchParams->tdlsOffCh;
8731 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8732 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8733
8734
8735 /* Store msg pointer from PE, as this will be used for response */
8736 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8737 /* store Params pass it to WDI */
8738 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8739 pWdaParams->pWdaContext = pWDA;
8740 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8741 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8742 WDA_SetTDLSChanSwitchReqParamsCallback,
8743 pWdaParams);
8744 if(IS_WDI_STATUS_FAILURE(status))
8745 {
8746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8747 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8749 vos_mem_free(pWdaParams->wdaMsgParam);
8750 vos_mem_free(pWdaParams);
8751 }
8752 return CONVERT_WDI2VOS_STATUS(status);
8753}
8754#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308755
8756
Jeff Johnson295189b2012-06-20 16:38:30 -07008757#ifdef WLAN_FEATURE_VOWIFI_11R
8758/*
8759 * FUNCTION: WDA_AggrAddTSReqCallback
8760 * send ADD AGGREGATED TS RSP back to PE
8761 */
8762void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8763{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008764 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308765 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008766 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008769 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008770 if(NULL == pWdaParams)
8771 {
8772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008773 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008774 VOS_ASSERT(0) ;
8775 return ;
8776 }
8777
8778 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308779 if (NULL == pWDA)
8780 {
8781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8782 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8784 vos_mem_free(pWdaParams->wdaMsgParam);
8785 vos_mem_free(pWdaParams);
8786
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308787 VOS_ASSERT(0);
8788 return ;
8789 }
8790
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008791 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008792
8793 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8794 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008795 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008798
8799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8800 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 return ;
8802}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008803/*
8804 * FUNCTION: WDA_ProcessAddTSReq
8805 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8806 */
8807VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8808 tAggrAddTsParams *pAggrAddTsReqParams)
8809{
8810 WDI_Status status = WDI_STATUS_SUCCESS ;
8811 int i;
8812 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008813 tWDA_ReqParams *pWdaParams = NULL;
8814
8815
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008817 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8819 sizeof(WDI_AggrAddTSReqParamsType)) ;
8820 if(NULL == wdiAggrAddTSReqParam)
8821 {
8822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008823 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308824 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 VOS_ASSERT(0);
8826 return VOS_STATUS_E_NOMEM;
8827 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008828
8829
8830 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8831 if(NULL == pWdaParams)
8832 {
8833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008834 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008835 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008836 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008837 VOS_ASSERT(0);
8838 return VOS_STATUS_E_NOMEM;
8839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008840 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8841 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8842 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8844 {
8845 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8846 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8847 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8849 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8850 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8851 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8852 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8853 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8854 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8855 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8856 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8857 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8858 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8859 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8860 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8861 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8862 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8863 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8865 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8867 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8868 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8869 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8870 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8871 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8872 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8873 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8874 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8875 pAggrAddTsReqParams->tspec[i].inactInterval;
8876 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8877 pAggrAddTsReqParams->tspec[i].suspendInterval;
8878 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8879 pAggrAddTsReqParams->tspec[i].svcStartTime;
8880 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8881 pAggrAddTsReqParams->tspec[i].minDataRate;
8882 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8883 pAggrAddTsReqParams->tspec[i].meanDataRate;
8884 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8885 pAggrAddTsReqParams->tspec[i].peakDataRate;
8886 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8887 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8888 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8889 pAggrAddTsReqParams->tspec[i].delayBound;
8890 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8891 pAggrAddTsReqParams->tspec[i].minPhyRate;
8892 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8893 pAggrAddTsReqParams->tspec[i].surplusBw;
8894 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8895 pAggrAddTsReqParams->tspec[i].mediumTime;
8896 }
8897
8898 /* TODO: tAggrAddTsParams doesn't have the following fields */
8899#if 0
8900 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8901 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8902 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8903 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8904#endif
8905 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8906
8907 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008908 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008910 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8911
8912 pWdaParams->pWdaContext = pWDA;
8913
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008915 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8916
Jeff Johnson295189b2012-06-20 16:38:30 -07008917 if(IS_WDI_STATUS_FAILURE(status))
8918 {
8919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8920 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008921
8922 /* send the failure response back to PE*/
8923 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8924 {
8925 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8926 }
8927
8928 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8929 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05308930
8931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8932 vos_mem_free(pWdaParams);
8933
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008935 return CONVERT_WDI2VOS_STATUS(status) ;
8936}
8937#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008938/*
Mihir Shetea4306052014-03-25 00:02:54 +05308939 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 * send Enter IMPS RSP back to PE
8941 */
Mihir Shetea4306052014-03-25 00:02:54 +05308942void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008943{
Mihir Shetea4306052014-03-25 00:02:54 +05308944 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308945 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308946
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308948 "<------ %s status=%d" ,__func__,status);
8949 if(NULL == pWdaParams)
8950 {
8951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8952 "%s: pWdaParams received NULL", __func__);
8953 VOS_ASSERT(0);
8954 return;
8955 }
8956
8957 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308958 if (NULL == pWDA)
8959 {
8960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8961 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8963 vos_mem_free(pWdaParams->wdaMsgParam);
8964 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308965 VOS_ASSERT(0);
8966 return ;
8967 }
Mihir Shetea4306052014-03-25 00:02:54 +05308968
8969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8970 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308971 if (WDI_STATUS_SUCCESS != status)
8972 {
8973 pWDA->failureCounts.enterImpsFailureCount++;
8974 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8975 pWDA->failureCounts.enterImpsFailureCount)
8976 {
8977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8978 "%s: Status %d fail count %d", __func__, status,
8979 pWDA->failureCounts.enterImpsFailureCount);
8980 pWDA->failureCounts.enterImpsFailureCount = 0;
8981 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8982 WLAN_LOG_INDICATOR_HOST_DRIVER,
8983 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8984 FALSE, TRUE);
8985 }
8986 }
8987 else
8988 {
8989 pWDA->failureCounts.enterImpsFailureCount = 0;
8990 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008991 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 return ;
8993}
Mihir Shetea4306052014-03-25 00:02:54 +05308994
8995
8996/*
8997 * FUNCTION: WDA_EnterImpsReqCallback
8998 * Free memory and send Enter IMPS RSP back to PE.
8999 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9000 */
9001void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9002{
9003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309004 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309005
9006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9007 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9008
9009 if(NULL == pWdaParams)
9010 {
9011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9012 "%s: pWdaParams received NULL", __func__);
9013 VOS_ASSERT(0);
9014 return;
9015 }
9016
9017 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309018 if (NULL == pWDA)
9019 {
9020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9021 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9023 vos_mem_free(pWdaParams->wdaMsgParam);
9024 vos_mem_free(pWdaParams);
9025
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309026 VOS_ASSERT(0);
9027 return ;
9028 }
9029
Mihir Shetea4306052014-03-25 00:02:54 +05309030
9031 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9032 {
9033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9034 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309035 pWDA->failureCounts.enterImpsFailureCount++;
9036 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9037 pWDA->failureCounts.enterImpsFailureCount)
9038 {
9039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9040 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9041 pWDA->failureCounts.enterImpsFailureCount);
9042 pWDA->failureCounts.enterImpsFailureCount = 0;
9043 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9044 WLAN_LOG_INDICATOR_HOST_DRIVER,
9045 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9046 FALSE, TRUE);
9047 }
Mihir Shetea4306052014-03-25 00:02:54 +05309048 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9049 CONVERT_WDI2SIR_STATUS(wdiStatus));
9050 }
9051
9052 return;
9053}
Jeff Johnson295189b2012-06-20 16:38:30 -07009054/*
9055 * FUNCTION: WDA_ProcessEnterImpsReq
9056 * Request to WDI to Enter IMPS power state.
9057 */
9058VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9059{
9060 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309061 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9062 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309063 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009065 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309066
9067
9068 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9069 if (NULL == wdiEnterImpsReqParams)
9070 {
9071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9072 "%s: VOS MEM Alloc Failure", __func__);
9073 VOS_ASSERT(0);
9074 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9075 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9076 return VOS_STATUS_E_NOMEM;
9077 }
9078
9079 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9080 if (NULL == pWdaParams)
9081 {
9082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9083 "%s: VOS MEM Alloc Failure", __func__);
9084 VOS_ASSERT(0);
9085 vos_mem_free(wdiEnterImpsReqParams);
9086 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9087 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9088 return VOS_STATUS_E_NOMEM;
9089 }
9090
9091 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9092 wdiEnterImpsReqParams->pUserData = pWdaParams;
9093
9094 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9095 pWdaParams->wdaMsgParam = NULL;
9096 pWdaParams->pWdaContext = pWDA;
9097
9098 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9099 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9100 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 if(IS_WDI_STATUS_FAILURE(status))
9102 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309103 if (! (failcnt & 0xF))
9104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9105 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9106 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309107 vos_mem_free(wdiEnterImpsReqParams);
9108 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009109 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009111 return CONVERT_WDI2VOS_STATUS(status) ;
9112}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309113
9114/*
9115 * FUNCTION: WDA_ExitImpsRespCallback
9116 * send Exit IMPS RSP back to PE
9117 */
9118void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9119{
9120 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9121 tWDA_CbContext *pWDA;
9122
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9124 "<------ %s " ,__func__);
9125
9126 if (NULL == pWdaParams)
9127 {
9128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9129 "%s: pWdaParams received NULL", __func__);
9130 VOS_ASSERT(0);
9131 return;
9132 }
9133 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9134
9135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9136 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309137 if (WDI_STATUS_SUCCESS != status)
9138 {
9139 pWDA->failureCounts.exitImpsFailureCount++;
9140 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9141 pWDA->failureCounts.exitImpsFailureCount)
9142 {
9143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9144 "%s: Status %d fail count %d", __func__,
9145 status,
9146 pWDA->failureCounts.exitImpsFailureCount);
9147 pWDA->failureCounts.exitImpsFailureCount = 0;
9148 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9149 WLAN_LOG_INDICATOR_HOST_DRIVER,
9150 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9151 FALSE, TRUE);
9152 }
9153 }
9154 else
9155 {
9156 pWDA->failureCounts.exitImpsFailureCount = 0;
9157 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309158
9159 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9160 return;
9161}
9162
Jeff Johnson295189b2012-06-20 16:38:30 -07009163/*
9164 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 */
9166void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9167{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309169 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009171 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309172 if(NULL == pWdaParams)
9173 {
9174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9175 "%s: pWdaParams received NULL", __func__);
9176 VOS_ASSERT(0);
9177 return;
9178 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309179 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309180 if (IS_WDI_STATUS_FAILURE(status))
9181 {
9182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9183 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309184
9185 pWDA->failureCounts.exitImpsFailureCount++;
9186 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9187 pWDA->failureCounts.exitImpsFailureCount)
9188 {
9189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9190 "%s: wdiStatus %d fail count %d", __func__,
9191 status,
9192 pWDA->failureCounts.exitImpsFailureCount);
9193 pWDA->failureCounts.exitImpsFailureCount = 0;
9194 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9195 WLAN_LOG_INDICATOR_HOST_DRIVER,
9196 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9197 FALSE, TRUE);
9198 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309199 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9202 FL("reload wlan driver"));
9203 wpalWlanReload();
9204 }
9205 }
9206 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009207}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309208
Jeff Johnson295189b2012-06-20 16:38:30 -07009209/*
9210 * FUNCTION: WDA_ProcessExitImpsReq
9211 * Request to WDI to Exit IMPS power state.
9212 */
9213VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9214{
9215 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309216 tWDA_ReqParams *pWdaParams;
9217 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9218
Jeff Johnson295189b2012-06-20 16:38:30 -07009219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009220 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309221 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9222 sizeof(WDI_ExitImpsReqParamsType));
9223 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9226 "%s: VOS MEM Alloc Failure", __func__);
9227 VOS_ASSERT(0);
9228 return VOS_STATUS_E_NOMEM;
9229 }
9230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9231 if(NULL == pWdaParams)
9232 {
9233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9234 "%s: VOS MEM Alloc Failure", __func__);
9235 VOS_ASSERT(0);
9236 vos_mem_free(wdiExitImpsReqParams);
9237 return VOS_STATUS_E_NOMEM;
9238 }
9239 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9240 wdiExitImpsReqParams->pUserData = pWdaParams;
9241
9242 /* Store param pointer as passed in by caller */
9243 /* store Params pass it to WDI */
9244 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9245 pWdaParams->pWdaContext = pWDA;
9246 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9247 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9248 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9249 pWdaParams);
9250 if (IS_WDI_STATUS_FAILURE(status))
9251 {
9252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9253 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9255 vos_mem_free(pWdaParams);
9256 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 return CONVERT_WDI2VOS_STATUS(status) ;
9259}
Jeff Johnson295189b2012-06-20 16:38:30 -07009260/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009261 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 * send Enter BMPS RSP back to PE
9263 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009264void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009265{
9266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309267 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009268 tEnterBmpsParams *pEnterBmpsRspParams;
9269
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 if(NULL == pWdaParams)
9273 {
9274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 VOS_ASSERT(0) ;
9277 return ;
9278 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009279
9280 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309281 if (NULL == pWDA)
9282 {
9283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9284 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309285
9286 if(pWdaParams->wdaWdiApiMsgParam)
9287 {
9288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9289 }
9290 vos_mem_free(pWdaParams);
9291
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309292 VOS_ASSERT(0);
9293 return ;
9294 }
9295
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009296 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9297
9298 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009299 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009300
9301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009302 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309303 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9304 {
9305 pWDA->failureCounts.enterBmpsFailureCount++;
9306 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9307 pWDA->failureCounts.enterBmpsFailureCount)
9308 {
9309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9310 "%s: wdiStatus %d fail count %d", __func__,
9311 pwdiEnterBmpsRsp->wdiStatus,
9312 pWDA->failureCounts.enterBmpsFailureCount);
9313 pWDA->failureCounts.enterBmpsFailureCount = 0;
9314 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9315 WLAN_LOG_INDICATOR_HOST_DRIVER,
9316 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9317 FALSE, TRUE);
9318 }
9319 }
9320 else
9321 {
9322 pWDA->failureCounts.enterBmpsFailureCount = 0;
9323 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009324 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9325
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 return ;
9327}
Jeff Johnson295189b2012-06-20 16:38:30 -07009328/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009329 * FUNCTION: WDA_EnterBmpsReqCallback
9330 * Free memory and send Enter BMPS RSP back to PE.
9331 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9332 */
9333void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9334{
9335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309336 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009337 tEnterBmpsParams *pEnterBmpsRspParams;
9338
9339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9340 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9341
9342 if(NULL == pWdaParams)
9343 {
9344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9345 "%s: pWdaParams received NULL", __func__);
9346 VOS_ASSERT(0);
9347 return;
9348 }
9349
9350 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309351 if (NULL == pWDA)
9352 {
9353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9354 "%s:pWDA is NULL", __func__);
9355 VOS_ASSERT(0);
9356 return ;
9357 }
9358
Yue Ma7f44bbe2013-04-12 11:47:39 -07009359 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9360 pEnterBmpsRspParams->status = wdiStatus;
9361
9362 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9363 {
9364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9365 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309366 pWDA->failureCounts.enterBmpsFailureCount++;
9367 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9368 pWDA->failureCounts.enterBmpsFailureCount)
9369 {
9370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9371 "%s: wdiStatus %d fail count %d", __func__,
9372 wdiStatus,
9373 pWDA->failureCounts.enterBmpsFailureCount);
9374 pWDA->failureCounts.enterBmpsFailureCount = 0;
9375 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9376 WLAN_LOG_INDICATOR_HOST_DRIVER,
9377 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9378 FALSE, TRUE);
9379 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009380 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9381 }
9382
9383 return;
9384}
9385/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 * FUNCTION: WDA_ProcessEnterBmpsReq
9387 * Request to WDI to Enter BMPS power state.
9388 */
9389VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9390 tEnterBmpsParams *pEnterBmpsReqParams)
9391{
9392 WDI_Status status = WDI_STATUS_SUCCESS;
9393 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9394 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009396 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009397 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9398 {
9399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009400 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 VOS_ASSERT(0);
9402 return VOS_STATUS_E_FAILURE;
9403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9405 if (NULL == wdiEnterBmpsReqParams)
9406 {
9407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009410 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9411 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 return VOS_STATUS_E_NOMEM;
9413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009414 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9415 if (NULL == pWdaParams)
9416 {
9417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 VOS_ASSERT(0);
9420 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009421 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9422 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 return VOS_STATUS_E_NOMEM;
9424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9426 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9427 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9428 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009429 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9431 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9432 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009433 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9434 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009435
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 /* Store param pointer as passed in by caller */
9437 /* store Params pass it to WDI */
9438 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009439 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009442 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 if (IS_WDI_STATUS_FAILURE(status))
9444 {
9445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9446 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009448 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009449 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009450 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 return CONVERT_WDI2VOS_STATUS(status);
9453}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009454
9455
9456static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9457 WDI_Status wdiStatus,
9458 tExitBmpsParams *pExitBmpsReqParams)
9459{
9460 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9461
9462 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9463}
9464
9465
Jeff Johnson295189b2012-06-20 16:38:30 -07009466/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009467 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 * send Exit BMPS RSP back to PE
9469 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009470void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009471{
9472 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309473 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009474 tExitBmpsParams *pExitBmpsRspParams;
9475
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009477 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 if(NULL == pWdaParams)
9479 {
9480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009481 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 VOS_ASSERT(0) ;
9483 return ;
9484 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009485
9486 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309487 if (NULL == pWDA)
9488 {
9489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9490 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309491
9492 if(pWdaParams->wdaWdiApiMsgParam)
9493 {
9494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9495 }
9496 vos_mem_free(pWdaParams);
9497
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309498 VOS_ASSERT(0);
9499 return ;
9500 }
9501
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009502 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9503
9504 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009505 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009506
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309508 vos_mem_free(pWdaParams);
9509
9510 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9511 {
9512 pWDA->failureCounts.exitBmpsFailureCount++;
9513 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9514 pWDA->failureCounts.exitBmpsFailureCount)
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9517 "%s: Status %d fail count %d", __func__,
9518 pExitBmpsRspParams->status,
9519 pWDA->failureCounts.exitBmpsFailureCount);
9520 pWDA->failureCounts.exitBmpsFailureCount = 0;
9521 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9522 WLAN_LOG_INDICATOR_HOST_DRIVER,
9523 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9524 FALSE, TRUE);
9525 }
9526 }
9527 else
9528 {
9529 pWDA->failureCounts.exitBmpsFailureCount = 0;
9530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009531
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009532 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009533 return ;
9534}
Jeff Johnson295189b2012-06-20 16:38:30 -07009535/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009536 * FUNCTION: WDA_ExitBmpsReqCallback
9537 * Free memory and send Exit BMPS RSP back to PE.
9538 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9539 */
9540void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9541{
9542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309543 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009544 tExitBmpsParams *pExitBmpsRspParams;
9545
9546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9547 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9548
9549 if(NULL == pWdaParams)
9550 {
9551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9552 "%s: pWdaParams received NULL", __func__);
9553 VOS_ASSERT(0);
9554 return;
9555 }
9556
9557 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309558 if (NULL == pWDA)
9559 {
9560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9561 "%s:pWDA is NULL", __func__);
9562 VOS_ASSERT(0);
9563 return ;
9564 }
9565
Yue Ma7f44bbe2013-04-12 11:47:39 -07009566 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9567 pExitBmpsRspParams->status = wdiStatus;
9568
9569 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9570 {
9571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9572 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309573 pWDA->failureCounts.exitBmpsFailureCount++;
9574 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9575 pWDA->failureCounts.exitBmpsFailureCount)
9576 {
9577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9578 "%s: wdiStatus %d fail count %d", __func__,
9579 wdiStatus,
9580 pWDA->failureCounts.exitBmpsFailureCount);
9581 pWDA->failureCounts.exitBmpsFailureCount = 0;
9582 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9583 WLAN_LOG_INDICATOR_HOST_DRIVER,
9584 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9585 FALSE, TRUE);
9586 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009587 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9588 }
9589
9590 return;
9591}
9592/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009593 * FUNCTION: WDA_ProcessExitBmpsReq
9594 * Request to WDI to Exit BMPS power state.
9595 */
9596VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9597 tExitBmpsParams *pExitBmpsReqParams)
9598{
9599 WDI_Status status = WDI_STATUS_SUCCESS ;
9600 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9601 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9602 sizeof(WDI_ExitBmpsReqParamsType)) ;
9603 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009605 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 if(NULL == wdiExitBmpsReqParams)
9607 {
9608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009610 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009611 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 return VOS_STATUS_E_NOMEM;
9613 }
9614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9615 if(NULL == pWdaParams)
9616 {
9617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 VOS_ASSERT(0);
9620 vos_mem_free(wdiExitBmpsReqParams);
9621 return VOS_STATUS_E_NOMEM;
9622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009623 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009624
9625 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9626
Yue Ma7f44bbe2013-04-12 11:47:39 -07009627 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9628 wdiExitBmpsReqParams->pUserData = pWdaParams;
9629
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 /* Store param pointer as passed in by caller */
9631 /* store Params pass it to WDI */
9632 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9633 pWdaParams->pWdaContext = pWDA;
9634 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009635 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009636 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009637 if(IS_WDI_STATUS_FAILURE(status))
9638 {
9639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9640 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9642 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009643 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009645 return CONVERT_WDI2VOS_STATUS(status) ;
9646}
Jeff Johnson295189b2012-06-20 16:38:30 -07009647/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009648 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 * send Enter UAPSD RSP back to PE
9650 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009651void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009652{
9653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309654 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009655 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009657 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009658 if(NULL == pWdaParams)
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009661 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 VOS_ASSERT(0) ;
9663 return ;
9664 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009665
9666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309667 if (NULL == pWDA)
9668 {
9669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9670 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309671
9672 if(pWdaParams->wdaWdiApiMsgParam)
9673 {
9674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9675 }
9676 vos_mem_free(pWdaParams);
9677
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309678 VOS_ASSERT(0);
9679 return ;
9680 }
9681
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009682 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9683
9684 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009685 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009686
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9688 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009689 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 return ;
9691}
Jeff Johnson295189b2012-06-20 16:38:30 -07009692/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009693 * FUNCTION: WDA_EnterUapsdReqCallback
9694 * Free memory and send Enter UAPSD RSP back to PE.
9695 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9696 */
9697void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9698{
9699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9700 tWDA_CbContext *pWDA;
9701 tUapsdParams *pEnterUapsdRsqParams;
9702
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9704 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9705
9706 if(NULL == pWdaParams)
9707 {
9708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9709 "%s: pWdaParams received NULL", __func__);
9710 VOS_ASSERT(0);
9711 return;
9712 }
9713
9714 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309715 if (NULL == pWDA)
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9718 "%s:pWDA is NULL", __func__);
9719 VOS_ASSERT(0);
9720 return ;
9721 }
9722
Yue Ma7f44bbe2013-04-12 11:47:39 -07009723 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9724 pEnterUapsdRsqParams->status = wdiStatus;
9725
9726 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9727 {
9728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9729 vos_mem_free(pWdaParams);
9730 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9731 }
9732
9733 return;
9734}
9735/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 * FUNCTION: WDA_ProcessEnterUapsdReq
9737 * Request to WDI to Enter UAPSD power state.
9738 */
9739VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9740 tUapsdParams *pEnterUapsdReqParams)
9741{
9742 WDI_Status status = WDI_STATUS_SUCCESS ;
9743 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9744 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9745 sizeof(WDI_EnterUapsdReqParamsType)) ;
9746 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009748 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 if(NULL == wdiEnterUapsdReqParams)
9750 {
9751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009753 VOS_ASSERT(0);
9754 return VOS_STATUS_E_NOMEM;
9755 }
9756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9757 if(NULL == pWdaParams)
9758 {
9759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009761 VOS_ASSERT(0);
9762 vos_mem_free(wdiEnterUapsdReqParams);
9763 return VOS_STATUS_E_NOMEM;
9764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009765 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9766 pEnterUapsdReqParams->beDeliveryEnabled;
9767 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9768 pEnterUapsdReqParams->beTriggerEnabled;
9769 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9770 pEnterUapsdReqParams->bkDeliveryEnabled;
9771 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9772 pEnterUapsdReqParams->bkTriggerEnabled;
9773 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9774 pEnterUapsdReqParams->viDeliveryEnabled;
9775 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9776 pEnterUapsdReqParams->viTriggerEnabled;
9777 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9778 pEnterUapsdReqParams->voDeliveryEnabled;
9779 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9780 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009781 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009782
Yue Ma7f44bbe2013-04-12 11:47:39 -07009783 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9784 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009785
Jeff Johnson295189b2012-06-20 16:38:30 -07009786 /* Store param pointer as passed in by caller */
9787 /* store Params pass it to WDI */
9788 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9789 pWdaParams->pWdaContext = pWDA;
9790 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009792 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009793 if(IS_WDI_STATUS_FAILURE(status))
9794 {
9795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9796 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9797 vos_mem_free(pWdaParams->wdaMsgParam) ;
9798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9799 vos_mem_free(pWdaParams) ;
9800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009801 return CONVERT_WDI2VOS_STATUS(status) ;
9802}
Jeff Johnson295189b2012-06-20 16:38:30 -07009803/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009804 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 * send Exit UAPSD RSP back to PE
9806 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009807void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009808{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009809
9810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9811 tWDA_CbContext *pWDA;
9812 tExitUapsdParams *pExitUapsdRspParams;
9813
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009815 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009816 if(NULL == pWdaParams)
9817 {
9818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009819 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009820 VOS_ASSERT(0);
9821 return;
9822 }
9823
9824 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9825 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9826
9827 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009828 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009829
9830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9831 vos_mem_free(pWdaParams) ;
9832
9833 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009834 return ;
9835}
Jeff Johnson295189b2012-06-20 16:38:30 -07009836/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009837 * FUNCTION: WDA_ExitUapsdReqCallback
9838 * Free memory and send Exit UAPSD RSP back to PE.
9839 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9840 */
9841void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9842{
9843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309844 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009845 tExitUapsdParams *pExitUapsdRspParams;
9846
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9848 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9849
9850 if(NULL == pWdaParams)
9851 {
9852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9853 "%s: pWdaParams received NULL", __func__);
9854 VOS_ASSERT(0);
9855 return;
9856 }
9857
9858 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309859 if (NULL == pWDA)
9860 {
9861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9862 "%s:pWDA is NULL", __func__);
9863 VOS_ASSERT(0);
9864 return ;
9865 }
9866
Yue Ma7f44bbe2013-04-12 11:47:39 -07009867 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9868 pExitUapsdRspParams->status = wdiStatus;
9869
9870 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9871 {
9872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9873 vos_mem_free(pWdaParams);
9874 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9875 }
9876
9877 return;
9878}
9879/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 * FUNCTION: WDA_ProcessExitUapsdReq
9881 * Request to WDI to Exit UAPSD power state.
9882 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009883VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9884 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009885{
9886 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009887 tWDA_ReqParams *pWdaParams ;
9888 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9889 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9890 sizeof(WDI_ExitUapsdReqParamsType)) ;
9891
Jeff Johnson295189b2012-06-20 16:38:30 -07009892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009893 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009894
9895 if(NULL == wdiExitUapsdReqParams)
9896 {
9897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009898 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009899 VOS_ASSERT(0);
9900 return VOS_STATUS_E_NOMEM;
9901 }
9902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9903 if(NULL == pWdaParams)
9904 {
9905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009906 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009907 VOS_ASSERT(0);
9908 vos_mem_free(wdiExitUapsdReqParams);
9909 return VOS_STATUS_E_NOMEM;
9910 }
9911
9912 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009913 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9914 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009915
9916 /* Store param pointer as passed in by caller */
9917 /* store Params pass it to WDI */
9918 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9919 pWdaParams->pWdaContext = pWDA;
9920 pWdaParams->wdaMsgParam = pExitUapsdParams;
9921
Yue Ma7f44bbe2013-04-12 11:47:39 -07009922 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 if(IS_WDI_STATUS_FAILURE(status))
9924 {
9925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9926 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009927 vos_mem_free(pWdaParams->wdaMsgParam) ;
9928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9929 vos_mem_free(pWdaParams) ;
9930
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 return CONVERT_WDI2VOS_STATUS(status) ;
9933}
9934
Jeff Johnson295189b2012-06-20 16:38:30 -07009935/*
9936 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9937 *
9938 */
9939void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9940{
9941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009943 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 if(NULL == pWdaParams)
9945 {
9946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009947 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 VOS_ASSERT(0) ;
9949 return ;
9950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 if( pWdaParams != NULL )
9952 {
9953 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9954 {
9955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9956 }
9957 if( pWdaParams->wdaMsgParam != NULL )
9958 {
9959 vos_mem_free(pWdaParams->wdaMsgParam) ;
9960 }
9961 vos_mem_free(pWdaParams) ;
9962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009963 return ;
9964}
Jeff Johnson295189b2012-06-20 16:38:30 -07009965/*
9966 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9967 * Request to WDI to set the power save params at start.
9968 */
9969VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9970 tSirPowerSaveCfg *pPowerSaveCfg)
9971{
9972 WDI_Status status = WDI_STATUS_SUCCESS ;
9973 tHalCfg *tlvStruct = NULL ;
9974 tANI_U8 *tlvStructStart = NULL ;
9975 v_PVOID_t *configParam;
9976 tANI_U32 configParamSize;
9977 tANI_U32 *configDataValue;
9978 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9979 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009981 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9983 {
9984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009985 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009987 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009988 return VOS_STATUS_E_FAILURE;
9989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009990 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9991 if (NULL == wdiPowerSaveCfg)
9992 {
9993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009996 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009997 return VOS_STATUS_E_NOMEM;
9998 }
9999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10000 if(NULL == pWdaParams)
10001 {
10002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 VOS_ASSERT(0);
10005 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010006 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 return VOS_STATUS_E_NOMEM;
10008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10010 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 if(NULL == configParam)
10012 {
10013 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010014 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010015 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 vos_mem_free(pWdaParams);
10017 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010018 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 return VOS_STATUS_E_NOMEM;
10020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 vos_mem_set(configParam, configParamSize, 0);
10022 wdiPowerSaveCfg->pConfigBuffer = configParam;
10023 tlvStruct = (tHalCfg *)configParam;
10024 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10026 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10027 tlvStruct->length = sizeof(tANI_U32);
10028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10029 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10031 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10033 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10034 tlvStruct->length = sizeof(tANI_U32);
10035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10036 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10038 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10040 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10041 tlvStruct->length = sizeof(tANI_U32);
10042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10043 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010044 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10045 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10047 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10048 tlvStruct->length = sizeof(tANI_U32);
10049 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10050 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10052 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10054 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10055 tlvStruct->length = sizeof(tANI_U32);
10056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10057 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10059 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10061 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10062 tlvStruct->length = sizeof(tANI_U32);
10063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10064 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010065 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10066 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010067 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10068 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10069 tlvStruct->length = sizeof(tANI_U32);
10070 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10071 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10073 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10075 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10076 tlvStruct->length = sizeof(tANI_U32);
10077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10078 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10079 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10080 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10082 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10083 tlvStruct->length = sizeof(tANI_U32);
10084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10085 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10086 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10087 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010088 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10089 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10090 tlvStruct->length = sizeof(tANI_U32);
10091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10092 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10094 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010095 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10096 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10097 tlvStruct->length = sizeof(tANI_U32);
10098 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10099 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10101 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010102 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 /* store Params pass it to WDI */
10105 pWdaParams->wdaMsgParam = configParam;
10106 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10107 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10109 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 if(IS_WDI_STATUS_FAILURE(status))
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10113 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10114 vos_mem_free(pWdaParams->wdaMsgParam);
10115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10116 vos_mem_free(pWdaParams);
10117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010118 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 return CONVERT_WDI2VOS_STATUS(status);
10120}
Jeff Johnson295189b2012-06-20 16:38:30 -070010121/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010122 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010123 *
10124 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010125void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010126{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10128
Jeff Johnson295189b2012-06-20 16:38:30 -070010129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010130 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010131
10132 if(NULL == pWdaParams)
10133 {
10134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10135 "%s: pWdaParams received NULL", __func__);
10136 VOS_ASSERT(0);
10137 return ;
10138 }
10139
10140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 vos_mem_free(pWdaParams);
10142
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 return ;
10144}
Jeff Johnson295189b2012-06-20 16:38:30 -070010145/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010146 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10147 * Free memory.
10148 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10149 */
10150void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10151{
10152 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10153
10154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10155 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10156
10157 if(NULL == pWdaParams)
10158 {
10159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10160 "%s: pWdaParams received NULL", __func__);
10161 VOS_ASSERT(0);
10162 return;
10163 }
10164
10165 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10166 {
10167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10168 vos_mem_free(pWdaParams);
10169 }
10170
10171 return;
10172}
10173/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 * FUNCTION: WDA_SetUapsdAcParamsReq
10175 * Request to WDI to set the UAPSD params for an ac (sta mode).
10176 */
10177VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10178 tUapsdInfo *pUapsdInfo)
10179{
10180 WDI_Status status = WDI_STATUS_SUCCESS;
10181 tWDA_CbContext *pWDA = NULL ;
10182 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10183 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10184 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10185 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010187 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 if(NULL == wdiUapsdParams)
10189 {
10190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 VOS_ASSERT(0);
10193 return VOS_STATUS_E_NOMEM;
10194 }
10195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10196 if(NULL == pWdaParams)
10197 {
10198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 VOS_ASSERT(0);
10201 vos_mem_free(wdiUapsdParams);
10202 return VOS_STATUS_E_NOMEM;
10203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10205 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10206 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10207 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10208 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10209 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010210 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10211 wdiUapsdParams->pUserData = pWdaParams;
10212
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 pWdaParams->pWdaContext = pWDA;
10215 /* Store param pointer as passed in by caller */
10216 pWdaParams->wdaMsgParam = pUapsdInfo;
10217 /* store Params pass it to WDI */
10218 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010220 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 if(IS_WDI_STATUS_FAILURE(status))
10223 {
10224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10225 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10227 vos_mem_free(pWdaParams);
10228 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10230 return VOS_STATUS_SUCCESS;
10231 else
10232 return VOS_STATUS_E_FAILURE;
10233
Jeff Johnson295189b2012-06-20 16:38:30 -070010234}
10235/*
10236 * FUNCTION: WDA_ClearUapsdAcParamsReq
10237 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10238 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10239 * and again enter the UPASD with the modified params. Hence the disable
10240 * function was kept empty.
10241 *
10242 */
10243VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10244{
10245 /* do nothing */
10246 return VOS_STATUS_SUCCESS;
10247}
Jeff Johnson295189b2012-06-20 16:38:30 -070010248/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010249 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 *
10251 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010252void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010253{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010254 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10255
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010257 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010258
10259 if(NULL == pWdaParams)
10260 {
10261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010262 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010263 VOS_ASSERT(0) ;
10264 return ;
10265 }
10266
10267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10268 vos_mem_free(pWdaParams->wdaMsgParam);
10269 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 //print a msg, nothing else to do
10272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010273 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 return ;
10275}
Jeff Johnson295189b2012-06-20 16:38:30 -070010276/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010277 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10278 * Free memory.
10279 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10280 */
10281void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10282{
10283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10284
10285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10286 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10287
10288 if(NULL == pWdaParams)
10289 {
10290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10291 "%s: pWdaParams received NULL", __func__);
10292 VOS_ASSERT(0);
10293 return;
10294 }
10295
10296 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10297 {
10298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10299 vos_mem_free(pWdaParams->wdaMsgParam);
10300 vos_mem_free(pWdaParams);
10301 }
10302
10303 return;
10304}
10305/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 * FUNCTION: WDA_UpdateUapsdParamsReq
10307 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10308 */
10309VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10310 tUpdateUapsdParams* pUpdateUapsdInfo)
10311{
10312 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010313 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10315 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10316 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010317 tWDA_ReqParams *pWdaParams = NULL;
10318
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010320 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 if(NULL == wdiUpdateUapsdParams)
10322 {
10323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010324 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 VOS_ASSERT(0);
10326 return VOS_STATUS_E_NOMEM;
10327 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10329 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10330 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010331 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10332 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010333
10334 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10335 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 {
10337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010338 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010339 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010340 vos_mem_free(pUpdateUapsdInfo);
10341 vos_mem_free(wdiUpdateUapsdParams);
10342 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010345 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010347 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10348 pWdaParams->pWdaContext = pWDA;
10349
Jeff Johnson43971f52012-07-17 12:26:56 -070010350 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010351 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010352 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010353
Jeff Johnson43971f52012-07-17 12:26:56 -070010354 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010355 {
10356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10357 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010358 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10360 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010361 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010362 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010363 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010364}
Jeff Johnson295189b2012-06-20 16:38:30 -070010365/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010366 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010367 *
10368 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010369void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010370{
10371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010373 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 if(WDI_STATUS_SUCCESS != wdiStatus)
10375 {
10376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010377 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 if(NULL == pWdaParams)
10380 {
10381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010382 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 VOS_ASSERT(0) ;
10384 return ;
10385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10387 vos_mem_free(pWdaParams->wdaMsgParam);
10388 vos_mem_free(pWdaParams);
10389 return ;
10390}
Jeff Johnson295189b2012-06-20 16:38:30 -070010391/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010392 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10393 * Free memory.
10394 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10395 */
10396void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10397{
10398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10399
10400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10401 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10402
10403 if(NULL == pWdaParams)
10404 {
10405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10406 "%s: pWdaParams received NULL", __func__);
10407 VOS_ASSERT(0);
10408 return;
10409 }
10410
10411 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10412 {
10413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10414 vos_mem_free(pWdaParams->wdaMsgParam);
10415 vos_mem_free(pWdaParams);
10416 }
10417
10418 return;
10419}
10420/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010421 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10422 *
10423 */
10424VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10425 tSirWlanSetRxpFilters *pWlanSuspendParam)
10426{
Jeff Johnson295189b2012-06-20 16:38:30 -070010427 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010428 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010429 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010430 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010431 /* Sanity Check
10432 * This is very unlikely and add assert to collect more info next time */
10433 if(NULL == pWlanSuspendParam)
10434 {
10435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10436 "%s: pWlanSuspendParam received NULL", __func__);
10437 VOS_ASSERT(0) ;
10438 return VOS_STATUS_E_FAULT;
10439 }
10440 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10441 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010443 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010444 if(NULL == wdiRxpFilterParams)
10445 {
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 VOS_ASSERT(0);
10449 vos_mem_free(pWlanSuspendParam);
10450 return VOS_STATUS_E_NOMEM;
10451 }
10452 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10453 if(NULL == pWdaParams)
10454 {
10455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 VOS_ASSERT(0);
10458 vos_mem_free(wdiRxpFilterParams);
10459 vos_mem_free(pWlanSuspendParam);
10460 return VOS_STATUS_E_NOMEM;
10461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010462 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10463 pWlanSuspendParam->setMcstBcstFilter;
10464 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10465 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10466
Yue Ma7f44bbe2013-04-12 11:47:39 -070010467 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10468 wdiRxpFilterParams->pUserData = pWdaParams;
10469
Jeff Johnson295189b2012-06-20 16:38:30 -070010470 pWdaParams->pWdaContext = pWDA;
10471 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10472 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010473 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010474 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010475 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010476 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010477 {
10478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10479 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010480 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10482 vos_mem_free(pWdaParams->wdaMsgParam);
10483 vos_mem_free(pWdaParams);
10484 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010485 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010486}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010487
10488/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010489 * FUNCTION: WDA_ProcessGetFrameLogReq
10490 * Request to WDI to get the Frame Log.
10491 */
10492VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10493 tAniGetFrameLogReq *pGetFrameLog)
10494{
10495 VOS_STATUS status = VOS_STATUS_SUCCESS;
10496 WDI_Status wstatus;
10497 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10498 tWDA_ReqParams *pWdaParams ;
10499
10500 /* Sanity Check*/
10501 if(NULL == pGetFrameLog)
10502 {
10503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010504 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010505 VOS_ASSERT(0) ;
10506 return VOS_STATUS_E_FAULT;
10507 }
10508
10509 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10510 sizeof(WDI_GetFrameLogReqInfoType));
10511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10512 "------> %s " ,__func__);
10513
10514 if(NULL == wdiGetFrameLogInfo)
10515 {
10516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10517 "%s: VOS MEM Alloc Failure", __func__);
10518 VOS_ASSERT(0);
10519 vos_mem_free(pGetFrameLog);
10520 return VOS_STATUS_E_NOMEM;
10521 }
10522
10523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10524 if(NULL == pWdaParams)
10525 {
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10527 "%s: VOS MEM Alloc Failure", __func__);
10528 VOS_ASSERT(0);
10529 vos_mem_free(wdiGetFrameLogInfo);
10530 vos_mem_free(pGetFrameLog);
10531 return VOS_STATUS_E_NOMEM;
10532 }
10533
10534 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10535
10536 pWdaParams->pWdaContext = pWDA;
10537 pWdaParams->wdaMsgParam = pGetFrameLog;
10538 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10539
10540 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10541 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10542 pWdaParams);
10543 if(IS_WDI_STATUS_FAILURE(wstatus))
10544 {
10545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10546 "Failure in get frame log REQ WDI API, free all the memory" );
10547 status = CONVERT_WDI2VOS_STATUS(wstatus);
10548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10549 vos_mem_free(pWdaParams->wdaMsgParam);
10550 vos_mem_free(pWdaParams);
10551 }
10552 return status;
10553}
10554
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010555
10556/*
10557 * FUNCTION: WDA_FatalEventLogsRspCallback
10558 * recieves Flush Logs response from FW
10559 */
10560
10561void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10562 void* pUserData)
10563{
10564 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10565
10566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10567 "<------ %s,wdiStatus:%d " ,
10568 __func__, wdiRsp->wdiStatus);
10569 if(NULL == pWdaParams)
10570 {
10571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10572 "%s: pWdaParams received NULL", __func__);
10573 VOS_ASSERT(0);
10574 return ;
10575 }
10576
10577 if(NULL == pWdaParams->wdaMsgParam)
10578 {
10579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10580 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10581 VOS_ASSERT(0);
10582 vos_mem_free(pWdaParams);
10583 return ;
10584 }
10585
10586 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10587 {
10588 /*
10589 * If it is failure, it means JOb is already posted by FW
10590 * for logging, so for failure scenario also we will get the
10591 * done indication
10592 */
10593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10594 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10595 __func__, wdiRsp->wdiStatus);
10596 }
10597
10598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10599 vos_mem_free(pWdaParams->wdaMsgParam);
10600 vos_mem_free(pWdaParams);
10601
10602 return;
10603
10604}
10605
10606/*
10607 * FUNCTION: WDA_ProcessFatalEventLogsReq
10608 * Request to WDI to send the fatal Event Logs Req.
10609 */
10610
10611VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10612 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10613{
10614 VOS_STATUS status = VOS_STATUS_SUCCESS;
10615 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10616 tWDA_ReqParams *pWdaParams ;
10617 WDI_Status wstatus;
10618
10619
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10621 "------> %s " ,__func__);
10622 if (NULL == pFatalEventLogsReqParam)
10623 {
10624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10625 "%s: pMgmtLoggingInitParam received NULL", __func__);
10626 VOS_ASSERT(0) ;
10627 return VOS_STATUS_E_FAULT;
10628 }
10629 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10630 sizeof(WDI_FatalEventLogsReqInfoType));
10631 if(NULL == wdiFatalEventLogsReqInfo)
10632 {
10633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10634 "%s: VOS MEM Alloc Failure", __func__);
10635 VOS_ASSERT(0);
10636 vos_mem_free(pFatalEventLogsReqParam);
10637 return VOS_STATUS_E_NOMEM;
10638 }
10639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10640 if(NULL == pWdaParams)
10641 {
10642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10643 "%s: VOS MEM Alloc Failure", __func__);
10644 VOS_ASSERT(0);
10645 vos_mem_free(wdiFatalEventLogsReqInfo);
10646 vos_mem_free(pFatalEventLogsReqParam);
10647 return VOS_STATUS_E_NOMEM;
10648 }
10649 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10650 pWdaParams->pWdaContext = pWDA;
10651 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10652 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10653
10654 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10655 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10656 pWdaParams);
10657 if(IS_WDI_STATUS_FAILURE(wstatus))
10658 {
10659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10660 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10661 status = CONVERT_WDI2VOS_STATUS(wstatus);
10662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10663 vos_mem_free(pWdaParams->wdaMsgParam);
10664 vos_mem_free(pWdaParams);
10665 }
10666
10667 return status;
10668
10669}
10670
Siddharth Bhal64246172015-02-27 01:04:37 +053010671/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010672 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010673 *
10674 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010675VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10676 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010677{
10678 VOS_STATUS status = VOS_STATUS_SUCCESS;
10679 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010680 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010681 tWDA_ReqParams *pWdaParams ;
10682
10683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10684 "------> %s " ,__func__);
10685
10686 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010687 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010688 {
10689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010690 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010691 VOS_ASSERT(0) ;
10692 return VOS_STATUS_E_FAULT;
10693 }
10694
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010695 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10696 sizeof(WDI_FWLoggingInitReqInfoType));
10697 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010698 {
10699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10700 "%s: VOS MEM Alloc Failure", __func__);
10701 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010702 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010703 return VOS_STATUS_E_NOMEM;
10704 }
10705
10706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10707 if(NULL == pWdaParams)
10708 {
10709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10710 "%s: VOS MEM Alloc Failure", __func__);
10711 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010712 vos_mem_free(wdiFWLoggingInitInfo);
10713 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010714 return VOS_STATUS_E_NOMEM;
10715 }
10716
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010717 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10718 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10719 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10720 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10721 wdiFWLoggingInitInfo->continuousFrameLogging =
10722 pFWLoggingInitParam->continuousFrameLogging;
10723 wdiFWLoggingInitInfo->minLogBufferSize=
10724 pFWLoggingInitParam->minLogBufferSize;
10725 wdiFWLoggingInitInfo->maxLogBufferSize=
10726 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010727
10728 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010729 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10730 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010731
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010732 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10733 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010734 pWdaParams);
10735 if(IS_WDI_STATUS_FAILURE(wstatus))
10736 {
10737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10738 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10739 status = CONVERT_WDI2VOS_STATUS(wstatus);
10740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10741 vos_mem_free(pWdaParams->wdaMsgParam);
10742 vos_mem_free(pWdaParams);
10743 }
10744
10745 return status;
10746}
10747
Jeff Johnson295189b2012-06-20 16:38:30 -070010748/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010749 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10750 *
10751 */
10752VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10753 tSirRssiMonitorReq *pRssiMonitorReqParam)
10754{
10755 VOS_STATUS status = VOS_STATUS_SUCCESS;
10756 WDI_Status wstatus;
10757 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10758 tWDA_ReqParams *pWdaParams ;
10759
10760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10761 "------> %s " ,__func__);
10762
10763 /* Sanity Check*/
10764 if(NULL == pRssiMonitorReqParam)
10765 {
10766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10767 "%s: pRssiMonitorReqParam received NULL", __func__);
10768 VOS_ASSERT(0) ;
10769 return VOS_STATUS_E_FAULT;
10770 }
10771
10772 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10773 sizeof(WDI_RssiMonitorReqInfoType));
10774 if(NULL == wdiRssiMonitorInfo)
10775 {
10776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10777 "%s: VOS MEM Alloc Failure", __func__);
10778 VOS_ASSERT(0);
10779 vos_mem_free(pRssiMonitorReqParam);
10780 return VOS_STATUS_E_NOMEM;
10781 }
10782
10783 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10784 if(NULL == pWdaParams)
10785 {
10786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10787 "%s: VOS MEM Alloc Failure", __func__);
10788 VOS_ASSERT(0);
10789 vos_mem_free(wdiRssiMonitorInfo);
10790 vos_mem_free(pRssiMonitorReqParam);
10791 return VOS_STATUS_E_NOMEM;
10792 }
10793
10794 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10795 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10796 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10797 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10798 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10799
10800 pWdaParams->pWdaContext = pWDA;
10801 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10802 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10803
10804 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10805 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10806 pWdaParams);
10807 if(IS_WDI_STATUS_FAILURE(wstatus))
10808 {
10809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10810 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10811 status = CONVERT_WDI2VOS_STATUS(wstatus);
10812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10813 vos_mem_free(pWdaParams->wdaMsgParam);
10814 vos_mem_free(pWdaParams);
10815 }
10816
10817 return status;
10818}
10819
10820/*
10821 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10822 *
10823 */
10824VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10825 tSirRssiMonitorReq *pRssiMonitorReqParam)
10826{
10827 VOS_STATUS status = VOS_STATUS_SUCCESS;
10828 WDI_Status wstatus;
10829 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10830 tWDA_ReqParams *pWdaParams ;
10831
10832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10833 "------> %s " ,__func__);
10834
10835 /* Sanity Check*/
10836 if(NULL == pRssiMonitorReqParam)
10837 {
10838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10839 "%s: pRssiMonitorReqParam received NULL", __func__);
10840 VOS_ASSERT(0) ;
10841 return VOS_STATUS_E_FAULT;
10842 }
10843
10844 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10845 sizeof(WDI_RssiMonitorReqInfoType));
10846 if(NULL == wdiRssiMonitorInfo)
10847 {
10848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10849 "%s: VOS MEM Alloc Failure", __func__);
10850 VOS_ASSERT(0);
10851 vos_mem_free(pRssiMonitorReqParam);
10852 return VOS_STATUS_E_NOMEM;
10853 }
10854
10855 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10856 if(NULL == pWdaParams)
10857 {
10858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10859 "%s: VOS MEM Alloc Failure", __func__);
10860 VOS_ASSERT(0);
10861 vos_mem_free(wdiRssiMonitorInfo);
10862 vos_mem_free(pRssiMonitorReqParam);
10863 return VOS_STATUS_E_NOMEM;
10864 }
10865
10866 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10867 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10868 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10869
10870 pWdaParams->pWdaContext = pWDA;
10871 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10872 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10873
10874 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10875 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10876 pWdaParams);
10877 if(IS_WDI_STATUS_FAILURE(wstatus))
10878 {
10879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10880 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10881 status = CONVERT_WDI2VOS_STATUS(wstatus);
10882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10883 vos_mem_free(pWdaParams->wdaMsgParam);
10884 vos_mem_free(pWdaParams);
10885 }
10886
10887 return status;
10888}
10889
10890
10891/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 * FUNCTION: WDA_WdiIndicationCallback
10893 *
10894 */
10895void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10896 void* pUserData)
10897{
10898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010899 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010900}
Jeff Johnson295189b2012-06-20 16:38:30 -070010901/*
10902 * FUNCTION: WDA_ProcessWlanSuspendInd
10903 *
10904 */
10905VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10906 tSirWlanSuspendParam *pWlanSuspendParam)
10907{
10908 WDI_Status wdiStatus;
10909 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010911 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10913 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10914 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10915 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010917 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10918 if(WDI_STATUS_PENDING == wdiStatus)
10919 {
10920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010921 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 }
10923 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10924 {
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010926 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 vos_mem_free(pWlanSuspendParam);
10929 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10930}
10931
Chet Lanctot186b5732013-03-18 10:26:30 -070010932#ifdef WLAN_FEATURE_11W
10933/*
10934 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10935 *
10936 */
10937VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10938 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10939{
10940 WDI_Status wdiStatus;
10941 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10943 "------> %s ", __func__);
10944
10945 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10946 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10947 sizeof(tSirMacAddr));
10948
10949 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10950 wdiExclUnencryptParams.pUserData = pWDA;
10951
10952 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10953 if(WDI_STATUS_PENDING == wdiStatus)
10954 {
10955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10956 "Pending received for %s:%d ", __func__, __LINE__ );
10957 }
10958 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10961 "Failure in %s:%d ", __func__, __LINE__ );
10962 }
10963 vos_mem_free(pExclUnencryptParam);
10964 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10965}
10966#endif
10967
Jeff Johnson295189b2012-06-20 16:38:30 -070010968/*
10969 * FUNCTION: WDA_ProcessWlanResumeCallback
10970 *
10971 */
10972void WDA_ProcessWlanResumeCallback(
10973 WDI_SuspendResumeRspParamsType *resumeRspParams,
10974 void* pUserData)
10975{
10976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010978 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 if(NULL == pWdaParams)
10980 {
10981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010982 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 VOS_ASSERT(0) ;
10984 return ;
10985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10987 {
10988 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010989 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10992 vos_mem_free(pWdaParams->wdaMsgParam);
10993 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010994 return ;
10995}
Jeff Johnson295189b2012-06-20 16:38:30 -070010996/*
10997 * FUNCTION: WDA_ProcessWlanResumeReq
10998 *
10999 */
11000VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11001 tSirWlanResumeParam *pWlanResumeParam)
11002{
11003 WDI_Status wdiStatus;
11004 WDI_ResumeParamsType *wdiResumeParams =
11005 (WDI_ResumeParamsType *)vos_mem_malloc(
11006 sizeof(WDI_ResumeParamsType) ) ;
11007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011009 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 if(NULL == wdiResumeParams)
11011 {
11012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 VOS_ASSERT(0);
11015 return VOS_STATUS_E_NOMEM;
11016 }
11017 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11018 if(NULL == pWdaParams)
11019 {
11020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011022 VOS_ASSERT(0);
11023 vos_mem_free(wdiResumeParams);
11024 return VOS_STATUS_E_NOMEM;
11025 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11027 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011029 wdiResumeParams->wdiReqStatusCB = NULL;
11030 pWdaParams->wdaMsgParam = pWlanResumeParam;
11031 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11032 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11034 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11035 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11037 {
11038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11039 "Failure in Host Resume REQ WDI API, free all the memory " );
11040 VOS_ASSERT(0);
11041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11042 vos_mem_free(pWdaParams->wdaMsgParam);
11043 vos_mem_free(pWdaParams);
11044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11046}
11047
Jeff Johnson295189b2012-06-20 16:38:30 -070011048/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011049 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011050 *
11051 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011052void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011053{
11054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011056 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 if(NULL == pWdaParams)
11058 {
11059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011060 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011061 VOS_ASSERT(0) ;
11062 return ;
11063 }
11064
11065 vos_mem_free(pWdaParams->wdaMsgParam) ;
11066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11067 vos_mem_free(pWdaParams) ;
11068 /*
11069 * No respone required for SetBeaconFilter req so just free the request
11070 * param here
11071 */
11072
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 return ;
11074}
Jeff Johnson295189b2012-06-20 16:38:30 -070011075/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011076 * FUNCTION: WDA_SetBeaconFilterReqCallback
11077 * Free memory.
11078 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11079 */
11080void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11081{
11082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11083
11084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11085 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11086
11087 if(NULL == pWdaParams)
11088 {
11089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11090 "%s: pWdaParams received NULL", __func__);
11091 VOS_ASSERT(0);
11092 return;
11093 }
11094
11095 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11096 {
11097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11098 vos_mem_free(pWdaParams->wdaMsgParam);
11099 vos_mem_free(pWdaParams);
11100 }
11101
11102 return;
11103}
11104/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 * FUNCTION: WDA_SetBeaconFilterReq
11106 * Request to WDI to send the beacon filtering related information.
11107 */
11108VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11109 tBeaconFilterMsg* pBeaconFilterInfo)
11110{
11111 WDI_Status status = WDI_STATUS_SUCCESS;
11112 tANI_U8 *dstPtr, *srcPtr;
11113 tANI_U8 filterLength;
11114 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11115 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11116 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11117 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011119 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 if(NULL == wdiBeaconFilterInfo)
11121 {
11122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011123 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011124 VOS_ASSERT(0);
11125 return VOS_STATUS_E_NOMEM;
11126 }
11127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11128 if(NULL == pWdaParams)
11129 {
11130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 VOS_ASSERT(0);
11133 vos_mem_free(wdiBeaconFilterInfo);
11134 return VOS_STATUS_E_NOMEM;
11135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11137 pBeaconFilterInfo->beaconInterval;
11138 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11139 pBeaconFilterInfo->capabilityInfo;
11140 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11141 pBeaconFilterInfo->capabilityMask;
11142 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011143
11144 //Fill the BssIdx
11145 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11146
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 //Fill structure with info contained in the beaconFilterTable
11148 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11149 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11150 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11151 if(WDI_BEACON_FILTER_LEN < filterLength)
11152 {
11153 filterLength = WDI_BEACON_FILTER_LEN;
11154 }
11155 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011156 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11157 wdiBeaconFilterInfo->pUserData = pWdaParams;
11158
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 /* Store param pointer as passed in by caller */
11160 /* store Params pass it to WDI */
11161 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11162 pWdaParams->pWdaContext = pWDA;
11163 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11164
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011166 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011167 if(IS_WDI_STATUS_FAILURE(status))
11168 {
11169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11170 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11171 vos_mem_free(pWdaParams->wdaMsgParam) ;
11172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11173 vos_mem_free(pWdaParams) ;
11174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 return CONVERT_WDI2VOS_STATUS(status) ;
11176}
Jeff Johnson295189b2012-06-20 16:38:30 -070011177/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011178 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 *
11180 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011181void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011182{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11184
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011186 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011187
11188 if(NULL == pWdaParams)
11189 {
11190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011191 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011192 VOS_ASSERT(0) ;
11193 return ;
11194 }
11195
11196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11197 vos_mem_free(pWdaParams->wdaMsgParam);
11198 vos_mem_free(pWdaParams);
11199
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 //print a msg, nothing else to do
11201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011202 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 return ;
11204}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011205/*
11206 * FUNCTION: WDA_RemBeaconFilterReqCallback
11207 * Free memory.
11208 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11209 */
11210void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11211{
11212 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11213
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11215 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11216
11217 if(NULL == pWdaParams)
11218 {
11219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11220 "%s: pWdaParams received NULL", __func__);
11221 VOS_ASSERT(0);
11222 return;
11223 }
11224
11225 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11226 {
11227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11228 vos_mem_free(pWdaParams->wdaMsgParam);
11229 vos_mem_free(pWdaParams);
11230 }
11231
11232 return;
11233}
Jeff Johnson295189b2012-06-20 16:38:30 -070011234 // TODO: PE does not have this feature for now implemented,
11235 // but the support for removing beacon filter exists between
11236 // HAL and FW. This function can be called whenever PE defines
11237 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011238/*
11239 * FUNCTION: WDA_RemBeaconFilterReq
11240 * Request to WDI to send the removal of beacon filtering related information.
11241 */
11242VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11243 tRemBeaconFilterMsg* pBeaconFilterInfo)
11244{
11245 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011246 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011247 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11248 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11249 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011250 tWDA_ReqParams *pWdaParams ;
11251
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011253 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 if(NULL == wdiBeaconFilterInfo)
11255 {
11256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011258 VOS_ASSERT(0);
11259 return VOS_STATUS_E_NOMEM;
11260 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011261 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11262 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011263 {
11264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011267 vos_mem_free(wdiBeaconFilterInfo);
11268 vos_mem_free(pBeaconFilterInfo);
11269 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011270 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011271
11272 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11273 pBeaconFilterInfo->ucIeCount;
11274 //Fill structure with info contained in the ucRemIeId
11275 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11276 pBeaconFilterInfo->ucRemIeId,
11277 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11278 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11279 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011280
11281 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011282 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011284 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11285
11286 pWdaParams->pWdaContext = pWDA;
11287
Jeff Johnson43971f52012-07-17 12:26:56 -070011288 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011289 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011290 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011291 {
11292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11293 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011294 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11296 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011297 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011299 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011300}
Jeff Johnson295189b2012-06-20 16:38:30 -070011301/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011302 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011303 *
11304 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011305void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011306{
11307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011309 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 if(NULL == pWdaParams)
11311 {
11312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011313 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 VOS_ASSERT(0) ;
11315 return ;
11316 }
11317
11318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11319 vos_mem_free(pWdaParams) ;
11320
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 return ;
11322}
Jeff Johnson295189b2012-06-20 16:38:30 -070011323/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011324 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11325 * Free memory.
11326 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11327 */
11328void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11329{
11330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11331
11332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11333 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11334
11335 if(NULL == pWdaParams)
11336 {
11337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11338 "%s: pWdaParams received NULL", __func__);
11339 VOS_ASSERT(0);
11340 return;
11341 }
11342
11343 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11344 {
11345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11346 vos_mem_free(pWdaParams);
11347 }
11348
11349 return;
11350}
11351/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 * FUNCTION: WDA_SetRSSIThresholdsReq
11353 * Request to WDI to set the RSSI thresholds (sta mode).
11354 */
11355VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11356{
11357 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011358 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 tWDA_CbContext *pWDA = NULL ;
11360 v_PVOID_t pVosContext = NULL;
11361 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11362 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11363 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11364 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011367 if(NULL == wdiRSSIThresholdsInfo)
11368 {
11369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 VOS_ASSERT(0);
11372 return VOS_STATUS_E_NOMEM;
11373 }
11374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11375 if(NULL == pWdaParams)
11376 {
11377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011379 VOS_ASSERT(0);
11380 vos_mem_free(wdiRSSIThresholdsInfo);
11381 return VOS_STATUS_E_NOMEM;
11382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11385 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11386 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011387 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11388 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11389 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11391 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11392 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011393 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11394 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11396 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11397
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 /* Store param pointer as passed in by caller */
11399 /* store Params pass it to WDI */
11400 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11401 pWdaParams->pWdaContext = pWDA;
11402 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011403 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011404 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011405 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 {
11407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11408 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011409 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11411 vos_mem_free(pWdaParams) ;
11412 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011413 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011414
11415}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011416/*
Yue Madb90ac12013-04-04 13:39:13 -070011417 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 *
11419 */
Yue Madb90ac12013-04-04 13:39:13 -070011420void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011421{
11422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11423
11424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011425 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 if(NULL == pWdaParams)
11427 {
11428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011429 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 VOS_ASSERT(0) ;
11431 return ;
11432 }
11433
11434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11435 vos_mem_free(pWdaParams->wdaMsgParam);
11436 vos_mem_free(pWdaParams) ;
11437
11438 //print a msg, nothing else to do
11439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011440 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011441 return ;
11442}
Jeff Johnson295189b2012-06-20 16:38:30 -070011443/*
Yue Madb90ac12013-04-04 13:39:13 -070011444 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011445 * Free memory.
11446 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011447 */
11448void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11449{
11450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11451
11452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11453 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11454
11455 if(NULL == pWdaParams)
11456 {
11457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11458 "%s: Invalid pWdaParams pointer", __func__);
11459 VOS_ASSERT(0);
11460 return;
11461 }
11462
11463 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11464 {
11465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11466 vos_mem_free(pWdaParams->wdaMsgParam);
11467 vos_mem_free(pWdaParams);
11468 }
11469
11470 return;
11471}
11472/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 * FUNCTION: WDA_ProcessHostOffloadReq
11474 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11475 * to broadcast traffic (sta mode).
11476 */
11477VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11478 tSirHostOffloadReq *pHostOffloadParams)
11479{
11480 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011481 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11483 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11484 sizeof(WDI_HostOffloadReqParamsType)) ;
11485 tWDA_ReqParams *pWdaParams ;
11486
11487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011488 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011489
11490 if(NULL == wdiHostOffloadInfo)
11491 {
11492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011494 VOS_ASSERT(0);
11495 return VOS_STATUS_E_NOMEM;
11496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11498 if(NULL == pWdaParams)
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 VOS_ASSERT(0);
11503 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011504 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 return VOS_STATUS_E_NOMEM;
11506 }
11507
11508 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11509 pHostOffloadParams->offloadType;
11510 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11511 pHostOffloadParams->enableOrDisable;
11512
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011513 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11514 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11515
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11517 {
11518 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11519 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11520 pHostOffloadParams->params.hostIpv4Addr,
11521 4);
11522 break;
11523 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11524 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11525 pHostOffloadParams->params.hostIpv6Addr,
11526 16);
11527 break;
11528 case SIR_IPV6_NS_OFFLOAD:
11529 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11530 pHostOffloadParams->params.hostIpv6Addr,
11531 16);
11532
11533#ifdef WLAN_NS_OFFLOAD
11534 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11535 {
11536 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11537 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11538 16);
11539 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11540 }
11541 else
11542 {
11543 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11544 }
11545
11546 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11547 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11548 16);
11549 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11550 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11551 6);
11552
11553 //Only two are supported so let's go through them without a loop
11554 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11555 {
11556 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11557 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11558 16);
11559 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11560 }
11561 else
11562 {
11563 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11564 }
11565
11566 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11567 {
11568 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11569 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11570 16);
11571 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11572 }
11573 else
11574 {
11575 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11576 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011577 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11578 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011579 break;
11580#endif //WLAN_NS_OFFLOAD
11581 default:
11582 {
11583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11584 "No Handling for Offload Type %x in WDA "
11585 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11586 //WDA_VOS_ASSERT(0) ;
11587 }
11588 }
Yue Madb90ac12013-04-04 13:39:13 -070011589 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11590 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011591
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011593 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011594 /* store Params pass it to WDI */
11595 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11596 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011597
Jeff Johnson295189b2012-06-20 16:38:30 -070011598
Jeff Johnson43971f52012-07-17 12:26:56 -070011599 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011600 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011601
Jeff Johnson43971f52012-07-17 12:26:56 -070011602 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011603 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053011604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053011605 "Failure in host offload REQ WDI API, free all the memory %d",
11606 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011607 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11609 vos_mem_free(pWdaParams->wdaMsgParam);
11610 vos_mem_free(pWdaParams) ;
11611 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011612 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011613
11614}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011615/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011616 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011617 *
11618 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011619void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011620{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011621 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11622
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011624 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011625
11626 if(NULL == pWdaParams)
11627 {
11628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011629 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011630 VOS_ASSERT(0) ;
11631 return ;
11632 }
11633
11634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11635 vos_mem_free(pWdaParams->wdaMsgParam);
11636 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011637
Jeff Johnson295189b2012-06-20 16:38:30 -070011638 //print a msg, nothing else to do
11639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011640 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011641 return ;
11642}
Jeff Johnson295189b2012-06-20 16:38:30 -070011643/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011644 * FUNCTION: WDA_KeepAliveReqCallback
11645 * Free memory.
11646 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11647 */
11648void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11649{
11650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11651
11652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11653 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11654
11655 if(NULL == pWdaParams)
11656 {
11657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11658 "%s: pWdaParams received NULL", __func__);
11659 VOS_ASSERT(0);
11660 return;
11661 }
11662
11663 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11664 {
11665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11666 vos_mem_free(pWdaParams->wdaMsgParam);
11667 vos_mem_free(pWdaParams);
11668 }
11669
11670 return;
11671}
11672/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 * FUNCTION: WDA_ProcessKeepAliveReq
11674 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11675 * wakeup due to broadcast traffic (sta mode).
11676 */
11677VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11678 tSirKeepAliveReq *pKeepAliveParams)
11679{
11680 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011681 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11683 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11684 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011685 tWDA_ReqParams *pWdaParams;
11686
Jeff Johnson295189b2012-06-20 16:38:30 -070011687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011689 if(NULL == wdiKeepAliveInfo)
11690 {
11691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011694 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 return VOS_STATUS_E_NOMEM;
11696 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011697
11698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11699 if(NULL == pWdaParams)
11700 {
11701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011702 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011703 VOS_ASSERT(0);
11704 vos_mem_free(wdiKeepAliveInfo);
11705 vos_mem_free(pKeepAliveParams);
11706 return VOS_STATUS_E_NOMEM;
11707 }
11708
Jeff Johnson295189b2012-06-20 16:38:30 -070011709 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11710 pKeepAliveParams->packetType;
11711 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11712 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011713
11714 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11715 pKeepAliveParams->bssId,
11716 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011717
11718 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11719 {
11720 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11721 pKeepAliveParams->hostIpv4Addr,
11722 SIR_IPV4_ADDR_LEN);
11723 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11724 pKeepAliveParams->destIpv4Addr,
11725 SIR_IPV4_ADDR_LEN);
11726 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11727 pKeepAliveParams->destMacAddr,
11728 SIR_MAC_ADDR_LEN);
11729 }
11730 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11731 {
11732 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11733 SIR_IPV4_ADDR_LEN,
11734 0);
11735 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11736 SIR_IPV4_ADDR_LEN,
11737 0);
11738 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11739 SIR_MAC_ADDR_LEN,
11740 0);
11741 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011742 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11743 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011744
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011746 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011748 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11749 pWdaParams->pWdaContext = pWDA;
11750
Jeff Johnson295189b2012-06-20 16:38:30 -070011751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11752 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11753 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11754 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11755 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11757 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11758 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11759 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11760 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11762 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11763 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11764 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11765 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11766 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11767 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11768 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11770 "TimePeriod %d PacketType %d",
11771 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11772 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011773 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011774 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011775
Jeff Johnson43971f52012-07-17 12:26:56 -070011776 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011777 {
11778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11779 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011780 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11782 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011783 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011784 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011785 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011786
11787}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011788/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011789 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 *
11791 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011792void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011793 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11794 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011795{
11796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 if(NULL == pWdaParams)
11800 {
11801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011802 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 VOS_ASSERT(0) ;
11804 return ;
11805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11807 vos_mem_free(pWdaParams->wdaMsgParam);
11808 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011809 return ;
11810}
Jeff Johnson295189b2012-06-20 16:38:30 -070011811/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011812 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11813 * Free memory.
11814 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11815 */
11816void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11817{
11818 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11819
11820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11821 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11822
11823 if(NULL == pWdaParams)
11824 {
11825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11826 "%s: pWdaParams received NULL", __func__);
11827 VOS_ASSERT(0);
11828 return;
11829 }
11830
11831 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11832 {
11833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11834 vos_mem_free(pWdaParams->wdaMsgParam);
11835 vos_mem_free(pWdaParams);
11836 }
11837
11838 return;
11839}
11840
11841/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11843 * Request to WDI to add WOWL Bcast pattern
11844 */
11845VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11846 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11847{
11848 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011849 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11851 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11852 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11853 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011855 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011856 if(NULL == wdiWowlAddBcPtrnInfo)
11857 {
11858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011860 VOS_ASSERT(0);
11861 return VOS_STATUS_E_NOMEM;
11862 }
11863 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11864 if(NULL == pWdaParams)
11865 {
11866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 VOS_ASSERT(0);
11869 vos_mem_free(wdiWowlAddBcPtrnInfo);
11870 return VOS_STATUS_E_NOMEM;
11871 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011872 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11873 pWowlAddBcPtrnParams->ucPatternId;
11874 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11875 pWowlAddBcPtrnParams->ucPatternByteOffset;
11876 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11877 pWowlAddBcPtrnParams->ucPatternMaskSize;
11878 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11879 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011880 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11881 {
11882 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11883 pWowlAddBcPtrnParams->ucPattern,
11884 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11885 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11886 pWowlAddBcPtrnParams->ucPatternMask,
11887 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11888 }
11889 else
11890 {
11891 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11892 pWowlAddBcPtrnParams->ucPattern,
11893 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11894 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11895 pWowlAddBcPtrnParams->ucPatternMask,
11896 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11897
11898 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11899 pWowlAddBcPtrnParams->ucPatternExt,
11900 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11901 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11902 pWowlAddBcPtrnParams->ucPatternMaskExt,
11903 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11904 }
11905
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011906 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11907 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11908
Yue Ma7f44bbe2013-04-12 11:47:39 -070011909 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11910 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011911 /* Store param pointer as passed in by caller */
11912 /* store Params pass it to WDI */
11913 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11914 pWdaParams->pWdaContext = pWDA;
11915 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011916 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011917 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011918 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 {
11920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11921 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011922 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 vos_mem_free(pWdaParams->wdaMsgParam) ;
11924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11925 vos_mem_free(pWdaParams) ;
11926 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011927 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011928
11929}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011930/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011931 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011932 *
11933 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011934void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011935 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11936 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011937{
11938 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011940 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 if(NULL == pWdaParams)
11942 {
11943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011944 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011945 VOS_ASSERT(0) ;
11946 return ;
11947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11949 vos_mem_free(pWdaParams->wdaMsgParam);
11950 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 return ;
11952}
Jeff Johnson295189b2012-06-20 16:38:30 -070011953/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011954 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11955 * Free memory.
11956 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11957 */
11958void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11959{
11960 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11961
11962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11963 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11964
11965 if(NULL == pWdaParams)
11966 {
11967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11968 "%s: pWdaParams received NULL", __func__);
11969 VOS_ASSERT(0);
11970 return;
11971 }
11972
11973 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11974 {
11975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11976 vos_mem_free(pWdaParams->wdaMsgParam);
11977 vos_mem_free(pWdaParams);
11978 }
11979
11980 return;
11981}
11982/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011983 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11984 * Request to WDI to delete WOWL Bcast pattern
11985 */
11986VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11987 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11988{
11989 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011990 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11992 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11993 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11994 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011996 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011997 if(NULL == wdiWowlDelBcPtrnInfo)
11998 {
11999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012001 VOS_ASSERT(0);
12002 return VOS_STATUS_E_NOMEM;
12003 }
12004 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12005 if(NULL == pWdaParams)
12006 {
12007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012009 VOS_ASSERT(0);
12010 vos_mem_free(wdiWowlDelBcPtrnInfo);
12011 return VOS_STATUS_E_NOMEM;
12012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012013 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12014 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012015
12016 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12017 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12018
Yue Ma7f44bbe2013-04-12 11:47:39 -070012019 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12020 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012021 /* Store param pointer as passed in by caller */
12022 /* store Params pass it to WDI */
12023 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12024 pWdaParams->pWdaContext = pWDA;
12025 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012026 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012027 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012028 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 {
12030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12031 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012032 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012033 vos_mem_free(pWdaParams->wdaMsgParam) ;
12034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12035 vos_mem_free(pWdaParams) ;
12036 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012037 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012038
12039}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012040/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012041 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012042 *
12043 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012044void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012045{
12046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012047 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012048 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012050 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012051 if(NULL == pWdaParams)
12052 {
12053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012054 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012055 VOS_ASSERT(0) ;
12056 return ;
12057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012058 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012059 if (NULL == pWDA)
12060 {
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12062 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012063
12064 if(pWdaParams->wdaWdiApiMsgParam)
12065 {
12066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12067 }
12068 vos_mem_free(pWdaParams);
12069
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012070 VOS_ASSERT(0);
12071 return ;
12072 }
12073
Jeff Johnson295189b2012-06-20 16:38:30 -070012074 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12075
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012076 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12077
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12079 vos_mem_free(pWdaParams) ;
12080
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012081 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012082 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012083 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012084 return ;
12085}
Jeff Johnson295189b2012-06-20 16:38:30 -070012086/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012087 * FUNCTION: WDA_WowlEnterReqCallback
12088 * Free memory and send WOWL Enter RSP back to PE.
12089 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12090 */
12091void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12092{
12093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012094 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012095 tSirHalWowlEnterParams *pWowlEnterParams;
12096
12097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12098 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12099
12100 if(NULL == pWdaParams)
12101 {
12102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12103 "%s: pWdaParams received NULL", __func__);
12104 VOS_ASSERT(0);
12105 return;
12106 }
12107
12108 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012109 if (NULL == pWDA)
12110 {
12111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12112 "%s:pWDA is NULL", __func__);
12113 VOS_ASSERT(0);
12114 return ;
12115 }
12116
Yue Ma7f44bbe2013-04-12 11:47:39 -070012117 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12118 pWowlEnterParams->status = wdiStatus;
12119
12120 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12121 {
12122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12123 vos_mem_free(pWdaParams);
12124 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12125 }
12126
12127 return;
12128}
12129/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012130 * FUNCTION: WDA_ProcessWowlEnterReq
12131 * Request to WDI to enter WOWL
12132 */
12133VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12134 tSirHalWowlEnterParams *pWowlEnterParams)
12135{
12136 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012137 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12139 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12140 sizeof(WDI_WowlEnterReqParamsType)) ;
12141 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012143 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 if(NULL == wdiWowlEnterInfo)
12145 {
12146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012147 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012148 VOS_ASSERT(0);
12149 return VOS_STATUS_E_NOMEM;
12150 }
12151 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12152 if(NULL == pWdaParams)
12153 {
12154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 VOS_ASSERT(0);
12157 vos_mem_free(wdiWowlEnterInfo);
12158 return VOS_STATUS_E_NOMEM;
12159 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012160
12161 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12162
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12164 pWowlEnterParams->magicPtrn,
12165 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012166 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12167 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012168 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12169 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012170 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12171 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12173 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12175 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012176 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12177 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012178 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12179 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012180 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12181 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012182#ifdef WLAN_WAKEUP_EVENTS
12183 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12184 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12185
12186 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12187 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12188
12189 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12190 pWowlEnterParams->ucWowNetScanOffloadMatch;
12191
12192 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12193 pWowlEnterParams->ucWowGTKRekeyError;
12194
12195 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12196 pWowlEnterParams->ucWoWBSSConnLoss;
12197#endif // WLAN_WAKEUP_EVENTS
12198
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012199 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12200 pWowlEnterParams->bssIdx;
12201
Yue Ma7f44bbe2013-04-12 11:47:39 -070012202 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12203 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012204 /* Store param pointer as passed in by caller */
12205 /* store Params pass it to WDI */
12206 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12207 pWdaParams->pWdaContext = pWDA;
12208 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012209 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012210 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012211 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012212 {
12213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12214 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012215 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012216 vos_mem_free(pWdaParams->wdaMsgParam) ;
12217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12218 vos_mem_free(pWdaParams) ;
12219 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012220 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012221
12222}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012223/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012224 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012225 *
12226 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012227void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012228{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012230 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012231 tSirHalWowlExitParams *pWowlExitParams;
12232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012233 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012234 if(NULL == pWdaParams)
12235 {
12236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012237 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012238 VOS_ASSERT(0) ;
12239 return ;
12240 }
12241 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012242 if (NULL == pWDA)
12243 {
12244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12245 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012246
12247 if(pWdaParams->wdaWdiApiMsgParam)
12248 {
12249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12250 }
12251 vos_mem_free(pWdaParams);
12252
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012253 VOS_ASSERT(0);
12254 return ;
12255 }
12256
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012257 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12258
12259 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012260 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012261
12262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12263 vos_mem_free(pWdaParams) ;
12264
Jeff Johnson295189b2012-06-20 16:38:30 -070012265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012266 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012267 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012268 return ;
12269}
Jeff Johnson295189b2012-06-20 16:38:30 -070012270/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012271 * FUNCTION: WDA_WowlExitReqCallback
12272 * Free memory and send WOWL Exit RSP back to PE.
12273 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12274 */
12275void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12276{
12277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012278 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012279 tSirHalWowlExitParams *pWowlExitParams;
12280
12281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12282 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12283
12284 if(NULL == pWdaParams)
12285 {
12286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12287 "%s: pWdaParams received NULL", __func__);
12288 VOS_ASSERT(0);
12289 return;
12290 }
12291
12292 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012293 if (NULL == pWDA)
12294 {
12295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12296 "%s:pWDA is NULL", __func__);
12297 VOS_ASSERT(0);
12298 return ;
12299 }
12300
Yue Ma7f44bbe2013-04-12 11:47:39 -070012301 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12302 pWowlExitParams->status = wdiStatus;
12303
12304 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12305 {
12306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12307 vos_mem_free(pWdaParams);
12308 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12309 }
12310
12311 return;
12312}
12313/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 * FUNCTION: WDA_ProcessWowlExitReq
12315 * Request to WDI to add WOWL Bcast pattern
12316 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012317VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12318 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012319{
12320 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012321 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012322 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12323 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12324 sizeof(WDI_WowlExitReqParamsType)) ;
12325 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012327 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012328 if(NULL == wdiWowlExitInfo)
12329 {
12330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012331 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012332 VOS_ASSERT(0);
12333 return VOS_STATUS_E_NOMEM;
12334 }
12335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12336 if(NULL == pWdaParams)
12337 {
12338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012339 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012340 VOS_ASSERT(0);
12341 vos_mem_free(wdiWowlExitInfo);
12342 return VOS_STATUS_E_NOMEM;
12343 }
12344
12345 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12346 pWowlExitParams->bssIdx;
12347
Yue Ma7f44bbe2013-04-12 11:47:39 -070012348 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12349 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012350
12351 /* Store param pointer as passed in by caller */
12352 /* store Params pass it to WDI */
12353 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12354 pWdaParams->pWdaContext = pWDA;
12355 pWdaParams->wdaMsgParam = pWowlExitParams;
12356
12357 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012358 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012359
Jeff Johnson43971f52012-07-17 12:26:56 -070012360 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012361 {
12362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12363 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012364 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12366 vos_mem_free(pWdaParams->wdaMsgParam);
12367 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012368 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012369 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012370}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012371/*
12372 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12373 * Request to WDI to determine whether a given station is capable of
12374 * using HW-based frame translation
12375 */
12376v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12377 tANI_U8 staIdx)
12378{
12379 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12380}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012381
12382/*
12383 * FUNCTION: WDA_IsSelfSTA
12384 * Request to WDI to determine whether a given STAID is self station
12385 * index.
12386 */
12387v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12388{
12389
12390 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12391
Girish Gowli05cf44e2014-06-12 21:53:37 +053012392 if (NULL != pWDA)
12393 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12394 else
12395 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012396}
Jeff Johnson295189b2012-06-20 16:38:30 -070012397/*
12398 * FUNCTION: WDA_NvDownloadReqCallback
12399 * send NV Download RSP back to PE
12400 */
12401void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12402 void* pUserData)
12403{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012404
12405 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012406 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012407
Jeff Johnson295189b2012-06-20 16:38:30 -070012408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012409 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012410
12411 if(NULL == pWdaParams)
12412 {
12413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012414 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012415 VOS_ASSERT(0) ;
12416 return ;
12417 }
12418
12419 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012420 if (NULL == pWDA)
12421 {
12422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12423 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012424
12425 if(pWdaParams->wdaWdiApiMsgParam)
12426 {
12427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12428 }
12429 vos_mem_free(pWdaParams);
12430
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012431 VOS_ASSERT(0);
12432 return ;
12433 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012434
Jeff Johnson295189b2012-06-20 16:38:30 -070012435 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12437 vos_mem_free(pWdaParams);
12438
Jeff Johnson295189b2012-06-20 16:38:30 -070012439 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012440 return ;
12441}
Jeff Johnson295189b2012-06-20 16:38:30 -070012442/*
12443 * FUNCTION: WDA_ProcessNvDownloadReq
12444 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12445 */
12446VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12447{
12448 /* Initialize the local Variables*/
12449 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12450 v_VOID_t *pNvBuffer=NULL;
12451 v_SIZE_t bufferSize = 0;
12452 WDI_Status status = WDI_STATUS_E_FAILURE;
12453 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012454 tWDA_ReqParams *pWdaParams ;
12455
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012457 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012458 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012459 {
12460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012461 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012462 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012463 return VOS_STATUS_E_FAILURE;
12464 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012465
Jeff Johnson295189b2012-06-20 16:38:30 -070012466 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012467 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12468
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12470 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 if(NULL == wdiNvDownloadReqParam)
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012475 VOS_ASSERT(0);
12476 return VOS_STATUS_E_NOMEM;
12477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012478 /* Copy Params to wdiNvDownloadReqParam*/
12479 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12480 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012481
12482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12483 if(NULL == pWdaParams)
12484 {
12485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012486 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012487 VOS_ASSERT(0);
12488 vos_mem_free(wdiNvDownloadReqParam);
12489 return VOS_STATUS_E_NOMEM;
12490 }
12491
Jeff Johnson295189b2012-06-20 16:38:30 -070012492 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012493 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12494 pWdaParams->wdaMsgParam = NULL;
12495 pWdaParams->pWdaContext = pWDA;
12496
12497
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012499
Jeff Johnson295189b2012-06-20 16:38:30 -070012500 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012501 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12502
Jeff Johnson295189b2012-06-20 16:38:30 -070012503 if(IS_WDI_STATUS_FAILURE(status))
12504 {
12505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12506 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12508 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012511}
12512/*
12513 * FUNCTION: WDA_FlushAcReqCallback
12514 * send Flush AC RSP back to TL
12515 */
12516void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12517{
12518 vos_msg_t wdaMsg = {0} ;
12519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12520 tFlushACReq *pFlushACReqParams;
12521 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012524 if(NULL == pWdaParams)
12525 {
12526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012528 VOS_ASSERT(0) ;
12529 return ;
12530 }
12531
12532 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12533 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12534 if(NULL == pFlushACRspParams)
12535 {
12536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012539 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012540 return ;
12541 }
12542 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12543 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12544 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12545 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12546 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012547 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012548 vos_mem_free(pWdaParams->wdaMsgParam) ;
12549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12550 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012551 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12552 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12553 // POST message to TL
12554 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12555
Jeff Johnson295189b2012-06-20 16:38:30 -070012556 return ;
12557}
Jeff Johnson295189b2012-06-20 16:38:30 -070012558/*
12559 * FUNCTION: WDA_ProcessFlushAcReq
12560 * Request to WDI to Update the DELBA REQ params.
12561 */
12562VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12563 tFlushACReq *pFlushAcReqParams)
12564{
12565 WDI_Status status = WDI_STATUS_SUCCESS ;
12566 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12567 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12568 sizeof(WDI_FlushAcReqParamsType)) ;
12569 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012570 if(NULL == wdiFlushAcReqParam)
12571 {
12572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012573 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012574 VOS_ASSERT(0);
12575 return VOS_STATUS_E_NOMEM;
12576 }
12577 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12578 if(NULL == pWdaParams)
12579 {
12580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012582 VOS_ASSERT(0);
12583 vos_mem_free(wdiFlushAcReqParam);
12584 return VOS_STATUS_E_NOMEM;
12585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012588 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12589 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12590 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12591 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012592 /* Store Flush AC pointer, as this will be used for response */
12593 /* store Params pass it to WDI */
12594 pWdaParams->pWdaContext = pWDA;
12595 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12596 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012597 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12598 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012599 if(IS_WDI_STATUS_FAILURE(status))
12600 {
12601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12602 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12603 vos_mem_free(pWdaParams->wdaMsgParam) ;
12604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12605 vos_mem_free(pWdaParams) ;
12606 //TODO: respond to TL with failure
12607 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012608 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012609}
Jeff Johnson295189b2012-06-20 16:38:30 -070012610/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012611 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012612 *
12613 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012614void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012615{
12616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012617 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012618 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012619
12620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012622 if(NULL == pWdaParams)
12623 {
12624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012626 VOS_ASSERT(0) ;
12627 return ;
12628 }
12629 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012630 if (NULL == pWDA)
12631 {
12632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12633 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012634 vos_mem_free(pWdaParams->wdaMsgParam) ;
12635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12636 vos_mem_free(pWdaParams) ;
12637
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012638 VOS_ASSERT(0);
12639 return ;
12640 }
12641
Jeff Johnson295189b2012-06-20 16:38:30 -070012642 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12643 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12644 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12645 {
12646 pWDA->wdaAmpSessionOn = VOS_FALSE;
12647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 vos_mem_free(pWdaParams->wdaMsgParam) ;
12649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12650 vos_mem_free(pWdaParams) ;
12651 /*
12652 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12653 * param here
12654 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012655 return ;
12656}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012657/*
12658 * FUNCTION: WDA_BtAmpEventReqCallback
12659 * Free memory.
12660 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12661 */
12662void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12663{
12664 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012665 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012666 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012667
Yue Ma7f44bbe2013-04-12 11:47:39 -070012668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12669 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12670
12671 if(NULL == pWdaParams)
12672 {
12673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12674 "%s: pWdaParams received NULL", __func__);
12675 VOS_ASSERT(0);
12676 return;
12677 }
12678
12679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012680 if (NULL == pWDA)
12681 {
12682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12683 "%s:pWDA is NULL", __func__);
12684 VOS_ASSERT(0);
12685 return ;
12686 }
12687
Yue Ma7f44bbe2013-04-12 11:47:39 -070012688 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12689
12690 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12691 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12692 {
12693 pWDA->wdaAmpSessionOn = VOS_FALSE;
12694 }
12695
12696 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12697 {
12698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12699 vos_mem_free(pWdaParams->wdaMsgParam);
12700 vos_mem_free(pWdaParams);
12701 }
12702
12703 return;
12704}
Jeff Johnson295189b2012-06-20 16:38:30 -070012705/*
12706 * FUNCTION: WDA_ProcessBtAmpEventReq
12707 * Request to WDI to Update with BT AMP events.
12708 */
12709VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12710 tSmeBtAmpEvent *pBtAmpEventParams)
12711{
12712 WDI_Status status = WDI_STATUS_SUCCESS ;
12713 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12714 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12715 sizeof(WDI_BtAmpEventParamsType)) ;
12716 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012718 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012719 if(NULL == wdiBtAmpEventParam)
12720 {
12721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012722 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012723 VOS_ASSERT(0);
12724 return VOS_STATUS_E_NOMEM;
12725 }
12726 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12727 if(NULL == pWdaParams)
12728 {
12729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012730 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012731 VOS_ASSERT(0);
12732 vos_mem_free(wdiBtAmpEventParam);
12733 return VOS_STATUS_E_NOMEM;
12734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012735 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12736 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012737 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12738 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012739 /* Store BT AMP event pointer, as this will be used for response */
12740 /* store Params pass it to WDI */
12741 pWdaParams->pWdaContext = pWDA;
12742 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12743 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012744 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012745 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012746 if(IS_WDI_STATUS_FAILURE(status))
12747 {
12748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12749 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12750 vos_mem_free(pWdaParams->wdaMsgParam) ;
12751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12752 vos_mem_free(pWdaParams) ;
12753 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012754 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12755 {
12756 pWDA->wdaAmpSessionOn = VOS_TRUE;
12757 }
12758 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012759}
12760
Jeff Johnson295189b2012-06-20 16:38:30 -070012761/*
12762 * FUNCTION: WDA_FTMCommandReqCallback
12763 * Handle FTM CMD response came from HAL
12764 * Route responce to HDD FTM
12765 */
12766void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12767 void *usrData)
12768{
12769 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012770 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12771 {
12772 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012773 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012774 return;
12775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012776 /* Release Current FTM Command Request */
12777 vos_mem_free(pWDA->wdaFTMCmdReq);
12778 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012779 /* Post FTM Responce to HDD FTM */
12780 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012781 return;
12782}
Jeff Johnson295189b2012-06-20 16:38:30 -070012783/*
12784 * FUNCTION: WDA_ProcessFTMCommand
12785 * Send FTM command to WDI
12786 */
12787VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12788 tPttMsgbuffer *pPTTFtmCmd)
12789{
12790 WDI_Status status = WDI_STATUS_SUCCESS;
12791 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012792 ftmCMDReq = (WDI_FTMCommandReqType *)
12793 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12794 if(NULL == ftmCMDReq)
12795 {
12796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12797 "WDA FTM Command buffer alloc fail");
12798 return VOS_STATUS_E_NOMEM;
12799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012800 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12801 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012802 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012803 /* Send command to WDI */
12804 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012805 return status;
12806}
Jeff Johnsone7245742012-09-05 17:12:55 -070012807#ifdef FEATURE_OEM_DATA_SUPPORT
12808/*
12809 * FUNCTION: WDA_StartOemDataReqCallback
12810 *
12811 */
12812void WDA_StartOemDataReqCallback(
12813 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12814 void* pUserData)
12815{
12816 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012817 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012818 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012819 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012820
Jeff Johnsone7245742012-09-05 17:12:55 -070012821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012822 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012823
12824 if(NULL == pWdaParams)
12825 {
12826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012827 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012828 VOS_ASSERT(0) ;
12829 return ;
12830 }
12831 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12832
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012833 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012836 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012837 VOS_ASSERT(0);
12838 return ;
12839 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012840
Jeff Johnsone7245742012-09-05 17:12:55 -070012841 /*
12842 * Allocate memory for response params sent to PE
12843 */
12844 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12845
12846 // Check if memory is allocated for OemdataMeasRsp Params.
12847 if(NULL == pOemDataRspParams)
12848 {
12849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12850 "OEM DATA WDA callback alloc fail");
12851 VOS_ASSERT(0) ;
12852 return;
12853 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012854
Jeff Johnsone7245742012-09-05 17:12:55 -070012855 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12857 vos_mem_free(pWdaParams->wdaMsgParam);
12858 vos_mem_free(pWdaParams) ;
12859
Jeff Johnsone7245742012-09-05 17:12:55 -070012860 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012861 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012862 * Also, here success always means that we have atleast one BSSID.
12863 */
12864 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12865
12866 //enable Tx
12867 status = WDA_ResumeDataTx(pWDA);
12868 if(status != VOS_STATUS_SUCCESS)
12869 {
12870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12871 }
12872 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12873 return ;
12874}
12875/*
12876 * FUNCTION: WDA_ProcessStartOemDataReq
12877 * Send Start Oem Data Req to WDI
12878 */
12879VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12880 tStartOemDataReq *pOemDataReqParams)
12881{
12882 WDI_Status status = WDI_STATUS_SUCCESS;
12883 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012884 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012885
12886 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12887
12888 if(NULL == wdiOemDataReqParams)
12889 {
12890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012892 VOS_ASSERT(0);
12893 return VOS_STATUS_E_NOMEM;
12894 }
12895
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012896 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12897 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12898 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12899 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012900
12901 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12902
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12904 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012905 {
12906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012908 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012909 vos_mem_free(pOemDataReqParams);
12910 VOS_ASSERT(0);
12911 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012912 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012913
Bernald44a1ae2013-01-09 08:30:39 -080012914 pWdaParams->pWdaContext = (void*)pWDA;
12915 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12916 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012917
12918 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12919 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012920
12921 if(IS_WDI_STATUS_FAILURE(status))
12922 {
12923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12924 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12926 vos_mem_free(pWdaParams->wdaMsgParam);
12927 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012928 }
12929 return CONVERT_WDI2VOS_STATUS(status) ;
12930}
12931#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012932/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012933 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012934 *
12935 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012936void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012937{
12938 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012940 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 if(NULL == pWdaParams)
12942 {
12943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012944 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012945 VOS_ASSERT(0) ;
12946 return ;
12947 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012948
12949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12950 vos_mem_free(pWdaParams->wdaMsgParam);
12951 vos_mem_free(pWdaParams);
12952
12953 return ;
12954}
12955/*
12956 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12957 * Free memory.
12958 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12959 */
12960void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12961{
12962 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12963
12964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12965 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12966
12967 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012968 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12970 "%s: pWdaParams received NULL", __func__);
12971 VOS_ASSERT(0);
12972 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012974
12975 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012976 {
12977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012978 vos_mem_free(pWdaParams->wdaMsgParam);
12979 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012980 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012981
12982 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012983}
Jeff Johnson295189b2012-06-20 16:38:30 -070012984#ifdef WLAN_FEATURE_GTK_OFFLOAD
12985/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012986 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012987 *
12988 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012989void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012990 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012991{
12992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12993
12994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012995 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012996 if(NULL == pWdaParams)
12997 {
12998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12999 "%s: pWdaParams received NULL", __func__);
13000 VOS_ASSERT(0);
13001 return;
13002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013003
Jeff Johnson295189b2012-06-20 16:38:30 -070013004 vos_mem_free(pWdaParams->wdaMsgParam) ;
13005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13006 vos_mem_free(pWdaParams) ;
13007
13008 //print a msg, nothing else to do
13009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013010 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013011
13012 return ;
13013}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013014/*
13015 * FUNCTION: WDA_GTKOffloadReqCallback
13016 * Free memory.
13017 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13018 */
13019void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13020{
13021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013022
Yue Ma7f44bbe2013-04-12 11:47:39 -070013023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13025
13026 if(NULL == pWdaParams)
13027 {
13028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13029 "%s: pWdaParams received NULL", __func__);
13030 VOS_ASSERT(0);
13031 return;
13032 }
13033
13034 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13035 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013036 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13037 sizeof(WDI_GtkOffloadReqMsg));
13038 vos_mem_zero(pWdaParams->wdaMsgParam,
13039 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13041 vos_mem_free(pWdaParams->wdaMsgParam);
13042 vos_mem_free(pWdaParams);
13043 }
13044
13045 return;
13046}
Jeff Johnson295189b2012-06-20 16:38:30 -070013047/*
13048 * FUNCTION: WDA_ProcessGTKOffloadReq
13049 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13050 * to broadcast traffic (sta mode).
13051 */
13052VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13053 tpSirGtkOffloadParams pGtkOffloadParams)
13054{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013055 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13057 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13058 sizeof(WDI_GtkOffloadReqMsg)) ;
13059 tWDA_ReqParams *pWdaParams ;
13060
13061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013062 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013063
13064 if(NULL == wdiGtkOffloadReqMsg)
13065 {
13066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013068 VOS_ASSERT(0);
13069 return VOS_STATUS_E_NOMEM;
13070 }
13071
13072 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13073 if(NULL == pWdaParams)
13074 {
13075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013077 VOS_ASSERT(0);
13078 vos_mem_free(wdiGtkOffloadReqMsg);
13079 return VOS_STATUS_E_NOMEM;
13080 }
13081
13082 //
13083 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13084 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013085
13086 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013087 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013088
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13090 // Copy KCK
13091 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13092 // Copy KEK
13093 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13094 // Copy KeyReplayCounter
13095 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13096 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13097
Yue Ma7f44bbe2013-04-12 11:47:39 -070013098 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13099 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013100
Jeff Johnson295189b2012-06-20 16:38:30 -070013101
13102 /* Store Params pass it to WDI */
13103 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13104 pWdaParams->pWdaContext = pWDA;
13105 /* Store param pointer as passed in by caller */
13106 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13107
Yue Ma7f44bbe2013-04-12 11:47:39 -070013108 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013109
13110 if(IS_WDI_STATUS_FAILURE(status))
13111 {
13112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13113 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013114 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13115 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13117 vos_mem_free(pWdaParams->wdaMsgParam);
13118 vos_mem_free(pWdaParams);
13119 }
13120
13121 return CONVERT_WDI2VOS_STATUS(status) ;
13122}
13123
13124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013125 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013126 *
13127 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013128void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013129 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013130{
13131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13132 tWDA_CbContext *pWDA;
13133 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013134 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013135 vos_msg_t vosMsg;
13136
13137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013138 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013139
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013140 if(NULL == pWdaParams)
13141 {
13142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13143 "%s: pWdaParams received NULL", __func__);
13144 VOS_ASSERT(0);
13145 return;
13146 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013147
Nirav Shah374de6e2014-02-13 16:40:01 +053013148 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13149 if(NULL == pGtkOffloadGetInfoRsp)
13150 {
13151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13152 "%s: vos_mem_malloc failed ", __func__);
13153 VOS_ASSERT(0);
13154 return;
13155 }
13156
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13158 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13159
13160 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13161 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13162
13163 /* Message Header */
13164 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013165 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013166
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013167 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13168 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13169 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13170 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13171 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013172
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013173 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13174 pwdiGtkOffloadGetInfoRsparams->bssId,
13175 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 /* VOS message wrapper */
13177 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13178 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13179 vosMsg.bodyval = 0;
13180
13181 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13182 {
13183 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013184 vos_mem_zero(pGtkOffloadGetInfoRsp,
13185 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013186 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13187 }
13188
13189 vos_mem_free(pWdaParams->wdaMsgParam) ;
13190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13191 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013192
13193 return;
13194}
13195/*
13196 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13197 * Free memory and send RSP back to SME.
13198 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13199 */
13200void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13201{
13202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13203 vos_msg_t vosMsg;
13204
13205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13206 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13207
13208 if(NULL == pWdaParams)
13209 {
13210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13211 "%s: pWdaParams received NULL", __func__);
13212 VOS_ASSERT(0);
13213 return;
13214 }
13215
13216 /* VOS message wrapper */
13217 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13218 vosMsg.bodyptr = NULL;
13219 vosMsg.bodyval = 0;
13220
13221 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13222 {
13223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13224 vos_mem_free(pWdaParams->wdaMsgParam);
13225 vos_mem_free(pWdaParams);
13226 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13227 }
13228
13229 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013230}
13231#endif
13232
13233/*
13234 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13235 * Request to WDI to set Tx Per Tracking configurations
13236 */
13237VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13238{
13239 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013240 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013241 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13242 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13243 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13244 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013246 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013247 if(NULL == pwdiSetTxPerTrackingReqParams)
13248 {
13249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013251 vos_mem_free(pTxPerTrackingParams);
13252 VOS_ASSERT(0);
13253 return VOS_STATUS_E_NOMEM;
13254 }
13255 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13256 if(NULL == pWdaParams)
13257 {
13258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013260 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13261 vos_mem_free(pTxPerTrackingParams);
13262 VOS_ASSERT(0);
13263 return VOS_STATUS_E_NOMEM;
13264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013265 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13266 pTxPerTrackingParams->ucTxPerTrackingEnable;
13267 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13268 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13269 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13270 pTxPerTrackingParams->ucTxPerTrackingRatio;
13271 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13272 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013273 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13274 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013275 /* Store param pointer as passed in by caller */
13276 /* store Params pass it to WDI
13277 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13278 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13279 pWdaParams->pWdaContext = pWDA;
13280 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013281 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013282 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013283 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013284 {
13285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13286 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013287 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013288 vos_mem_free(pWdaParams->wdaMsgParam) ;
13289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13290 vos_mem_free(pWdaParams) ;
13291 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013292 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013293
13294}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013295/*
13296 * FUNCTION: WDA_HALDumpCmdCallback
13297 * Send the VOS complete .
13298 */
13299void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13300 void* pUserData)
13301{
13302 tANI_U8 *buffer = NULL;
13303 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013304 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013305 if(NULL == pWdaParams)
13306 {
13307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013308 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013309 VOS_ASSERT(0) ;
13310 return ;
13311 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013312
13313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13314 "%s: WDA HAL DUMP Resp Received",__func__);
13315
Jeff Johnson295189b2012-06-20 16:38:30 -070013316 pWDA = pWdaParams->pWdaContext;
13317 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 if(wdiRspParams->usBufferLen > 0)
13319 {
13320 /*Copy the Resp data to UMAC supplied buffer*/
13321 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13322 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013323
13324 if (!pWdaParams->wdaHALDumpAsync)
13325 {/* Indicate VOSS about the start complete */
13326 vos_WDAComplete_cback(pWDA->pVosContext);
13327 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13329 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 return ;
13331}
13332
Jeff Johnson295189b2012-06-20 16:38:30 -070013333/*
13334 * FUNCTION: WDA_ProcessHALDumpCmdReq
13335 * Send Dump command to WDI
13336 */
13337VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13338 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013339 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013340{
13341 WDI_Status status = WDI_STATUS_SUCCESS;
13342 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13343 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013344 tWDA_HalDumpReqParams *pWdaParams ;
13345
Jeff Johnson295189b2012-06-20 16:38:30 -070013346 pVosContextType pVosContext = NULL;
13347 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13349 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013350 if(pVosContext)
13351 {
13352 if (pVosContext->isLogpInProgress)
13353 {
13354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13355 "%s:LOGP in Progress. Ignore!!!", __func__);
13356 return VOS_STATUS_E_BUSY;
13357 }
13358 }
13359 else
13360 {
13361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13362 "%s: VOS Context Null", __func__);
13363 return VOS_STATUS_E_RESOURCES;
13364 }
13365
Siddharth Bhal68115602015-01-18 20:44:55 +053013366 if (NULL == pVosContext->pWDAContext)
13367 {
13368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13369 "%s: WDA Context Null", __func__);
13370 return VOS_STATUS_E_RESOURCES;
13371 }
13372 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013373 if(NULL == pWdaParams)
13374 {
13375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013376 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013377 return VOS_STATUS_E_NOMEM;
13378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013379 /* Allocate memory WDI request structure*/
13380 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13381 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13382 if(NULL == wdiHALDumpCmdReqParam)
13383 {
13384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13385 "WDA HAL DUMP Command buffer alloc fail");
13386 vos_mem_free(pWdaParams);
13387 return WDI_STATUS_E_FAILURE;
13388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013389 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013390 /* Extract the arguments */
13391 wdiHalDumpCmdInfo->command = cmd;
13392 wdiHalDumpCmdInfo->argument1 = arg1;
13393 wdiHalDumpCmdInfo->argument2 = arg2;
13394 wdiHalDumpCmdInfo->argument3 = arg3;
13395 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013396 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013397 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013398 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013399
13400 /* Response message will be passed through the buffer */
13401 pWdaParams->wdaMsgParam = (void *)pBuffer;
13402
13403 /* store Params pass it to WDI */
13404 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013405
13406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13407 "%s: WDA HAL DUMP Command sent",__func__);
13408
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013410 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13411 pWdaParams);
13412 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13413 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013414 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013415 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13416 WDA_DUMPCMD_WAIT_TIMEOUT );
13417 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013419 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13420 {
13421 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13422 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13423 }
13424 else
13425 {
13426 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13427 "%s: WDA_HALDUMP reporting other error",__func__);
13428 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053013429 if (!(vos_isLoadUnloadInProgress() ||
13430 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
13431 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013433 }
13434 return status;
13435}
Jeff Johnson295189b2012-06-20 16:38:30 -070013436#ifdef WLAN_FEATURE_GTK_OFFLOAD
13437/*
13438 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13439 * Request to WDI to get GTK Offload Information
13440 */
13441VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13442 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13443{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013444 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013445 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13446 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13447 tWDA_ReqParams *pWdaParams ;
13448
13449 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13450 {
13451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 VOS_ASSERT(0);
13454 return VOS_STATUS_E_NOMEM;
13455 }
13456
13457 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13458 if(NULL == pWdaParams)
13459 {
13460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013462 VOS_ASSERT(0);
13463 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13464 return VOS_STATUS_E_NOMEM;
13465 }
13466
Yue Ma7f44bbe2013-04-12 11:47:39 -070013467 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13468 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013469
Jeff Johnson295189b2012-06-20 16:38:30 -070013470 /* Store Params pass it to WDI */
13471 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13472 pWdaParams->pWdaContext = pWDA;
13473 /* Store param pointer as passed in by caller */
13474 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13475
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013476 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013477 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013478
Yue Ma7f44bbe2013-04-12 11:47:39 -070013479 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013480
13481 if(IS_WDI_STATUS_FAILURE(status))
13482 {
13483 /* failure returned by WDI API */
13484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13485 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13487 vos_mem_free(pWdaParams) ;
13488 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13489 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13490 }
13491
13492 return CONVERT_WDI2VOS_STATUS(status) ;
13493}
13494#endif // WLAN_FEATURE_GTK_OFFLOAD
13495
13496/*
Yue Mab9c86f42013-08-14 15:59:08 -070013497 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13498 *
13499 */
13500VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13501 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13502{
13503 WDI_Status wdiStatus;
13504 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13505
13506 addPeriodicTxPtrnParams =
13507 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13508
13509 if (NULL == addPeriodicTxPtrnParams)
13510 {
13511 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13512 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13513 __func__);
13514
13515 return VOS_STATUS_E_NOMEM;
13516 }
13517
13518 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13519 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13520
13521 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13522 addPeriodicTxPtrnParams->pUserData = pWDA;
13523
13524 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13525
13526 if (WDI_STATUS_PENDING == wdiStatus)
13527 {
13528 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13529 "Pending received for %s:%d", __func__, __LINE__ );
13530 }
13531 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13532 {
13533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13534 "Failure in %s:%d", __func__, __LINE__ );
13535 }
13536
13537 vos_mem_free(addPeriodicTxPtrnParams);
13538
13539 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13540}
13541
13542/*
13543 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13544 *
13545 */
13546VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13547 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13548{
13549 WDI_Status wdiStatus;
13550 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13551
13552 delPeriodicTxPtrnParams =
13553 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13554
13555 if (NULL == delPeriodicTxPtrnParams)
13556 {
13557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13558 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13559 __func__);
13560
13561 return VOS_STATUS_E_NOMEM;
13562 }
13563
13564 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13565 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13566
13567 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13568 delPeriodicTxPtrnParams->pUserData = pWDA;
13569
13570 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13571
13572 if (WDI_STATUS_PENDING == wdiStatus)
13573 {
13574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13575 "Pending received for %s:%d", __func__, __LINE__ );
13576 }
13577 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13578 {
13579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13580 "Failure in %s:%d", __func__, __LINE__ );
13581 }
13582
13583 vos_mem_free(delPeriodicTxPtrnParams);
13584
13585 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13586}
13587
Abhishek Singh00b71972016-01-07 10:51:04 +053013588/*
13589 * FUNCTION: WDA_ProcessRateUpdateInd
13590 *
13591 */
13592VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13593 tSirRateUpdateInd *pRateUpdateParams)
13594{
13595 WDI_Status wdiStatus;
13596 WDI_RateUpdateIndParams rateUpdateParams;
13597
13598 vos_mem_copy(rateUpdateParams.bssid,
13599 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13600
13601 rateUpdateParams.ucastDataRateTxFlag =
13602 pRateUpdateParams->ucastDataRateTxFlag;
13603 rateUpdateParams.rmcDataRateTxFlag =
13604 pRateUpdateParams->rmcDataRateTxFlag;
13605 rateUpdateParams.mcastDataRate24GHzTxFlag =
13606 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13607 rateUpdateParams.mcastDataRate5GHzTxFlag =
13608 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13609
13610 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13611 rateUpdateParams.rmcDataRate =
13612 pRateUpdateParams->rmcDataRate;
13613 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13614 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13615
13616 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13617 rateUpdateParams.pUserData = pWDA;
13618
13619 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13620
13621 if (WDI_STATUS_PENDING == wdiStatus)
13622 {
13623 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13624 "Pending received for %s:%d", __func__, __LINE__ );
13625 }
13626 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13627 {
13628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13629 "Failure in %s:%d", __func__, __LINE__ );
13630 }
13631
13632 vos_mem_free(pRateUpdateParams);
13633
13634 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13635}
13636
13637
Rajeev79dbe4c2013-10-05 11:03:42 +053013638#ifdef FEATURE_WLAN_BATCH_SCAN
13639/*
13640 * FUNCTION: WDA_ProcessStopBatchScanInd
13641 *
13642 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13643 *
13644 * PARAM:
13645 * pWDA: pointer to WDA context
13646 * pReq: pointer to stop batch scan request
13647 */
13648VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13649 tSirStopBatchScanInd *pReq)
13650{
13651 WDI_Status wdiStatus;
13652 WDI_StopBatchScanIndType wdiReq;
13653
13654 wdiReq.param = pReq->param;
13655
13656 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13657
13658 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13659 {
13660 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13661 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13662 }
13663
13664 vos_mem_free(pReq);
13665
13666 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13667}
13668/*==========================================================================
13669 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13670
13671 DESCRIPTION
13672 API to pull batch scan result from FW
13673
13674 PARAMETERS
13675 pWDA: Pointer to WDA context
13676 pGetBatchScanReq: Pointer to get batch scan result indication
13677
13678 RETURN VALUE
13679 NONE
13680
13681===========================================================================*/
13682VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13683 tSirTriggerBatchScanResultInd *pReq)
13684{
13685 WDI_Status wdiStatus;
13686 WDI_TriggerBatchScanResultIndType wdiReq;
13687
13688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13689 "------> %s " ,__func__);
13690
13691 wdiReq.param = pReq->param;
13692
13693 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13694
13695 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13696 {
13697 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13698 "Trigger batch scan result ind failed %s:%d",
13699 __func__, wdiStatus);
13700 }
13701
13702 vos_mem_free(pReq);
13703
13704 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13705}
13706
13707/*==========================================================================
13708 FUNCTION WDA_SetBatchScanRespCallback
13709
13710 DESCRIPTION
13711 API to process set batch scan response from FW
13712
13713 PARAMETERS
13714 pRsp: Pointer to set batch scan response
13715 pUserData: Pointer to user data
13716
13717 RETURN VALUE
13718 NONE
13719
13720===========================================================================*/
13721void WDA_SetBatchScanRespCallback
13722(
13723 WDI_SetBatchScanRspType *pRsp,
13724 void* pUserData
13725)
13726{
13727 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13728 tpAniSirGlobal pMac;
13729 void *pCallbackContext;
13730 tWDA_CbContext *pWDA = NULL ;
13731 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13732
13733
13734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13735 "<------ %s " ,__func__);
13736 if (NULL == pWdaParams)
13737 {
13738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13739 "%s: pWdaParams received NULL", __func__);
13740 VOS_ASSERT(0) ;
13741 return ;
13742 }
13743
13744 /*extract WDA context*/
13745 pWDA = pWdaParams->pWdaContext;
13746 if (NULL == pWDA)
13747 {
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13749 "%s:pWDA is NULL can't invole HDD callback",
13750 __func__);
13751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13752 vos_mem_free(pWdaParams->wdaMsgParam);
13753 vos_mem_free(pWdaParams);
13754 VOS_ASSERT(0);
13755 return;
13756 }
13757
13758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13759 vos_mem_free(pWdaParams->wdaMsgParam);
13760 vos_mem_free(pWdaParams);
13761
13762 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13763 if (NULL == pMac)
13764 {
13765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13766 "%s:pMac is NULL", __func__);
13767 VOS_ASSERT(0);
13768 return;
13769 }
13770
13771 pHddSetBatchScanRsp =
13772 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13773 if (NULL == pHddSetBatchScanRsp)
13774 {
13775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13776 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13777 VOS_ASSERT(0);
13778 return;
13779 }
13780
13781 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13782
13783 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13784 /*call hdd callback with set batch scan response data*/
13785 if(pMac->pmc.setBatchScanReqCallback)
13786 {
13787 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13788 }
13789 else
13790 {
13791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13792 "%s:HDD callback is null", __func__);
13793 VOS_ASSERT(0);
13794 }
13795
13796 vos_mem_free(pHddSetBatchScanRsp);
13797 return ;
13798}
13799
13800/*==========================================================================
13801 FUNCTION WDA_ProcessSetBatchScanReq
13802
13803 DESCRIPTION
13804 API to send set batch scan request to WDI
13805
13806 PARAMETERS
13807 pWDA: Pointer to WDA context
13808 pSetBatchScanReq: Pointer to set batch scan req
13809
13810 RETURN VALUE
13811 NONE
13812
13813===========================================================================*/
13814VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13815 tSirSetBatchScanReq *pSetBatchScanReq)
13816{
13817 WDI_Status status;
13818 tWDA_ReqParams *pWdaParams ;
13819 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13820
13821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13822 "------> %s " ,__func__);
13823
13824 pWdiSetBatchScanReq =
13825 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13826 if (NULL == pWdiSetBatchScanReq)
13827 {
13828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13829 "%s: VOS MEM Alloc Failure", __func__);
13830 vos_mem_free(pSetBatchScanReq);
13831 VOS_ASSERT(0);
13832 return VOS_STATUS_E_NOMEM;
13833 }
13834
13835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13836 if (NULL == pWdaParams)
13837 {
13838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13839 "%s: VOS MEM Alloc Failure", __func__);
13840 VOS_ASSERT(0);
13841 vos_mem_free(pSetBatchScanReq);
13842 vos_mem_free(pWdiSetBatchScanReq);
13843 return VOS_STATUS_E_NOMEM;
13844 }
13845
13846 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13847 pWdiSetBatchScanReq->numberOfScansToBatch =
13848 pSetBatchScanReq->numberOfScansToBatch;
13849 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13850 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13851 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13852
13853 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13854 pWdaParams->pWdaContext = pWDA;
13855 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13856
13857 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13858 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13859 if (IS_WDI_STATUS_FAILURE(status))
13860 {
13861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13862 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13864 vos_mem_free(pWdaParams->wdaMsgParam);
13865 vos_mem_free(pWdaParams);
13866 }
13867 return CONVERT_WDI2VOS_STATUS(status);
13868}
13869
13870#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013871/*
13872 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13873 *
13874 * DESCRIPTION: This function sends start/update OBSS scan
13875 * inidcation message to WDI
13876 *
13877 * PARAM:
13878 * pWDA: pointer to WDA context
13879 * pReq: pointer to start OBSS scan request
13880 */
13881VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13882 tSirHT40OBSSScanInd *pReq)
13883{
13884 WDI_Status status;
13885 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13886 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013887
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13889 "------> %s " ,__func__);
13890 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13891 wdiOBSSScanParams.pUserData = pWDA;
13892
13893 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13894 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13895 pWdiOBSSScanInd->scanType = pReq->scanType;
13896 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13897 pReq->OBSSScanActiveDwellTime;
13898 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13899 pReq->OBSSScanPassiveDwellTime;
13900 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13901 pReq->BSSChannelWidthTriggerScanInterval;
13902 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13903 pReq->BSSWidthChannelTransitionDelayFactor;
13904 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13905 pReq->OBSSScanActiveTotalPerChannel;
13906 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13907 pReq->OBSSScanPassiveTotalPerChannel;
13908 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13909 pReq->OBSSScanActivityThreshold;
13910 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13911 vos_mem_copy(pWdiOBSSScanInd->channels,
13912 pReq->channels,
13913 pReq->channelCount);
13914 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13915 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13916 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13917 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13918 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13919
13920 vos_mem_copy(pWdiOBSSScanInd->ieField,
13921 pReq->ieField,
13922 pReq->ieFieldLen);
13923
13924 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13925 if (WDI_STATUS_PENDING == status)
13926 {
13927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13928 "Pending received for %s:%d ",__func__,__LINE__ );
13929 }
13930 else if (WDI_STATUS_SUCCESS_SYNC != status)
13931 {
13932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13933 "Failure in %s:%d ",__func__,__LINE__ );
13934 }
13935 return CONVERT_WDI2VOS_STATUS(status) ;
13936}
13937/*
13938 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13939 *
13940 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13941 *
13942 * PARAM:
13943 * pWDA: pointer to WDA context
13944 * pReq: pointer to stop batch scan request
13945 */
13946VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13947 tANI_U8 *bssIdx)
13948{
13949 WDI_Status status;
13950
13951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13952 "------> %s " ,__func__);
13953
13954 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13955 if (WDI_STATUS_PENDING == status)
13956 {
13957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13958 "Pending received for %s:%d ",__func__,__LINE__ );
13959 }
13960 else if (WDI_STATUS_SUCCESS_SYNC != status)
13961 {
13962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13963 "Failure in %s:%d ",__func__,__LINE__ );
13964 }
13965 return CONVERT_WDI2VOS_STATUS(status) ;
13966}
Yue Mab9c86f42013-08-14 15:59:08 -070013967/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013968 * -------------------------------------------------------------------------
13969 * DATA interface with WDI for Mgmt Frames
13970 * -------------------------------------------------------------------------
13971 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013972/*
13973 * FUNCTION: WDA_TxComplete
13974 * Callback function for the WDA_TxPacket
13975 */
13976VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13977 VOS_STATUS status )
13978{
13979
13980 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13981 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013982 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013983
Mihir Shete63341222015-03-24 15:39:18 +053013984 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13985
Jeff Johnson295189b2012-06-20 16:38:30 -070013986 if(NULL == wdaContext)
13987 {
13988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13989 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013990 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013991 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013992 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013993 return VOS_STATUS_E_FAILURE;
13994 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013995
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053013996 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013997 /*Check if frame was timed out or not*/
13998 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13999 (v_PVOID_t)&uUserData);
14000
14001 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14002 {
14003 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14005 "%s: MGMT Frame Tx timed out",
14006 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014007 vos_pkt_return_packet(pData);
14008 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014009 return VOS_STATUS_SUCCESS;
14010 }
14011
Jeff Johnson295189b2012-06-20 16:38:30 -070014012 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14013 if( NULL!=wdaContext->pTxCbFunc)
14014 {
14015 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014016 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014017 {
14018 wdaContext->pTxCbFunc(pMac, pData);
14019 }
14020 else
14021 {
14022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014023 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014024 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014025 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014026 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014027 return status;
14028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014029 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014030 else {
14031 wdaContext->mgmt_pktfree_fail++;
14032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14033 "%s:packet (%p) userData (%lx) is not freed",
14034 __func__, pData, uUserData);
14035 }
14036 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014037
14038 /*
14039 * Trigger the event to bring the HAL TL Tx complete function to come
14040 * out of wait
14041 * Let the coe above to complete the packet first. When this event is set,
14042 * the thread waiting for the event may run and set Vospacket_freed causing the original
14043 * packet not being freed.
14044 */
14045 status = vos_event_set(&wdaContext->txFrameEvent);
14046 if(!VOS_IS_STATUS_SUCCESS(status))
14047 {
14048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014049 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014051 return status;
14052}
Jeff Johnson295189b2012-06-20 16:38:30 -070014053/*
14054 * FUNCTION: WDA_TxPacket
14055 * Forward TX management frame to WDI
14056 */
14057VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14058 void *pFrmBuf,
14059 tANI_U16 frmLen,
14060 eFrameType frmType,
14061 eFrameTxDir txDir,
14062 tANI_U8 tid,
14063 pWDATxRxCompFunc pCompFunc,
14064 void *pData,
14065 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014066 tANI_U32 txFlag,
14067 tANI_U32 txBdToken
14068 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014069{
14070 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14071 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14072 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14073 tANI_U8 eventIdx = 0;
14074 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14075 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014076 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014077 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014078
Jeff Johnson295189b2012-06-20 16:38:30 -070014079 if((NULL == pWDA)||(NULL == pFrmBuf))
14080 {
14081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014082 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014083 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014084 VOS_ASSERT(0);
14085 return VOS_STATUS_E_FAILURE;
14086 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014087
Jeff Johnson295189b2012-06-20 16:38:30 -070014088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014089 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14090 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014091 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14092 if(NULL == pMac)
14093 {
14094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014095 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014096 VOS_ASSERT(0);
14097 return VOS_STATUS_E_FAILURE;
14098 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014099
Jeff Johnson295189b2012-06-20 16:38:30 -070014100 /* store the call back function in WDA context */
14101 pWDA->pTxCbFunc = pCompFunc;
14102 /* store the call back for the function of ackTxComplete */
14103 if( pAckTxComp )
14104 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014105 if( NULL != pWDA->pAckTxCbFunc )
14106 {
14107 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014109 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014110 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014111 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014112
Jeff Johnsone7245742012-09-05 17:12:55 -070014113 if( VOS_STATUS_SUCCESS !=
14114 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14115 {
14116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14117 "Tx Complete timeout Timer Stop Failed ");
14118 }
14119 else
14120 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014122 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014123 }
14124 }
14125
14126 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14127 pWDA->pAckTxCbFunc = pAckTxComp;
14128 if( VOS_STATUS_SUCCESS !=
14129 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14130 {
14131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14132 "Tx Complete Timer Start Failed ");
14133 pWDA->pAckTxCbFunc = NULL;
14134 return eHAL_STATUS_FAILURE;
14135 }
14136 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014137 /* Reset the event to be not signalled */
14138 status = vos_event_reset(&pWDA->txFrameEvent);
14139 if(!VOS_IS_STATUS_SUCCESS(status))
14140 {
14141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014142 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014143 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14144 if( pAckTxComp )
14145 {
14146 pWDA->pAckTxCbFunc = NULL;
14147 if( VOS_STATUS_SUCCESS !=
14148 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14149 {
14150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14151 "Tx Complete timeout Timer Stop Failed ");
14152 }
14153 }
14154 return VOS_STATUS_E_FAILURE;
14155 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014156
14157 /* If Peer Sta mask is set don't overwrite to self sta */
14158 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014159 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014160 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014161 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014162 else
14163 {
Ganesh K08bce952012-12-13 15:04:41 -080014164 /* Get system role, use the self station if in unknown role or STA role */
14165 systemRole = wdaGetGlobalSystemRole(pMac);
14166 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14167 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014168#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014169 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014170#endif
Ganesh K08bce952012-12-13 15:04:41 -080014171 ))
14172 {
14173 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14174 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014176
Jeff Johnsone7245742012-09-05 17:12:55 -070014177 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14178 disassoc frame reaches the HW, HAL has already deleted the peer station */
14179 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014180 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014181 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014182 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014183 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014184 /*Send Probe request frames on self sta idx*/
14185 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014186 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014187 /* Since we donot want probe responses to be retried, send probe responses
14188 through the NO_ACK queues */
14189 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14190 {
14191 //probe response is sent out using self station and no retries options.
14192 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14193 }
14194 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14195 {
14196 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14197 }
14198 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014199#ifdef FEATURE_WLAN_TDLS
14200 /* TDLS Management frames are sent using Peer Sta mask */
14201 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14202 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14203 {
14204 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14205
14206 }
14207#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014208 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014209
14210 /*Set frame tag to 0
14211 We will use the WDA user data in order to tag a frame as expired*/
14212 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14213 (v_PVOID_t)0);
14214
14215
14216 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014217 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14218 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014219 {
14220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014221 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014222 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014223 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 -070014224 if( pAckTxComp )
14225 {
14226 pWDA->pAckTxCbFunc = NULL;
14227 if( VOS_STATUS_SUCCESS !=
14228 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14229 {
14230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14231 "Tx Complete timeout Timer Stop Failed ");
14232 }
14233 }
14234 return VOS_STATUS_E_FAILURE;
14235 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014236 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014237 /*
14238 * Wait for the event to be set by the TL, to get the response of TX
14239 * complete, this event should be set by the Callback function called by TL
14240 */
14241 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14242 &eventIdx);
14243 if(!VOS_IS_STATUS_SUCCESS(status))
14244 {
14245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14246 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014247 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014248 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014249 /*Tag Frame as timed out for later deletion*/
14250 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14251 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014252 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14253 after the packet gets completed(packet freed once)*/
14254
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014255 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14256
14257 /*
14258 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14259 * TX completion call back
14260 */
14261 VOS_SMP_MB;
14262 vos_lock_release(&pWDA->mgmt_pkt_lock);
14263
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014264 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014265 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014266
Abhishek Singh837adf22015-10-01 17:37:37 +053014267 if (vos_isFatalEventEnabled())
14268 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14269 WLAN_LOG_INDICATOR_HOST_DRIVER,
14270 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14271 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014272
Jeff Johnson295189b2012-06-20 16:38:30 -070014273 if( pAckTxComp )
14274 {
14275 pWDA->pAckTxCbFunc = NULL;
14276 if( VOS_STATUS_SUCCESS !=
14277 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14278 {
14279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14280 "Tx Complete timeout Timer Stop Failed ");
14281 }
14282 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014283 pWDA->mgmtTxfailureCnt++;
14284
14285 /* SSR if timeout continously for
14286 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14287 */
14288 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14289 pWDA->mgmtTxfailureCnt)
14290 {
14291 vos_wlanRestart();
14292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014293 status = VOS_STATUS_E_FAILURE;
14294 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014295
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014296#ifdef WLAN_DUMP_MGMTFRAMES
14297 if (VOS_IS_STATUS_SUCCESS(status))
14298 {
14299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14300 "%s() TX packet : SubType %d", __func__,pFc->subType);
14301 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14302 pData, frmLen);
14303 }
14304#endif
14305
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014306 if (VOS_IS_STATUS_SUCCESS(status))
14307 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014308 pWDA->mgmtTxfailureCnt = 0;
14309 if ((vos_timer_get_system_time() - time_snapshot) >=
14310 WDA_TX_TIME_THRESHOLD)
14311 {
14312 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14313 "Tx Complete took %lu ms",
14314 vos_timer_get_system_time() - time_snapshot);
14315 }
14316
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014317 if (pMac->fEnableDebugLog & 0x1)
14318 {
14319 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14320 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14321 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14322 {
14323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14324 pFc->type, pFc->subType);
14325 }
14326 }
14327 }
14328
14329
Jeff Johnson295189b2012-06-20 16:38:30 -070014330 return status;
14331}
Jeff Johnson295189b2012-06-20 16:38:30 -070014332/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014333 * FUNCTION: WDA_ProcessDHCPStartInd
14334 * Forward DHCP Start to WDI
14335 */
14336static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14337 tAniDHCPInd *dhcpStartInd)
14338{
14339 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014340 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014341
c_hpothu0b0cab72014-02-13 21:52:40 +053014342 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14343 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014344 sizeof(tSirMacAddr));
14345
c_hpothu0b0cab72014-02-13 21:52:40 +053014346 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014347
c_hpothu0b0cab72014-02-13 21:52:40 +053014348 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014349 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14351 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014352 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014353 else if (WDI_STATUS_SUCCESS_SYNC != status)
14354 {
14355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14356 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14357 }
14358
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014359 vos_mem_free(dhcpStartInd);
14360 return CONVERT_WDI2VOS_STATUS(status) ;
14361}
14362
14363 /*
14364 * FUNCTION: WDA_ProcessDHCPStopInd
14365 * Forward DHCP Stop to WDI
14366 */
14367 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14368 tAniDHCPInd *dhcpStopInd)
14369 {
14370 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014371 WDI_DHCPInd wdiDHCPInd;
14372
14373 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14374 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14375
14376 status = WDI_dhcpStopInd(&wdiDHCPInd);
14377
14378 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014379 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14381 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014382 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014383 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014384 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14386 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014387 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014388
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014389 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014390
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014391 return CONVERT_WDI2VOS_STATUS(status) ;
14392 }
14393
Abhishek Singh00b71972016-01-07 10:51:04 +053014394#ifdef WLAN_FEATURE_RMC
14395
14396void
14397WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14398{
14399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14400 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14401
14402 switch (wdiRmcResponse->cmd)
14403 {
14404 case eWDI_BECOME_RULER_CMD :
14405 {
14406 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14407
14408 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14409 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14410
14411 if (NULL == pRmcBecomeRulerInd)
14412 {
14413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14414 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14415 break;
14416 }
14417
14418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14419 "Received eWDI_BECOME_RULER_CMD from WDI");
14420
14421 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14422
14423 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14424 wdiRmcResponse->mcastTransmitter,
14425 sizeof(tSirMacAddr));
14426 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14427 wdiRmcResponse->mcastGroup,
14428 sizeof(tSirMacAddr));
14429
14430 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14431 (void *)pRmcBecomeRulerInd, 0) ;
14432 break;
14433 }
14434 case eWDI_SUGGEST_RULER_CMD :
14435 {
14436 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14437
14438 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14439 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14440
14441 if (NULL == pRmcRulerSelectInd)
14442 {
14443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14444 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14445 break;
14446 }
14447
14448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14449 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14450
14451 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14452
14453 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14454 wdiRmcResponse->mcastTransmitter,
14455 sizeof(tSirMacAddr));
14456 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14457 wdiRmcResponse->mcastGroup,
14458 sizeof(tSirMacAddr));
14459 vos_mem_copy(pRmcRulerSelectInd->ruler,
14460 wdiRmcResponse->ruler,
14461 sizeof(pRmcRulerSelectInd->ruler));
14462
14463 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14464 (void *)pRmcRulerSelectInd, 0) ;
14465 break;
14466 }
14467 }
14468
14469 /* free the config structure */
14470 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14471 {
14472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14473 }
14474 vos_mem_free(pWdaParams->wdaMsgParam);
14475 vos_mem_free(pWdaParams);
14476
14477}
14478
14479void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14480{
14481 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14482
14483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14484 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14485
14486 if (NULL == pWdaParams)
14487 {
14488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14489 "%s: pWdaParams received NULL", __func__);
14490 VOS_ASSERT(0);
14491 return;
14492 }
14493
14494 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14495 {
14496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14497 vos_mem_free(pWdaParams->wdaMsgParam);
14498 vos_mem_free(pWdaParams);
14499 }
14500
14501 return;
14502}
14503
14504static VOS_STATUS
14505WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14506 tSirRmcRulerReq *rmcRulerReq)
14507{
14508 WDI_Status status;
14509 WDI_RmcRulerReqParams *wdiRulerReq;
14510 tWDA_ReqParams *pWdaParams;
14511
14512 wdiRulerReq = (WDI_RmcRulerReqParams *)
14513 vos_mem_malloc(sizeof(*wdiRulerReq));
14514
14515 if (NULL == wdiRulerReq)
14516 {
14517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14518 "%s: VOS MEM Alloc Failure", __func__);
14519 VOS_ASSERT(0);
14520 vos_mem_free(rmcRulerReq);
14521 return VOS_STATUS_E_NOMEM;
14522 }
14523
14524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14525 if (NULL == pWdaParams)
14526 {
14527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14528 "%s: VOS MEM Alloc Failure", __func__);
14529 VOS_ASSERT(0);
14530 vos_mem_free(rmcRulerReq);
14531 vos_mem_free(wdiRulerReq);
14532 return VOS_STATUS_E_NOMEM;
14533 }
14534
14535 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14536 /* Store param pointer as passed in by caller */
14537 pWdaParams->wdaMsgParam = rmcRulerReq;
14538 pWdaParams->pWdaContext = pWDA;
14539
14540 wdiRulerReq->cmd = rmcRulerReq->cmd;
14541
14542 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14543 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14544 vos_mem_copy(wdiRulerReq->mcastGroup,
14545 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14546 vos_mem_copy(wdiRulerReq->blacklist,
14547 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14548
14549 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14550
14551 status = WDI_RmcRulerReq(wdiRulerReq,
14552 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14553 (void *)pWdaParams);
14554 if (IS_WDI_STATUS_FAILURE(status))
14555 {
14556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14557 vos_mem_free(pWdaParams->wdaMsgParam);
14558 vos_mem_free(pWdaParams) ;
14559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14560 "Ruler Request failed");
14561 }
14562 return CONVERT_WDI2VOS_STATUS(status) ;
14563}
14564
14565/*
14566 * FUNCTION: WDA_ProcessRMCUpdateInd
14567 * Forward Update Indication to WDI
14568*/
14569static VOS_STATUS
14570WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14571 tSirRmcUpdateInd *rmcUpdateInd)
14572{
14573 WDI_Status status;
14574 WDI_RmcUpdateIndParams wdiUpdateInd;
14575
14576 /* Copy the paramters for Update_Ind */
14577
14578 wdiUpdateInd.indication = rmcUpdateInd->indication;
14579 wdiUpdateInd.role = rmcUpdateInd->role;
14580
14581 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14582 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14583
14584 vos_mem_copy(wdiUpdateInd.mcastGroup,
14585 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14586
14587 vos_mem_copy(wdiUpdateInd.mcastRuler,
14588 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14589
14590 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14591 wdiUpdateInd.pUserData = pWDA;
14592 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14593
14594 if (WDI_STATUS_PENDING == status)
14595 {
14596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14597 "Pending received for %s:%d ",__func__,__LINE__ );
14598 }
14599 else if (WDI_STATUS_SUCCESS_SYNC != status)
14600 {
14601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14602 "Failure in %s:%d ",__func__,__LINE__ );
14603 }
14604
14605 vos_mem_free(rmcUpdateInd);
14606
14607 return CONVERT_WDI2VOS_STATUS(status) ;
14608}
14609
14610void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14611 ,void* pUserData)
14612{
14613
14614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14615 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14616 tWDA_CbContext *pWDA;
14617 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14618 vos_msg_t vosMsg;
14619 v_U32_t wdaCnt = 0;
14620
14621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14622 "<------ %s " ,__func__);
14623 if (NULL == pWdaParams)
14624 {
14625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14626 "%s: pWdaParams received NULL", __func__);
14627 VOS_ASSERT(0);
14628 return;
14629 }
14630
14631 if (NULL == peerInfoRspParams)
14632 {
14633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14634 "%s: peerInfoRspParams received NULL", __func__);
14635 if(pWdaParams->wdaMsgParam)
14636 vos_mem_free(pWdaParams->wdaMsgParam);
14637 if(pWdaParams->wdaWdiApiMsgParam)
14638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14639 vos_mem_free(pWdaParams);
14640
14641 VOS_ASSERT(0);
14642 return;
14643 }
14644
14645 pIbssPeerInfoParams =
14646 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14647
14648 pIbssGetPeerInfoRsp =
14649 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14650
14651 if(NULL == pIbssGetPeerInfoRsp)
14652 {
14653 if(pWdaParams->wdaMsgParam)
14654 vos_mem_free(pWdaParams->wdaMsgParam);
14655 if(pWdaParams->wdaWdiApiMsgParam)
14656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14657 vos_mem_free(pWdaParams);
14658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14659 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14660 __func__);
14661 VOS_ASSERT(0);
14662 return;
14663
14664 }
14665
14666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14667
14668
14669 if (peerInfoRspParams->wdiNumPeers > 32)
14670 {
14671 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14672 /* free the mem and return */
14673 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14674 if(pWdaParams->wdaMsgParam)
14675 vos_mem_free(pWdaParams->wdaMsgParam);
14676 if(pWdaParams->wdaWdiApiMsgParam)
14677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14678 vos_mem_free(pWdaParams);
14679
14680 return;
14681 }
14682
14683 /* Message Header */
14684 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14685 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14686 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14687 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14688
14689 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14690 {
14691 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14692 tSirIbssPeerInfoParams *pSmeTmp =
14693 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14694
14695 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14696 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14697 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14698 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14699 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14700 }
14701
14702 /* VOS message wrapper */
14703 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14704 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14705 vosMsg.bodyval = 0;
14706
14707 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14708 {
14709 /* free the mem and return */
14710 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14711 }
14712
14713 if(NULL != pWdaParams)
14714 {
14715 if(pWdaParams->wdaMsgParam)
14716 vos_mem_free(pWdaParams->wdaMsgParam);
14717 if(pWdaParams->wdaWdiApiMsgParam)
14718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14719 vos_mem_free(pWdaParams);
14720 }
14721
14722 return;
14723}
14724
14725static VOS_STATUS
14726WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14727 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14728{
14729 WDI_Status status;
14730 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14731 tWDA_ReqParams *pWdaParams;
14732
14733 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14734 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14735 if (NULL == wdiPeerInfoReq)
14736 {
14737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14738 "%s: VOS MEM Alloc Failure", __func__);
14739 VOS_ASSERT(0);
14740 vos_mem_free(ibssPeerInfoReqParams);
14741 return VOS_STATUS_E_NOMEM;
14742 }
14743
14744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14745 if (NULL == pWdaParams)
14746 {
14747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14748 "%s: VOS MEM Alloc Failure", __func__);
14749 VOS_ASSERT(0);
14750 vos_mem_free(wdiPeerInfoReq);
14751 vos_mem_free(ibssPeerInfoReqParams);
14752 return VOS_STATUS_E_NOMEM;
14753 }
14754
14755 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14756 /* Store param pointer as passed in by caller */
14757 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14758 pWdaParams->pWdaContext = pWDA;
14759
14760 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14761 ibssPeerInfoReqParams->allPeerInfoReqd;
14762 wdiPeerInfoReq->wdiStaIdx =
14763 ibssPeerInfoReqParams->staIdx;
14764
14765 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14766 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14767 (void *)pWdaParams);
14768 if (IS_WDI_STATUS_FAILURE(status))
14769 {
14770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14771 vos_mem_free(pWdaParams->wdaMsgParam);
14772 vos_mem_free(pWdaParams) ;
14773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14774 "IBSS Peer Info Request failed");
14775 }
14776 return CONVERT_WDI2VOS_STATUS(status) ;
14777
14778}
14779
14780/*
14781 * FUNCTION: WDA_ProcessTXFailMonitorInd
14782 * Forward TX Fail Monitor to WDI
14783 */
14784static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14785 tWDA_CbContext *pWDA,
14786 tAniTXFailMonitorInd *txFailMonitorInd)
14787{
14788 WDI_Status status;
14789 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14790 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14791
14792 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14793 "<------ %s " ,__func__);
14794
14795 if (NULL == wdiTXFailMonitorInd)
14796 {
14797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14798 "%s: VOS MEM Alloc Failure", __func__);
14799 VOS_ASSERT(0);
14800 vos_mem_free(txFailMonitorInd);
14801 return VOS_STATUS_E_NOMEM;
14802 }
14803
14804 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14805
14806 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14807 wdiTXFailMonitorInd->pUserData = pWDA;
14808
14809 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14810
14811 if (WDI_STATUS_PENDING == status)
14812 {
14813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14814 "TX Fail Monitor Indication Pending");
14815 }
14816 else if (WDI_STATUS_SUCCESS_SYNC == status)
14817 {
14818 if (0 == txFailMonitorInd->tx_fail_count)
14819 pWDA->txFailIndCallback = NULL;
14820 else
14821 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14822 }
14823 else
14824 {
14825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14826 "TX Fail Monitor Indication Failed");
14827 }
14828
14829 vos_mem_free(wdiTXFailMonitorInd);
14830 vos_mem_free(txFailMonitorInd);
14831
14832 return CONVERT_WDI2VOS_STATUS(status) ;
14833}
14834#endif /* WLAN_FEATURE_RMC */
14835
Kapil Gupta04ab1992016-06-26 13:36:51 +053014836#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14837VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
14838 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
14839{
14840 WDI_Status status;
14841 tWDA_ReqParams *pWdaParams ;
14842 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
14843 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
14844 sizeof(WDI_PERRoamTriggerScanInfo));
14845
14846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14847 "------> %s " ,__func__);
14848
14849 if (NULL == pwdiPERRoamTriggerScanInfo)
14850 {
14851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14852 "%s: VOS MEM Alloc Failure", __func__);
14853 VOS_ASSERT(0);
14854 return VOS_STATUS_E_NOMEM;
14855 }
14856
14857 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14858 if (NULL == pWdaParams)
14859 {
14860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14861 "%s: VOS MEM Alloc Failure", __func__);
14862 VOS_ASSERT(0);
14863 vos_mem_free(pwdiPERRoamTriggerScanInfo);
14864 return VOS_STATUS_E_NOMEM;
14865 }
14866
14867 pwdiPERRoamTriggerScanInfo->roamScanReq =
14868 pPERRoamTriggerScanReqParams->start;
14869
14870 /* Store Params pass it to WDI */
14871 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
14872 pWdaParams->pWdaContext = pWDA;
14873
14874 /* Store param pointer as passed in by caller */
14875 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
14876 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
14877 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
14878 pWdaParams);
14879
14880 if(IS_WDI_STATUS_FAILURE(status))
14881 {
14882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14883 "Failure in Start Roam Candidate trigger Req WDI API" );
14884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14885 vos_mem_free(pWdaParams->wdaMsgParam);
14886 pWdaParams->wdaWdiApiMsgParam = NULL;
14887 pWdaParams->wdaMsgParam = NULL;
14888 }
14889 return CONVERT_WDI2VOS_STATUS(status) ;
14890}
14891#endif
14892
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014893/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014894 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14895 *
14896 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14897 *
14898 * PARAM:
14899 * pWDA: pointer to WDA context
14900 * pReq: pointer to stop batch scan request
14901 */
14902VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14903 tpSpoofMacAddrReqParams pReq)
14904{
14905 WDI_Status wdiStatus;
14906 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14907 tWDA_ReqParams *pWdaParams;
14908
14909 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14910 sizeof(WDI_SpoofMacAddrInfoType));
14911 if(NULL == WDI_SpoofMacAddrInfoParams) {
14912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14913 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14914 VOS_ASSERT(0);
14915 return VOS_STATUS_E_NOMEM;
14916 }
14917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14918 if(NULL == pWdaParams) {
14919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14920 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014921 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014922 VOS_ASSERT(0);
14923 return VOS_STATUS_E_NOMEM;
14924 }
14925
14926 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14927 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14928
14929 pWdaParams->pWdaContext = pWDA;
14930 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014931 pWdaParams->wdaMsgParam = (void *)pReq;
14932
14933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14934 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14935
Siddharth Bhal171788a2014-09-29 21:02:40 +053014936 /* store Params pass it to WDI */
14937 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14938
14939 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014940 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14941 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014942
14943 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14944 {
14945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14946 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14948 vos_mem_free(pWdaParams->wdaMsgParam);
14949 vos_mem_free(pWdaParams);
14950 }
14951
14952 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14953}
14954
c_manjeecfd1efb2015-09-25 19:32:34 +053014955
14956/*
14957 * FUNCTION: WDA_FwrMemDumpRespCallback
14958 * recieves Mgmt Logging init response from FW
14959 */
14960 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14961 void* pUserData)
14962{
14963 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14964 tAniFwrDumpReq *pFwrMemDumpReq;
14965 tAniFwrDumpRsp *pFwrMemDumpRsp;
14966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14967 "<------ %s " ,__func__);
14968
14969 if(NULL == pWdaParams)
14970 {
14971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14972 "%s: pWdaParams received NULL", __func__);
14973 VOS_ASSERT(0);
14974 return ;
14975 }
14976
14977 if(NULL == pWdaParams->wdaMsgParam)
14978 {
14979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14980 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14981 VOS_ASSERT(0);
14982 vos_mem_free(pWdaParams);
14983 return ;
14984 }
14985
14986 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14987 if(pFwrMemDumpRsp == NULL)
14988 {
14989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14990 "%s: pFwrMemDumpRsp is NULL", __func__);
14991 VOS_ASSERT(0);
14992 vos_mem_free(pWdaParams);
14993 return ;
14994 }
14995
14996 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14997 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14998
14999 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15000 {
15001 pFwrMemDumpReq->fwMemDumpReqCallback(
15002 pFwrMemDumpReq->fwMemDumpReqContext,
15003 pFwrMemDumpRsp);
15004 }
15005 else
15006 {
15007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15008 "%s: FwrMemDump callback is NULL", __func__);
15009 }
15010
15011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15012 vos_mem_free(pWdaParams->wdaMsgParam);
15013 vos_mem_free(pWdaParams);
15014 vos_mem_free(pFwrMemDumpRsp);
15015
15016 return ;
15017}
15018
15019VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15020 tAniFwrDumpReq* pFwrMemDumpReq)
15021{
15022 VOS_STATUS status = VOS_STATUS_SUCCESS;
15023 WDI_Status wstatus;
15024 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15025 tWDA_ReqParams *pWdaParams ;
15026
15027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15028 "------> %s " ,__func__);
15029 /* Sanity Check*/
15030 if(NULL == pFwrMemDumpReq)
15031 {
15032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15033 "%s: pFwrMemDumpReq received NULL", __func__);
15034 VOS_ASSERT(0) ;
15035 return VOS_STATUS_E_FAULT;
15036 }
15037
15038 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15039 if(NULL == pWdiFwrMemDumpReq)
15040 {
15041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15042 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15043 VOS_ASSERT(0);
15044 return VOS_STATUS_E_NOMEM;
15045 }
15046
15047 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15048 if(NULL == pWdaParams)
15049 {
15050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15051 "%s: pWdaParams Alloc Failure", __func__);
15052 VOS_ASSERT(0);
15053 vos_mem_free(pWdiFwrMemDumpReq);
15054 return VOS_STATUS_E_NOMEM;
15055 }
15056
15057 /* Store Params pass it to WDI */
15058 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15059 pWdaParams->pWdaContext = pWDA;
15060 /* Store param pointer as passed in by caller */
15061 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15062
15063 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15064 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15065 pWdaParams);
15066
15067 if(IS_WDI_STATUS_FAILURE(wstatus))
15068 {
15069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15070 FL("Fwr Mem Dump Req failed, free all the memory"));
15071 status = CONVERT_WDI2VOS_STATUS(wstatus);
15072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015073 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015074 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015075 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015076 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015077 }
15078
15079 return status;
15080
15081}
15082
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015083/**
15084 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15085 *
15086 * @pWDA: WDA Call back context
15087 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15088 * that holds allowed action frames bitmask
15089 *
15090 * This function sets the allowed action frames that the FW needs to
15091 * handover to host.The Action frames other than the requested ones
15092 * can be dropped in FW
15093 *
15094 * Return: VOS_STATUS enumeration
15095 */
15096VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15097 struct sir_allowed_action_frames *allowed_action_frames)
15098{
15099 WDI_Status status;
15100 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15102 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015103
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015104 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15105 vos_mem_malloc(sizeof
15106 (*wdi_allowed_action_frames));
15107 if (!wdi_allowed_action_frames) {
15108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15109 "%s: VOS MEM Alloc Failure", __func__);
15110 vos_mem_free(allowed_action_frames);
15111 return VOS_STATUS_E_NOMEM;
15112 }
15113
15114 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15115 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15116
15117 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15118 if (WDI_STATUS_PENDING == status) {
15119 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15120 FL("pending status received"));
15121 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15122 (WDI_STATUS_SUCCESS != status)) {
15123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15124 FL("Failure in allowed_action_frames API %d"), status);
15125 }
15126
15127 vos_mem_free(wdi_allowed_action_frames);
15128 vos_mem_free(allowed_action_frames);
15129 return CONVERT_WDI2VOS_STATUS(status) ;
15130}
c_manjeecfd1efb2015-09-25 19:32:34 +053015131
Siddharth Bhal171788a2014-09-29 21:02:40 +053015132/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015133 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15134 * Request to WDI.
15135 */
15136VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15137{
15138 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015139 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015140
15141 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15142
15143 staId = (v_U8_t)params;
15144
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015145 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15146 if ( NULL == pTLCb )
15147 {
15148 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15149 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15150 return VOS_STATUS_E_FAULT;
15151 }
15152
15153
15154 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015155 /* Pause TL for Sta ID */
15156 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15157}
15158
15159/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015160 * FUNCTION: WDA_McProcessMsg
15161 * Trigger DAL-AL to start CFG download
15162 */
15163VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15164{
15165 VOS_STATUS status = VOS_STATUS_SUCCESS;
15166 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015167 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015168 {
15169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015170 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015171 VOS_ASSERT(0);
15172 return VOS_STATUS_E_FAILURE;
15173 }
15174
15175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015176 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015177
15178 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15179 if(NULL == pWDA )
15180 {
15181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015182 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015183 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015184 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015185 return VOS_STATUS_E_FAILURE;
15186 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015187 /* Process all the WDA messages.. */
15188 switch( pMsg->type )
15189 {
15190 case WNI_CFG_DNLD_REQ:
15191 {
15192 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015193 /* call WDA complete event if config download success */
15194 if( VOS_IS_STATUS_SUCCESS(status) )
15195 {
15196 vos_WDAComplete_cback(pVosContext);
15197 }
15198 else
15199 {
15200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15201 "WDA Config Download failure" );
15202 }
15203 break ;
15204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015205 /*
15206 * Init SCAN request from PE, convert it into DAL format
15207 * and send it to DAL
15208 */
15209 case WDA_INIT_SCAN_REQ:
15210 {
15211 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15212 break ;
15213 }
15214 /* start SCAN request from PE */
15215 case WDA_START_SCAN_REQ:
15216 {
15217 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15218 break ;
15219 }
15220 /* end SCAN request from PE */
15221 case WDA_END_SCAN_REQ:
15222 {
15223 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15224 break ;
15225 }
15226 /* end SCAN request from PE */
15227 case WDA_FINISH_SCAN_REQ:
15228 {
15229 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15230 break ;
15231 }
15232 /* join request from PE */
15233 case WDA_CHNL_SWITCH_REQ:
15234 {
15235 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15236 {
15237 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15238 }
15239 else
15240 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015241 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15242 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15243 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15244 {
15245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15246 "call ProcessChannelSwitchReq_V1" );
15247 WDA_ProcessChannelSwitchReq_V1(pWDA,
15248 (tSwitchChannelParams*)pMsg->bodyptr) ;
15249 }
15250 else
15251 {
15252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15253 "call ProcessChannelSwitchReq" );
15254 WDA_ProcessChannelSwitchReq(pWDA,
15255 (tSwitchChannelParams*)pMsg->bodyptr) ;
15256 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015257 }
15258 break ;
15259 }
15260 /* ADD BSS request from PE */
15261 case WDA_ADD_BSS_REQ:
15262 {
15263 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15264 break ;
15265 }
15266 case WDA_ADD_STA_REQ:
15267 {
15268 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15269 break ;
15270 }
15271 case WDA_DELETE_BSS_REQ:
15272 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015273 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15274 break ;
15275 }
15276 case WDA_DELETE_STA_REQ:
15277 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015278 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15279 break ;
15280 }
15281 case WDA_CONFIG_PARAM_UPDATE_REQ:
15282 {
15283 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15284 break ;
15285 }
15286 case WDA_SET_BSSKEY_REQ:
15287 {
15288 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15289 break ;
15290 }
15291 case WDA_SET_STAKEY_REQ:
15292 {
15293 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15294 break ;
15295 }
15296 case WDA_SET_STA_BCASTKEY_REQ:
15297 {
15298 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15299 break ;
15300 }
15301 case WDA_REMOVE_BSSKEY_REQ:
15302 {
15303 WDA_ProcessRemoveBssKeyReq(pWDA,
15304 (tRemoveBssKeyParams *)pMsg->bodyptr);
15305 break ;
15306 }
15307 case WDA_REMOVE_STAKEY_REQ:
15308 {
15309 WDA_ProcessRemoveStaKeyReq(pWDA,
15310 (tRemoveStaKeyParams *)pMsg->bodyptr);
15311 break ;
15312 }
15313 case WDA_REMOVE_STA_BCASTKEY_REQ:
15314 {
15315 /* TODO: currently UMAC is not sending this request, Add the code for
15316 handling this request when UMAC supports */
15317 break;
15318 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015319#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015320 case WDA_TSM_STATS_REQ:
15321 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015322 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015323 break;
15324 }
15325#endif
15326 case WDA_UPDATE_EDCA_PROFILE_IND:
15327 {
15328 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15329 break;
15330 }
15331 case WDA_ADD_TS_REQ:
15332 {
15333 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15334 break;
15335 }
15336 case WDA_DEL_TS_REQ:
15337 {
15338 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15339 break;
15340 }
15341 case WDA_ADDBA_REQ:
15342 {
15343 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15344 break;
15345 }
15346 case WDA_DELBA_IND:
15347 {
15348 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15349 break;
15350 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015351 case WDA_UPDATE_CHAN_LIST_REQ:
15352 {
15353 WDA_ProcessUpdateChannelList(pWDA,
15354 (tSirUpdateChanList *)pMsg->bodyptr);
15355 break;
15356 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015357 case WDA_SET_LINK_STATE:
15358 {
15359 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15360 break;
15361 }
15362 case WDA_GET_STATISTICS_REQ:
15363 {
15364 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15365 break;
15366 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015367#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015368 case WDA_GET_ROAM_RSSI_REQ:
15369 {
15370 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15371 break;
15372 }
15373#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015374 case WDA_PWR_SAVE_CFG:
15375 {
15376 if(pWDA->wdaState == WDA_READY_STATE)
15377 {
15378 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15379 }
15380 else
15381 {
15382 if(NULL != pMsg->bodyptr)
15383 {
15384 vos_mem_free(pMsg->bodyptr);
15385 }
15386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15387 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15388 }
15389 break;
15390 }
15391 case WDA_ENTER_IMPS_REQ:
15392 {
15393 if(pWDA->wdaState == WDA_READY_STATE)
15394 {
15395 WDA_ProcessEnterImpsReq(pWDA);
15396 }
15397 else
15398 {
15399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15400 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15401 }
15402 break;
15403 }
15404 case WDA_EXIT_IMPS_REQ:
15405 {
15406 if(pWDA->wdaState == WDA_READY_STATE)
15407 {
15408 WDA_ProcessExitImpsReq(pWDA);
15409 }
15410 else
15411 {
15412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15413 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15414 }
15415 break;
15416 }
15417 case WDA_ENTER_BMPS_REQ:
15418 {
15419 if(pWDA->wdaState == WDA_READY_STATE)
15420 {
15421 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15422 }
15423 else
15424 {
15425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15426 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15427 }
15428 break;
15429 }
15430 case WDA_EXIT_BMPS_REQ:
15431 {
15432 if(pWDA->wdaState == WDA_READY_STATE)
15433 {
15434 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15435 }
15436 else
15437 {
15438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15439 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15440 }
15441 break;
15442 }
15443 case WDA_ENTER_UAPSD_REQ:
15444 {
15445 if(pWDA->wdaState == WDA_READY_STATE)
15446 {
15447 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15448 }
15449 else
15450 {
15451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15452 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15453 }
15454 break;
15455 }
15456 case WDA_EXIT_UAPSD_REQ:
15457 {
15458 if(pWDA->wdaState == WDA_READY_STATE)
15459 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015460 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015461 }
15462 else
15463 {
15464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15465 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15466 }
15467 break;
15468 }
15469 case WDA_UPDATE_UAPSD_IND:
15470 {
15471 if(pWDA->wdaState == WDA_READY_STATE)
15472 {
15473 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15474 }
15475 else
15476 {
15477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15478 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15479 }
15480 break;
15481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015482 case WDA_REGISTER_PE_CALLBACK :
15483 {
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15485 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15486 /*TODO: store the PE callback */
15487 /* Do Nothing? MSG Body should be freed at here */
15488 if(NULL != pMsg->bodyptr)
15489 {
15490 vos_mem_free(pMsg->bodyptr);
15491 }
15492 break;
15493 }
15494 case WDA_SYS_READY_IND :
15495 {
15496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15497 "Handling msg type WDA_SYS_READY_IND " );
15498 pWDA->wdaState = WDA_READY_STATE;
15499 if(NULL != pMsg->bodyptr)
15500 {
15501 vos_mem_free(pMsg->bodyptr);
15502 }
15503 break;
15504 }
15505 case WDA_BEACON_FILTER_IND :
15506 {
15507 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
15508 break;
15509 }
15510 case WDA_BTC_SET_CFG:
15511 {
15512 /*TODO: handle this while dealing with BTC */
15513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15514 "Handling msg type WDA_BTC_SET_CFG " );
15515 /* Do Nothing? MSG Body should be freed at here */
15516 if(NULL != pMsg->bodyptr)
15517 {
15518 vos_mem_free(pMsg->bodyptr);
15519 }
15520 break;
15521 }
15522 case WDA_SIGNAL_BT_EVENT:
15523 {
15524 /*TODO: handle this while dealing with BTC */
15525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15526 "Handling msg type WDA_SIGNAL_BT_EVENT " );
15527 /* Do Nothing? MSG Body should be freed at here */
15528 if(NULL != pMsg->bodyptr)
15529 {
15530 vos_mem_free(pMsg->bodyptr);
15531 }
15532 break;
15533 }
15534 case WDA_CFG_RXP_FILTER_REQ:
15535 {
15536 WDA_ProcessConfigureRxpFilterReq(pWDA,
15537 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
15538 break;
15539 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015540 case WDA_MGMT_LOGGING_INIT_REQ:
15541 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053015542 WDA_ProcessFWLoggingInitReq(pWDA,
15543 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015544 break;
15545 }
Siddharth Bhal64246172015-02-27 01:04:37 +053015546 case WDA_GET_FRAME_LOG_REQ:
15547 {
15548 WDA_ProcessGetFrameLogReq(pWDA,
15549 (tAniGetFrameLogReq *)pMsg->bodyptr);
15550 break;
15551 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053015552 case WDA_START_RSSI_MONITOR_REQ:
15553 {
15554 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15555 break;
15556 }
15557 case WDA_STOP_RSSI_MONITOR_REQ:
15558 {
15559 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15560 break;
15561 }
Karthick Sa35b0692015-08-21 15:57:05 +053015562 case WDA_SEND_LOG_DONE_IND:
15563 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053015564 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053015565 break;
15566 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053015567 case WDA_FATAL_EVENT_LOGS_REQ:
15568 {
15569 WDA_ProcessFatalEventLogsReq(pWDA,
15570 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
15571 break;
15572 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015573 case WDA_SET_HOST_OFFLOAD:
15574 {
15575 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15576 break;
15577 }
15578 case WDA_SET_KEEP_ALIVE:
15579 {
15580 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
15581 break;
15582 }
15583#ifdef WLAN_NS_OFFLOAD
15584 case WDA_SET_NS_OFFLOAD:
15585 {
15586 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15587 break;
15588 }
15589#endif //WLAN_NS_OFFLOAD
15590 case WDA_ADD_STA_SELF_REQ:
15591 {
15592 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
15593 break;
15594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015595 case WDA_DEL_STA_SELF_REQ:
15596 {
15597 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
15598 break;
15599 }
15600 case WDA_WOWL_ADD_BCAST_PTRN:
15601 {
15602 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
15603 break;
15604 }
15605 case WDA_WOWL_DEL_BCAST_PTRN:
15606 {
15607 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
15608 break;
15609 }
15610 case WDA_WOWL_ENTER_REQ:
15611 {
15612 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
15613 break;
15614 }
15615 case WDA_WOWL_EXIT_REQ:
15616 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015617 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015618 break;
15619 }
15620 case WDA_TL_FLUSH_AC_REQ:
15621 {
15622 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
15623 break;
15624 }
15625 case WDA_SIGNAL_BTAMP_EVENT:
15626 {
15627 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
15628 break;
15629 }
Abhishek Singh85b74712014-10-08 11:38:19 +053015630 case WDA_FW_STATS_GET_REQ:
15631 {
15632 WDA_ProcessFWStatsGetReq(pWDA,
15633 (tSirFWStatsGetReq *)pMsg->bodyptr);
15634 break;
15635 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053015636#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15637 case WDA_LINK_LAYER_STATS_SET_REQ:
15638 {
15639 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
15640 break;
15641 }
15642 case WDA_LINK_LAYER_STATS_GET_REQ:
15643 {
15644 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
15645 break;
15646 }
15647 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
15648 {
15649 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
15650 break;
15651 }
15652#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053015653#ifdef WLAN_FEATURE_EXTSCAN
15654 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
15655 {
15656 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
15657 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
15658 break;
15659 }
15660 case WDA_EXTSCAN_START_REQ:
15661 {
15662 WDA_ProcessEXTScanStartReq(pWDA,
15663 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
15664 break;
15665 }
15666 case WDA_EXTSCAN_STOP_REQ:
15667 {
15668 WDA_ProcessEXTScanStopReq(pWDA,
15669 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
15670 break;
15671 }
15672 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
15673 {
15674 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15675 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15676 break;
15677 }
15678 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15679 {
15680 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15681 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15682 break;
15683 }
15684 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15685 {
15686 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15687 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15688 break;
15689 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015690 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15691 {
15692 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15693 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15694 break;
15695 }
15696 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15697 {
15698 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15699 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15700 break;
15701 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015702 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15703 {
15704 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15705 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15706 break;
15707 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015708#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015709#ifdef WDA_UT
15710 case WDA_WDI_EVENT_MSG:
15711 {
15712 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15713 break ;
15714 }
15715#endif
15716 case WDA_UPDATE_BEACON_IND:
15717 {
15718 WDA_ProcessUpdateBeaconParams(pWDA,
15719 (tUpdateBeaconParams *)pMsg->bodyptr);
15720 break;
15721 }
15722 case WDA_SEND_BEACON_REQ:
15723 {
15724 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15725 break;
15726 }
15727 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15728 {
15729 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15730 (tSendProbeRespParams *)pMsg->bodyptr);
15731 break;
15732 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015733#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015734 case WDA_SET_MAX_TX_POWER_REQ:
15735 {
15736 WDA_ProcessSetMaxTxPowerReq(pWDA,
15737 (tMaxTxPowerParams *)pMsg->bodyptr);
15738 break;
15739 }
15740#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015741 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15742 {
15743 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15744 pMsg->bodyptr);
15745 break;
15746 }
schang86c22c42013-03-13 18:41:24 -070015747 case WDA_SET_TX_POWER_REQ:
15748 {
15749 WDA_ProcessSetTxPowerReq(pWDA,
15750 (tSirSetTxPowerReq *)pMsg->bodyptr);
15751 break;
15752 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015753 case WDA_SET_P2P_GO_NOA_REQ:
15754 {
15755 WDA_ProcessSetP2PGONOAReq(pWDA,
15756 (tP2pPsParams *)pMsg->bodyptr);
15757 break;
15758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015759 /* timer related messages */
15760 case WDA_TIMER_BA_ACTIVITY_REQ:
15761 {
15762 WDA_BaCheckActivity(pWDA) ;
15763 break ;
15764 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015765
15766 /* timer related messages */
15767 case WDA_TIMER_TRAFFIC_STATS_IND:
15768 {
15769 WDA_TimerTrafficStatsInd(pWDA);
15770 break;
15771 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015772#ifdef WLAN_FEATURE_VOWIFI_11R
15773 case WDA_AGGR_QOS_REQ:
15774 {
15775 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15776 break;
15777 }
15778#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015779 case WDA_FTM_CMD_REQ:
15780 {
15781 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15782 break ;
15783 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015784#ifdef FEATURE_OEM_DATA_SUPPORT
15785 case WDA_START_OEM_DATA_REQ:
15786 {
15787 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15788 break;
15789 }
15790#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015791 /* Tx Complete Time out Indication */
15792 case WDA_TX_COMPLETE_TIMEOUT_IND:
15793 {
15794 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15795 break;
15796 }
15797 case WDA_WLAN_SUSPEND_IND:
15798 {
15799 WDA_ProcessWlanSuspendInd(pWDA,
15800 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15801 break;
15802 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015803 case WDA_WLAN_RESUME_REQ:
15804 {
15805 WDA_ProcessWlanResumeReq(pWDA,
15806 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15807 break;
15808 }
15809
15810 case WDA_UPDATE_CF_IND:
15811 {
15812 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15813 pMsg->bodyptr = NULL;
15814 break;
15815 }
15816#ifdef FEATURE_WLAN_SCAN_PNO
15817 case WDA_SET_PNO_REQ:
15818 {
15819 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15820 break;
15821 }
15822 case WDA_UPDATE_SCAN_PARAMS_REQ:
15823 {
15824 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15825 break;
15826 }
15827 case WDA_SET_RSSI_FILTER_REQ:
15828 {
15829 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15830 break;
15831 }
15832#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015833#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015834 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015835 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015836 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015837 break;
15838 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053015839 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
15840 {
15841 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
15842 break;
15843 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015844#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015845 case WDA_SET_TX_PER_TRACKING_REQ:
15846 {
15847 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15848 break;
15849 }
15850
15851#ifdef WLAN_FEATURE_PACKET_FILTERING
15852 case WDA_8023_MULTICAST_LIST_REQ:
15853 {
15854 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15855 break;
15856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015857 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15858 {
15859 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15860 break;
15861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015862 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15863 {
15864 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15865 break;
15866 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015867 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15868 {
15869 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15870 break;
15871 }
15872#endif // WLAN_FEATURE_PACKET_FILTERING
15873
15874
15875 case WDA_TRANSMISSION_CONTROL_IND:
15876 {
15877 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15878 break;
15879 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015880 case WDA_SET_POWER_PARAMS_REQ:
15881 {
15882 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15883 break;
15884 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015885 case WDA_FW_MEM_DUMP_REQ:
15886 {
15887 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15888 break;
15889 }
15890
Jeff Johnson295189b2012-06-20 16:38:30 -070015891#ifdef WLAN_FEATURE_GTK_OFFLOAD
15892 case WDA_GTK_OFFLOAD_REQ:
15893 {
15894 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15895 break;
15896 }
15897
15898 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15899 {
15900 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15901 break;
15902 }
15903#endif //WLAN_FEATURE_GTK_OFFLOAD
15904
15905 case WDA_SET_TM_LEVEL_REQ:
15906 {
15907 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15908 break;
15909 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015910
Mohit Khanna4a70d262012-09-11 16:30:12 -070015911 case WDA_UPDATE_OP_MODE:
15912 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015913 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15914 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15915 {
15916 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15917 }
15918 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015919 {
15920 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15921 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15922 else
15923 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015924 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015925 }
15926 else
15927 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015928 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015929 break;
15930 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015931#ifdef WLAN_FEATURE_11W
15932 case WDA_EXCLUDE_UNENCRYPTED_IND:
15933 {
15934 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15935 break;
15936 }
15937#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015938#ifdef FEATURE_WLAN_TDLS
15939 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15940 {
15941 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15942 break;
15943 }
15944#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015945 case WDA_DHCP_START_IND:
15946 {
15947 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15948 break;
15949 }
15950 case WDA_DHCP_STOP_IND:
15951 {
15952 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15953 break;
15954 }
Leo Chang9056f462013-08-01 19:21:11 -070015955#ifdef FEATURE_WLAN_LPHB
15956 case WDA_LPHB_CONF_REQ:
15957 {
15958 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15959 break;
15960 }
15961#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015962 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15963 {
15964 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15965 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15966 break;
15967 }
15968 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15969 {
15970 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15971 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15972 break;
15973 }
Abhishek Singh00b71972016-01-07 10:51:04 +053015974 case WDA_RATE_UPDATE_IND:
15975 {
15976 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15977 break;
15978 }
15979#ifdef WLAN_FEATURE_RMC
15980 case WDA_RMC_RULER_REQ:
15981 {
15982 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
15983 break;
15984 }
15985 case WDA_RMC_UPDATE_IND:
15986 {
15987 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
15988 break;
15989 }
15990 case WDA_GET_IBSS_PEER_INFO_REQ:
15991 {
15992 WDA_ProcessIbssPeerInfoReq(pWDA,
15993 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
15994 break;
15995 }
15996 case WDA_TX_FAIL_MONITOR_IND:
15997 {
15998 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
15999 break;
16000 }
16001#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053016002#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16003 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
16004 {
16005 WDA_ProcessPERRoamScanTriggerReq(pWDA,
16006 (tPERRoamScanStart *)pMsg->bodyptr);
16007 break;
16008 }
16009#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053016010#ifdef FEATURE_WLAN_BATCH_SCAN
16011 case WDA_SET_BATCH_SCAN_REQ:
16012 {
16013 WDA_ProcessSetBatchScanReq(pWDA,
16014 (tSirSetBatchScanReq *)pMsg->bodyptr);
16015 break;
16016 }
16017 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
16018 {
16019 WDA_ProcessTriggerBatchScanResultInd(pWDA,
16020 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
16021 break;
16022 }
16023 case WDA_STOP_BATCH_SCAN_IND:
16024 {
16025 WDA_ProcessStopBatchScanInd(pWDA,
16026 (tSirStopBatchScanInd *)pMsg->bodyptr);
16027 break;
16028 }
c_hpothu92367912014-05-01 15:18:17 +053016029 case WDA_GET_BCN_MISS_RATE_REQ:
16030 WDA_ProcessGetBcnMissRateReq(pWDA,
16031 (tSirBcnMissRateReq *)pMsg->bodyptr);
16032 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053016033#endif
16034
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053016035 case WDA_HT40_OBSS_SCAN_IND:
16036 {
16037 WDA_ProcessHT40OBSSScanInd(pWDA,
16038 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
16039 break;
16040 }
16041 case WDA_HT40_OBSS_STOP_SCAN_IND:
16042 {
16043 WDA_ProcessHT40OBSSStopScanInd(pWDA,
16044 (tANI_U8*)pMsg->bodyptr);
16045 break;
16046 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053016047// tdlsoffchan
16048#ifdef FEATURE_WLAN_TDLS
16049 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
16050 {
16051 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
16052 break;
16053 }
16054#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053016055 case WDA_SPOOF_MAC_ADDR_REQ:
16056 {
16057 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
16058 break;
16059 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053016060 case WDA_ENCRYPT_MSG_REQ:
16061 {
16062 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
16063 break;
16064 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016065
16066 case WDA_NAN_REQUEST:
16067 {
16068 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
16069 break;
16070 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053016071 case WDA_SET_RTS_CTS_HTVHT:
16072 {
16073 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
16074 break;
16075 }
Katya Nigamf0511f62015-05-05 16:40:57 +053016076
16077 case WDA_MON_START_REQ:
16078 {
16079 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
16080 break;
16081 }
16082 case WDA_MON_STOP_REQ:
16083 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053016084 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053016085 break;
16086 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053016087 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
16088 {
16089 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
16090 break;
16091 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053016092 case WDA_WIFI_CONFIG_REQ:
16093 {
16094 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
16095 break;
16096 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016097#ifdef FEATURE_OEM_DATA_SUPPORT
16098 case WDA_START_OEM_DATA_REQ_IND_NEW:
16099 {
16100 WDA_ProcessStartOemDataReqIndNew(pWDA,
16101 (tOemDataReqNewConfig *)pMsg->bodyptr);
16102 break;
16103 }
16104#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053016105 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
16106 {
16107 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
16108 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
16109 break;
16110 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053016111 case WDA_MODIFY_ROAM_PARAMS_IND:
16112 {
16113 WDA_ProcessBcnMissPenaltyCount(pWDA,
16114 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
16115 break;
16116 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053016117
16118 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
16119 wda_process_set_allowed_action_frames_ind(pWDA,
16120 (struct sir_allowed_action_frames*)pMsg->bodyptr);
16121 break;
16122
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016123 case WDA_PAUSE_TL_IND:
16124 {
16125 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
16126 break;
16127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016128 default:
16129 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053016130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016131 "No Handling for msg type %x in WDA "
16132 ,pMsg->type);
16133 /* Do Nothing? MSG Body should be freed at here */
16134 if(NULL != pMsg->bodyptr)
16135 {
16136 vos_mem_free(pMsg->bodyptr);
16137 }
16138 //WDA_VOS_ASSERT(0) ;
16139 }
16140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016141 return status ;
16142}
16143
Jeff Johnson295189b2012-06-20 16:38:30 -070016144/*
16145 * FUNCTION: WDA_LowLevelIndCallback
16146 * IND API callback from WDI, send Ind to PE
16147 */
16148void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
16149 void* pUserData )
16150{
16151 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
16152#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16153 tSirRSSINotification rssiNotification;
16154#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016155 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016156 {
16157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016158 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016159 VOS_ASSERT(0);
16160 return ;
16161 }
16162
16163 switch(wdiLowLevelInd->wdiIndicationType)
16164 {
16165 case WDI_RSSI_NOTIFICATION_IND:
16166 {
16167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16168 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016169#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16170 rssiNotification.bReserved =
16171 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16172 rssiNotification.bRssiThres1NegCross =
16173 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16174 rssiNotification.bRssiThres1PosCross =
16175 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16176 rssiNotification.bRssiThres2NegCross =
16177 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16178 rssiNotification.bRssiThres2PosCross =
16179 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16180 rssiNotification.bRssiThres3NegCross =
16181 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16182 rssiNotification.bRssiThres3PosCross =
16183 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016184 rssiNotification.avgRssi = (v_S7_t)
16185 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016186 WLANTL_BMPSRSSIRegionChangedNotification(
16187 pWDA->pVosContext,
16188 &rssiNotification);
16189#endif
16190 break ;
16191 }
16192 case WDI_MISSED_BEACON_IND:
16193 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016194 tpSirSmeMissedBeaconInd pMissBeacInd =
16195 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16197 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016198 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016199 if(NULL == pMissBeacInd)
16200 {
16201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16202 "%s: VOS MEM Alloc Failure", __func__);
16203 break;
16204 }
16205 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16206 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16207 pMissBeacInd->bssIdx =
16208 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16209 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016210 break ;
16211 }
16212 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16213 {
16214 /* TODO: Decode Ind and send Ind to PE */
16215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16216 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16217 break ;
16218 }
16219
16220 case WDI_MIC_FAILURE_IND:
16221 {
16222 tpSirSmeMicFailureInd pMicInd =
16223 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16224
16225 if(NULL == pMicInd)
16226 {
16227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016228 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016229 break;
16230 }
16231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16232 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016233 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16234 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16235 vos_mem_copy(pMicInd->bssId,
16236 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16237 sizeof(tSirMacAddr));
16238 vos_mem_copy(pMicInd->info.srcMacAddr,
16239 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16240 sizeof(tSirMacAddr));
16241 vos_mem_copy(pMicInd->info.taMacAddr,
16242 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16243 sizeof(tSirMacAddr));
16244 vos_mem_copy(pMicInd->info.dstMacAddr,
16245 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16246 sizeof(tSirMacAddr));
16247 vos_mem_copy(pMicInd->info.rxMacAddr,
16248 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16249 sizeof(tSirMacAddr));
16250 pMicInd->info.multicast =
16251 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16252 pMicInd->info.keyId=
16253 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16254 pMicInd->info.IV1=
16255 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16256 vos_mem_copy(pMicInd->info.TSC,
16257 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016258 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16259 (void *)pMicInd , 0) ;
16260 break ;
16261 }
16262 case WDI_FATAL_ERROR_IND:
16263 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016264 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016265 /* TODO: Decode Ind and send Ind to PE */
16266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16267 "Received WDI_FATAL_ERROR_IND from WDI ");
16268 break ;
16269 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016270 case WDI_DEL_STA_IND:
16271 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016272 tpDeleteStaContext pDelSTACtx =
16273 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16274
16275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16276 "Received WDI_DEL_STA_IND from WDI ");
16277 if(NULL == pDelSTACtx)
16278 {
16279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016281 break;
16282 }
16283 vos_mem_copy(pDelSTACtx->addr2,
16284 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16285 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016286 vos_mem_copy(pDelSTACtx->bssId,
16287 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16288 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016289 pDelSTACtx->assocId =
16290 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16291 pDelSTACtx->reasonCode =
16292 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16293 pDelSTACtx->staId =
16294 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016295 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16296 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016297 break ;
16298 }
16299 case WDI_COEX_IND:
16300 {
16301 tANI_U32 index;
16302 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016303 tSirSmeCoexInd *pSmeCoexInd;
16304
16305 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16306 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16307 {
16308 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16309 {
16310 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16311 FL("Coex state: 0x%x coex feature: 0x%x"),
16312 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16313 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16314
16315 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16316 {
16317 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16318 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16319 }
16320 }
16321 break;
16322 }
16323
16324 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016325 if(NULL == pSmeCoexInd)
16326 {
16327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016328 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016329 break;
16330 }
16331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16332 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016333 /* Message Header */
16334 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16335 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016336 /* Info from WDI Indication */
16337 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16338 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16339 {
16340 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16341 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016342 /* VOS message wrapper */
16343 vosMsg.type = eWNI_SME_COEX_IND;
16344 vosMsg.bodyptr = (void *)pSmeCoexInd;
16345 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016346 /* Send message to SME */
16347 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16348 {
16349 /* free the mem and return */
16350 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16351 }
16352 else
16353 {
16354 /* DEBUG */
16355 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16356 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16357 pSmeCoexInd->coexIndType,
16358 pSmeCoexInd->coexIndData[0],
16359 pSmeCoexInd->coexIndData[1],
16360 pSmeCoexInd->coexIndData[2],
16361 pSmeCoexInd->coexIndData[3]);
16362 }
16363 break;
16364 }
16365 case WDI_TX_COMPLETE_IND:
16366 {
16367 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16368 /* Calling TxCompleteAck Indication from wda context*/
16369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16370 "Complete Indication received from HAL");
16371 if( pWDA->pAckTxCbFunc )
16372 {
16373 if( VOS_STATUS_SUCCESS !=
16374 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16375 {
16376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16377 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016378 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016379 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016380 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16381 else
16382 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016383 pWDA->pAckTxCbFunc = NULL;
16384 }
16385 else
16386 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016388 "Tx Complete Indication is received after timeout ");
16389 }
16390 break;
16391 }
Viral Modid86bde22012-12-10 13:09:21 -080016392 case WDI_P2P_NOA_START_IND :
16393 {
16394 tSirP2PNoaStart *pP2pNoaStart =
16395 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16396
16397 if (NULL == pP2pNoaStart)
16398 {
16399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16400 "Memory allocation failure, "
16401 "WDI_P2P_NOA_START_IND not forwarded");
16402 break;
16403 }
16404 pP2pNoaStart->status =
16405 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16406 pP2pNoaStart->bssIdx =
16407 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16408 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16409 (void *)pP2pNoaStart , 0) ;
16410 break;
16411 }
16412
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016413#ifdef FEATURE_WLAN_TDLS
16414 case WDI_TDLS_IND :
16415 {
16416 tSirTdlsInd *pTdlsInd =
16417 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16418
16419 if (NULL == pTdlsInd)
16420 {
16421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16422 "Memory allocation failure, "
16423 "WDI_TDLS_IND not forwarded");
16424 break;
16425 }
16426 pTdlsInd->status =
16427 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16428 pTdlsInd->assocId =
16429 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16430 pTdlsInd->staIdx =
16431 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16432 pTdlsInd->reasonCode =
16433 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16434 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16435 (void *)pTdlsInd , 0) ;
16436 break;
16437 }
16438#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016439 case WDI_P2P_NOA_ATTR_IND :
16440 {
16441 tSirP2PNoaAttr *pP2pNoaAttr =
16442 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16444 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016445 if (NULL == pP2pNoaAttr)
16446 {
16447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16448 "Memory allocation failure, "
16449 "WDI_P2P_NOA_ATTR_IND not forwarded");
16450 break;
16451 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016452 pP2pNoaAttr->index =
16453 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16454 pP2pNoaAttr->oppPsFlag =
16455 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16456 pP2pNoaAttr->ctWin =
16457 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16458
16459 pP2pNoaAttr->uNoa1IntervalCnt =
16460 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16461 pP2pNoaAttr->uNoa1Duration =
16462 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16463 pP2pNoaAttr->uNoa1Interval =
16464 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16465 pP2pNoaAttr->uNoa1StartTime =
16466 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016467 pP2pNoaAttr->uNoa2IntervalCnt =
16468 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16469 pP2pNoaAttr->uNoa2Duration =
16470 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16471 pP2pNoaAttr->uNoa2Interval =
16472 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16473 pP2pNoaAttr->uNoa2StartTime =
16474 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016475 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16476 (void *)pP2pNoaAttr , 0) ;
16477 break;
16478 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016479#ifdef FEATURE_WLAN_SCAN_PNO
16480 case WDI_PREF_NETWORK_FOUND_IND:
16481 {
16482 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016483 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16484 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16485 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16486 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16487
Jeff Johnson295189b2012-06-20 16:38:30 -070016488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16489 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 if (NULL == pPrefNetworkFoundInd)
16491 {
16492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16493 "Memory allocation failure, "
16494 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016495 if (NULL !=
16496 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16497 {
16498 wpalMemoryFree(
16499 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16500 );
16501 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16502 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016503 break;
16504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016505 /* Message Header */
16506 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016507 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070016508
16509 /* Info from WDI Indication */
16510 pPrefNetworkFoundInd->ssId.length =
16511 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070016512 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070016513 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
16514 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
16515 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070016516 if (NULL !=
16517 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16518 {
16519 pPrefNetworkFoundInd->frameLength =
16520 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16521 vos_mem_copy( pPrefNetworkFoundInd->data,
16522 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
16523 pPrefNetworkFoundInd->frameLength);
16524 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
16525 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16526 }
16527 else
16528 {
16529 pPrefNetworkFoundInd->frameLength = 0;
16530 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016531 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070016532 /* VOS message wrapper */
16533 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
16534 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
16535 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016536 /* Send message to SME */
16537 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16538 {
16539 /* free the mem and return */
16540 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
16541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016542 break;
16543 }
16544#endif // FEATURE_WLAN_SCAN_PNO
16545
16546#ifdef WLAN_WAKEUP_EVENTS
16547 case WDI_WAKE_REASON_IND:
16548 {
16549 vos_msg_t vosMsg;
16550 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
16551 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
16552 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
16553
16554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053016555 "[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 -070016556 wdiLowLevelInd->wdiIndicationType,
16557 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
16558 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
16559 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16560
16561 if (NULL == pWakeReasonInd)
16562 {
16563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16564 "Memory allocation failure, "
16565 "WDI_WAKE_REASON_IND not forwarded");
16566 break;
16567 }
16568
16569 vos_mem_zero(pWakeReasonInd, allocSize);
16570
16571 /* Message Header */
16572 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
16573 pWakeReasonInd->mesgLen = allocSize;
16574
16575 /* Info from WDI Indication */
16576 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
16577 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
16578 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
16579 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
16580 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
16581 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
16582 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
16583 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16584
16585 /* VOS message wrapper */
16586 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
16587 vosMsg.bodyptr = (void *) pWakeReasonInd;
16588 vosMsg.bodyval = 0;
16589
16590 /* Send message to SME */
16591 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16592 {
16593 /* free the mem and return */
16594 vos_mem_free((v_VOID_t *) pWakeReasonInd);
16595 }
16596
16597 break;
16598 }
16599#endif // WLAN_WAKEUP_EVENTS
16600
16601 case WDI_TX_PER_HIT_IND:
16602 {
16603 vos_msg_t vosMsg;
16604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
16605 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
16606 /* VOS message wrapper */
16607 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
16608 vosMsg.bodyptr = NULL;
16609 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016610 /* Send message to SME */
16611 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16612 {
16613 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
16614 }
16615 break;
16616 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016617#ifdef WLAN_FEATURE_RMC
16618 case WDI_TX_FAIL_IND:
16619 {
16620 if (pWDA->txFailIndCallback)
16621 {
16622 pWDA->txFailIndCallback(
16623 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
16624 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
16625 }
16626 break;
16627 }
16628#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070016629
Leo Chang9056f462013-08-01 19:21:11 -070016630#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070016631 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070016632 {
Leo Changd9df8aa2013-09-26 13:32:26 -070016633 vos_msg_t vosMsg;
16634 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016635
Leo Changd9df8aa2013-09-26 13:32:26 -070016636 lphbInd =
16637 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
16638 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070016639 {
16640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16641 "%s: LPHB IND buffer alloc Fail", __func__);
16642 return ;
16643 }
16644
Leo Changd9df8aa2013-09-26 13:32:26 -070016645 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070016646 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070016647 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070016648 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070016649 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070016650 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
16651
16652 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070016653 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070016654 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
16655
Leo Changd9df8aa2013-09-26 13:32:26 -070016656 vosMsg.type = eWNI_SME_LPHB_IND;
16657 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016658 vosMsg.bodyval = 0;
16659 /* Send message to SME */
16660 if (VOS_STATUS_SUCCESS !=
16661 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16662 {
16663 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16664 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070016665 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070016666 }
16667 break;
16668 }
16669#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070016670 case WDI_PERIODIC_TX_PTRN_FW_IND:
16671 {
16672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16673 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
16674 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
16675 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
16676 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
16677 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
16678 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
16679
16680 break;
16681 }
Leo Chang9056f462013-08-01 19:21:11 -070016682
Ravi Joshid2ca7c42013-07-23 08:37:49 -070016683 case WDI_IBSS_PEER_INACTIVITY_IND:
16684 {
16685 tSirIbssPeerInactivityInd *pIbssInd =
16686 (tSirIbssPeerInactivityInd *)
16687 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
16688
16689 if (NULL == pIbssInd)
16690 {
16691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16692 "Memory allocation failure, "
16693 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
16694 break;
16695 }
16696
16697 pIbssInd->bssIdx =
16698 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
16699 pIbssInd->staIdx =
16700 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
16701 vos_mem_copy(pIbssInd->peerAddr,
16702 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
16703 sizeof(tSirMacAddr));
16704 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
16705 break;
16706 }
16707
Abhishek Singh00b71972016-01-07 10:51:04 +053016708#ifdef WLAN_FEATURE_RMC
16709 case WDI_RMC_RULER_PICK_NEW :
16710 {
16711 tSirRmcUpdateInd *pRmcUpdateInd =
16712 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
16713
16714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16715 "Received WDI_RMC_UPDATE_IND from WDI");
16716 if (NULL == pRmcUpdateInd)
16717 {
16718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16719 "Memory allocation failure, "
16720 "WDI_RMC_UPDATE_IND not forwarded");
16721 break;
16722 }
16723
16724 pRmcUpdateInd->indication =
16725 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
16726 pRmcUpdateInd->role =
16727 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
16728
16729 /* Copy the mcast transmitter which should be us */
16730 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
16731 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
16732 mcastTransmitter,
16733 sizeof(tSirMacAddr));
16734 /* Copy the mcast group address */
16735 vos_mem_copy(pRmcUpdateInd->mcastGroup,
16736 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
16737 sizeof(tSirMacAddr));
16738 vos_mem_copy(pRmcUpdateInd->mcastRuler,
16739 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
16740 sizeof(tSirMacAddr));
16741 vos_mem_copy(pRmcUpdateInd->ruler,
16742 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
16743 sizeof(pRmcUpdateInd->ruler));
16744
16745 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
16746 break;
16747 }
16748#endif /* WLAN_FEATURE_RMC */
16749
Rajeev79dbe4c2013-10-05 11:03:42 +053016750#ifdef FEATURE_WLAN_BATCH_SCAN
16751 case WDI_BATCH_SCAN_RESULT_IND:
16752 {
16753 void *pBatchScanResult;
16754 void *pCallbackContext;
16755 tpAniSirGlobal pMac;
16756
16757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16758 "Received WDI_BATCHSCAN_RESULT_IND from FW");
16759
16760 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053016761 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053016762 {
16763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16764 "%s:pWDA is NULL", __func__);
16765 VOS_ASSERT(0);
16766 return;
16767 }
16768
16769 pBatchScanResult =
16770 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
16771 if (NULL == pBatchScanResult)
16772 {
16773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16774 "%s:Batch scan result from FW is null can't invoke HDD callback",
16775 __func__);
16776 VOS_ASSERT(0);
16777 return;
16778 }
16779
16780 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16781 if (NULL == pMac)
16782 {
16783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16784 "%s:pMac is NULL", __func__);
16785 VOS_ASSERT(0);
16786 return;
16787 }
16788
16789 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16790 /*call hdd callback with set batch scan response data*/
16791 if(pMac->pmc.batchScanResultCallback)
16792 {
16793 pMac->pmc.batchScanResultCallback(pCallbackContext,
16794 pBatchScanResult);
16795 }
16796 else
16797 {
16798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16799 "%s:HDD callback is null", __func__);
16800 VOS_ASSERT(0);
16801 }
16802 break;
16803 }
16804#endif
16805
Leo Chang0b0e45a2013-12-15 15:18:55 -080016806#ifdef FEATURE_WLAN_CH_AVOID
16807 case WDI_CH_AVOID_IND:
16808 {
16809 vos_msg_t vosMsg;
16810 tSirChAvoidIndType *chAvoidInd;
16811
16812 chAvoidInd =
16813 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16814 if (NULL == chAvoidInd)
16815 {
16816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16817 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16818 return ;
16819 }
16820
16821 chAvoidInd->avoidRangeCount =
16822 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16823 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16824 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16825 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16826
16827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16828 "%s : WDA CH avoid notification", __func__);
16829
16830 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16831 vosMsg.bodyptr = chAvoidInd;
16832 vosMsg.bodyval = 0;
16833 /* Send message to SME */
16834 if (VOS_STATUS_SUCCESS !=
16835 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16836 {
16837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16838 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16839 vos_mem_free(chAvoidInd);
16840 }
16841 break;
16842 }
16843#endif /* FEATURE_WLAN_CH_AVOID */
16844
Sunil Duttbd736ed2014-05-26 21:19:41 +053016845#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16846 case WDI_LL_STATS_RESULTS_IND:
16847 {
16848 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016849 tpAniSirGlobal pMac;
16850
16851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16852 "Received WDI_LL_STATS_RESULTS_IND from FW");
16853
16854 /*sanity check*/
16855 if (NULL == pWDA)
16856 {
16857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16858 "%s:pWDA is NULL", __func__);
16859 VOS_ASSERT(0);
16860 return;
16861 }
16862
16863 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016864 (void *)wdiLowLevelInd->
16865 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016866 if (NULL == pLinkLayerStatsInd)
16867 {
16868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16869 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16870 __func__);
16871 VOS_ASSERT(0);
16872 return;
16873 }
16874
16875 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16876 if (NULL == pMac)
16877 {
16878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16879 "%s:pMac is NULL", __func__);
16880 VOS_ASSERT(0);
16881 return;
16882 }
16883
Dino Mycled3d50022014-07-07 12:58:25 +053016884 /* call hdd callback with Link Layer Statistics.
16885 * vdev_id/ifacId in link_stats_results will be
16886 * used to retrieve the correct HDD context
16887 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016888 if (pMac->sme.pLinkLayerStatsIndCallback)
16889 {
Dino Mycled3d50022014-07-07 12:58:25 +053016890 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016891 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016892 pLinkLayerStatsInd,
16893 wdiLowLevelInd->
16894 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016895 }
16896 else
16897 {
16898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16899 "%s:HDD callback is null", __func__);
16900 }
16901 break;
16902 }
16903#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16904
Dino Mycle41bdc942014-06-10 11:30:24 +053016905#ifdef WLAN_FEATURE_EXTSCAN
16906 case WDI_EXTSCAN_PROGRESS_IND:
16907 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16908 case WDI_EXTSCAN_SCAN_RESULT_IND:
16909 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016910 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016911 {
16912 void *pEXTScanData;
16913 void *pCallbackContext;
16914 tpAniSirGlobal pMac;
16915 tANI_U16 indType;
16916
16917 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16918 "Received WDI_EXTSCAN Indications from FW");
16919 /*sanity check*/
16920 if (NULL == pWDA)
16921 {
16922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16923 "%s:pWDA is NULL", __func__);
16924 VOS_ASSERT(0);
16925 return;
16926 }
16927 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16928 {
16929 indType = WDA_EXTSCAN_PROGRESS_IND;
16930
16931 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16932 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16933 }
16934 if (wdiLowLevelInd->wdiIndicationType ==
16935 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16936 {
16937 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16938
16939 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16940 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16941 }
16942 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16943 {
16944 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16945
16946 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16947 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16948 }
16949 if (wdiLowLevelInd->wdiIndicationType ==
16950 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16951 {
16952 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16953
16954 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16955 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16956 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016957 if (wdiLowLevelInd->wdiIndicationType ==
16958 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16959 {
16960 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16961
16962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16963 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16964 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016965
16966 pEXTScanData =
16967 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16968 if (NULL == pEXTScanData)
16969 {
16970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16971 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16972 __func__);
16973 VOS_ASSERT(0);
16974 return;
16975 }
16976
16977 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16978 if (NULL == pMac)
16979 {
16980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16981 "%s:pMac is NULL", __func__);
16982 VOS_ASSERT(0);
16983 return;
16984 }
16985
16986 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16987
16988 if(pMac->sme.pEXTScanIndCb)
16989 {
16990 pMac->sme.pEXTScanIndCb(pCallbackContext,
16991 indType,
16992 pEXTScanData);
16993 }
16994 else
16995 {
16996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16997 "%s:HDD callback is null", __func__);
16998 }
16999 break;
17000 }
17001#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053017002 case WDI_DEL_BA_IND:
17003 {
17004 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053017005 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053017006
17007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17008 "Received WDI_DEL_BA_IND from WDI ");
17009 if(NULL == pDelBAInd)
17010 {
17011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17012 "%s: VOS MEM Alloc Failure", __func__);
17013 break;
17014 }
17015 vos_mem_copy(pDelBAInd->peerMacAddr,
17016 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
17017 sizeof(tSirMacAddr));
17018 vos_mem_copy(pDelBAInd->bssId,
17019 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
17020 sizeof(tSirMacAddr));
17021 pDelBAInd->staIdx =
17022 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
17023 pDelBAInd->baTID =
17024 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
17025 pDelBAInd->baDirection =
17026 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
17027 pDelBAInd->reasonCode =
17028 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
17029
17030 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
17031 (void *)pDelBAInd , 0) ;
17032 break;
17033 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053017034 case WDI_NAN_EVENT_IND:
17035 {
17036 vos_msg_t vosMsg;
17037 tpSirNanEvent pSirNanEvent = NULL;
17038
17039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17040 "Received WDI_NAN_EVENT");
17041
17042 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
17043 - sizeof( pSirNanEvent->event_data)
17044 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17045
17046 if (NULL == pSirNanEvent)
17047 {
17048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17049 "%s: VOS MEM Alloc Failure", __func__);
17050 VOS_ASSERT(0) ;
17051 break;
17052 }
17053
17054 pSirNanEvent->event_data_len =
17055 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
17056
17057 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
17058 {
17059 vos_mem_copy( pSirNanEvent->event_data,
17060 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
17061 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17062 }
17063
17064 /* VOS message wrapper */
17065 vosMsg.type = eWNI_SME_NAN_EVENT;
17066 vosMsg.bodyptr = pSirNanEvent;
17067 vosMsg.bodyval = 0;
17068
17069 /* Send message to SME */
17070 if (VOS_STATUS_SUCCESS
17071 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17072 {
17073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17074 "post eWNI_SME_NAN_EVENT to SME Failed");
17075 vos_mem_free(pSirNanEvent);
17076 }
17077 break;
17078 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017079 case WDI_LOST_LINK_PARAMS_IND:
17080 {
17081 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
17082 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053017083
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017084 if (NULL == pLostLinkParamInd)
17085 {
17086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17087 "%s: VOS MEM Alloc Failure", __func__);
17088 break;
17089 }
17090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17091 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
17092
17093 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
17094 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
17095 pLostLinkParamInd->info.bssIdx =
17096 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
17097 pLostLinkParamInd->info.rssi =
17098 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
17099 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
17100 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
17101 sizeof(tSirMacAddr));
17102 pLostLinkParamInd->info.linkFlCnt =
17103 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
17104 pLostLinkParamInd->info.linkFlTx =
17105 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
17106 pLostLinkParamInd->info.lastDataRate =
17107 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
17108 pLostLinkParamInd->info.rsvd1 =
17109 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
17110 pLostLinkParamInd->info.rsvd2 =
17111 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
17112 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
17113 (void *)pLostLinkParamInd , 0) ;
17114 break;
17115 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017116 case WDI_RSSI_BREACHED_IND:
17117 {
17118 WDI_RssiBreachedIndType *pRssiBreachedInd;
17119 tpAniSirGlobal pMac;
17120
17121 pRssiBreachedInd =
17122 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
17123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17124 "Received WDI_RSSI_BREACHED_IND from FW");
17125
17126 vos_mem_copy(pRssiBreachedInd,
17127 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
17128 sizeof(WDI_RssiBreachedIndType));
17129
17130 /*sanity check*/
17131 if (NULL == pWDA)
17132 {
17133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17134 "%s:pWDA is NULL", __func__);
17135 vos_mem_free(pRssiBreachedInd);
17136 VOS_ASSERT(0);
17137 return;
17138 }
17139
17140 if (NULL == pRssiBreachedInd)
17141 {
17142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17143 "%s:Breach indication from FW is null can't invoke HDD callback",
17144 __func__);
17145 VOS_ASSERT(0);
17146 return;
17147 }
17148
17149 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17150 if (NULL == pMac)
17151 {
17152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17153 "%s:pMac is NULL", __func__);
17154 VOS_ASSERT(0);
17155 vos_mem_free(pRssiBreachedInd);
17156 return;
17157 }
17158
17159 if (pMac->sme.rssiThresholdBreachedCb)
17160 {
17161 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
17162 }
17163 else
17164 {
17165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17166 "%s:HDD callback is null", __func__);
17167 }
17168 vos_mem_free(pRssiBreachedInd);
17169 break;
17170 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017171#ifdef FEATURE_OEM_DATA_SUPPORT
17172 case WDI_START_OEM_DATA_RSP_IND_NEW:
17173 {
17174 void *pCallbackContext;
17175 tpAniSirGlobal pMac;
17176 tANI_U16 indType;
17177 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017178 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017179
17180 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17181 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17182
17183 /*sanity check*/
17184 if (NULL == pWDA)
17185 {
17186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17187 "%s:pWDA is NULL", __func__);
17188 VOS_ASSERT(0);
17189 return;
17190 }
17191
17192 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17193 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017194 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17195 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017196 if (NULL == pOemRspNewIndData)
17197 {
17198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17199 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17200 __func__);
17201 VOS_ASSERT(0);
17202 return;
17203 }
17204
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017205 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17206 OemRspNewLen;
17207
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017208 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17209 if (NULL == pMac)
17210 {
17211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17212 "%s:pMac is NULL", __func__);
17213 VOS_ASSERT(0);
17214 return;
17215 }
17216
17217 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17218
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17220 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17221
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017222 if(pMac->sme.pOemDataIndCb)
17223 {
17224 pMac->sme.pOemDataIndCb(pCallbackContext,
17225 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017226 pOemRspNewIndData,
17227 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017228 }
17229 else
17230 {
17231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17232 "%s:HDD callback is null", __func__);
17233 }
17234 break;
17235 }
17236#endif /* FEATURE_OEM_DATA_SUPPORT */
17237
Jeff Johnson295189b2012-06-20 16:38:30 -070017238 default:
17239 {
17240 /* TODO error */
17241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17242 "Received UNKNOWN Indication from WDI ");
17243 }
17244 }
17245 return ;
17246}
17247
Jeff Johnson295189b2012-06-20 16:38:30 -070017248/*
17249 * BA related processing in WDA.
17250 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017251void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17252 void* pUserData)
17253{
17254 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17255 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017256 if(NULL == pWdaParams)
17257 {
17258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017259 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017260 VOS_ASSERT(0) ;
17261 return ;
17262 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017263 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017264 vos_mem_free(pWdaParams->wdaMsgParam) ;
17265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17266 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017268 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017269 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17270 {
17271 tANI_U8 i = 0 ;
17272 tBaActivityInd *baActivityInd = NULL ;
17273 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17274 tANI_U8 allocSize = sizeof(tBaActivityInd)
17275 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17276 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17277 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017278 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017279 if(NULL == baActivityInd)
17280 {
17281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017283 VOS_ASSERT(0) ;
17284 return;
17285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017286 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17287 sizeof(tSirMacAddr)) ;
17288 baActivityInd->baCandidateCnt = baCandidateCount ;
17289
17290 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17291 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17292
17293 for(i = 0 ; i < baCandidateCount ; i++)
17294 {
17295 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017296 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17297 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017298 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17299 {
17300 baCandidate->baInfo[tid].fBaEnable =
17301 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17302 baCandidate->baInfo[tid].startingSeqNum =
17303 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17304 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017305 wdiBaCandidate++ ;
17306 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017307 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017308 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17309 }
17310 else
17311 {
17312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17313 "BA Trigger RSP with Failure received ");
17314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017315 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017316}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017317
17318
17319/*
17320 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17321 * during MCC
17322 */
17323void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17324{
17325 wpt_uint32 enabled;
17326 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17327 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17328 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17329
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017330 if (NULL == pMac )
17331 {
17332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17333 "%s: Invoked with invalid MAC context ", __func__ );
17334 VOS_ASSERT(0);
17335 return;
17336 }
17337
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017338 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17339 != eSIR_SUCCESS)
17340 {
17341 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17342 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17343 return;
17344 }
17345
17346 if(!enabled)
17347 {
17348 return;
17349 }
17350
17351 if(NULL == pWDA)
17352 {
17353 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17354 "%s:WDA context is NULL", __func__);
17355 VOS_ASSERT(0);
17356 return;
17357 }
17358
17359 if(activate)
17360 {
17361 if( VOS_STATUS_SUCCESS !=
17362 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17363 {
17364 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17365 "Traffic Stats Timer Start Failed ");
17366 return;
17367 }
17368 WDI_DS_ActivateTrafficStats();
17369 }
17370 else
17371 {
17372 WDI_DS_DeactivateTrafficStats();
17373 WDI_DS_ClearTrafficStats();
17374
17375 if( VOS_STATUS_SUCCESS !=
17376 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17377 {
17378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17379 "Traffic Stats Timer Stop Failed ");
17380 return;
17381 }
17382 }
17383}
17384
17385/*
17386 * Traffic Stats Timer handler
17387 */
17388void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17389{
17390 WDI_Status wdiStatus;
17391 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17392 WDI_TrafficStatsIndType trafficStatsIndParams;
17393 wpt_uint32 length, enabled;
17394 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17395
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017396 if (NULL == pMac )
17397 {
17398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17399 "%s: Invoked with invalid MAC context ", __func__ );
17400 VOS_ASSERT(0);
17401 return;
17402 }
17403
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017404 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17405 != eSIR_SUCCESS)
17406 {
17407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17408 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17409 return;
17410 }
17411
17412 if(!enabled)
17413 {
17414 WDI_DS_DeactivateTrafficStats();
17415 return;
17416 }
17417
17418 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17419
17420 if(pWdiTrafficStats != NULL)
17421 {
17422 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17423 trafficStatsIndParams.length = length;
17424 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017425 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017426 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17427 trafficStatsIndParams.pUserData = pWDA;
17428
17429 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17430
17431 if(WDI_STATUS_PENDING == wdiStatus)
17432 {
17433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17434 "Pending received for %s:%d ",__func__,__LINE__ );
17435 }
17436 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17437 {
17438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17439 "Failure in %s:%d ",__func__,__LINE__ );
17440 }
17441
17442 WDI_DS_ClearTrafficStats();
17443 }
17444 else
17445 {
17446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17447 "pWdiTrafficStats is Null");
17448 }
17449
17450 if( VOS_STATUS_SUCCESS !=
17451 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17452 {
17453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17454 "Traffic Stats Timer Start Failed ");
17455 return;
17456 }
17457}
17458
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017459bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
17460{
17461 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
17462 return true;
17463 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
17464 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
17465 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
17466 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
17467 jiffies_to_msecs(jiffies)))
17468 {
17469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17470 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
17471 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
17472 return false;
17473 }
17474 return true;
17475}
17476
Jeff Johnson295189b2012-06-20 16:38:30 -070017477/*
17478 * BA Activity check timer handler
17479 */
17480void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17481{
17482 tANI_U8 curSta = 0 ;
17483 tANI_U8 tid = 0 ;
17484 tANI_U8 size = 0 ;
17485 tANI_U8 baCandidateCount = 0 ;
17486 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017487 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017488 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017489 tpAniSirGlobal pMac;
17490
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017491 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017492 {
17493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017494 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017495 VOS_ASSERT(0);
17496 return ;
17497 }
17498 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17499 {
17500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17501 "Inconsistent STA entries in WDA");
17502 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017503 }
17504 if(NULL == pWDA->pVosContext)
17505 {
17506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17507 "%s: pVosContext is NULL",__func__);
17508 VOS_ASSERT(0);
17509 return ;
17510 }
17511 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053017512 if(NULL == pMac)
17513 {
17514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17515 "%s: pMac is NULL",__func__);
17516 VOS_ASSERT(0);
17517 return ;
17518 }
17519
Abhishek Singh0644e482014-10-06 18:38:23 +053017520 if (wlan_cfgGetInt(pMac,
17521 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
17522 eSIR_SUCCESS)
17523 {
17524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17525 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
17526 val = 0;
17527 }
17528
Jeff Johnson295189b2012-06-20 16:38:30 -070017529 /* walk through all STA entries and find out TX packet count */
17530 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
17531 {
Abhishek Singh0644e482014-10-06 18:38:23 +053017532 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017533#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017534 // We can only do BA on "hard" STAs.
17535 if (!(IS_HWSTA_IDX(curSta)))
17536 {
17537 continue;
17538 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017539#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017540 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
17541 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017542 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017543 tANI_U32 txPktCount = 0 ;
17544 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017545 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017546 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
17547 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070017548 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
17549 curSta, tid, &txPktCount)))
17550 {
17551#if 0
17552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17553 "************* %d:%d, %d ",curSta, txPktCount,
17554 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
17555#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053017556 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
17557 (currentOperChan <= SIR_11B_CHANNEL_END)))
17558 {
17559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17560 "%s: BTC disabled aggregation - dont start "
17561 "TX ADDBA req",__func__);
17562 }
17563 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017564 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053017565 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053017566 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
17567 pWDA->wdaGlobalSystemRole) && txPktCount )
17568 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
17569 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070017570 {
17571 /* get prepare for sending message to HAL */
17572 //baCandidate[baCandidateCount].staIdx = curSta ;
17573 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
17574 newBaCandidate = WDA_ENABLE_BA ;
17575 }
17576 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
17577 }
17578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017579 /* fill the entry for all the sta with given TID's */
17580 if(WDA_ENABLE_BA == newBaCandidate)
17581 {
17582 /* move to next BA candidate */
17583 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
17584 size += sizeof(WDI_TriggerBAReqCandidateType) ;
17585 baCandidateCount++ ;
17586 newBaCandidate = WDA_DISABLE_BA ;
17587 }
17588 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017589 /* prepare and send message to hal */
17590 if( 0 < baCandidateCount)
17591 {
17592 WDI_Status status = WDI_STATUS_SUCCESS ;
17593 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
17594 tWDA_ReqParams *pWdaParams =
17595 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017596 if(NULL == pWdaParams)
17597 {
17598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017600 VOS_ASSERT(0) ;
17601 return;
17602 }
17603 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
17604 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
17605 if(NULL == wdiTriggerBaReq)
17606 {
17607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017609 VOS_ASSERT(0) ;
17610 vos_mem_free(pWdaParams);
17611 return;
17612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017613 do
17614 {
17615 WDI_TriggerBAReqinfoType *triggerBaInfo =
17616 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
17617 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
17618 /* TEMP_FIX: Need to see if WDI need check for assoc session for
17619 * for each request */
17620 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
17621 triggerBaInfo->ucBASessionID = 0;
17622 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
17623 } while(0) ;
17624 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
17625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017626 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017627 pWdaParams->pWdaContext = pWDA;
17628 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
17629 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053017630 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070017631 WDA_TriggerBaReqCallback, pWdaParams) ;
17632 if(IS_WDI_STATUS_FAILURE(status))
17633 {
17634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17635 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
17636 vos_mem_free(pWdaParams->wdaMsgParam) ;
17637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17638 vos_mem_free(pWdaParams) ;
17639 }
17640 }
17641 else
17642 {
17643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17644 "There is no TID for initiating BA");
17645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017646 if( VOS_STATUS_SUCCESS !=
17647 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17648 {
17649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17650 "BA Activity Timer Stop Failed ");
17651 return ;
17652 }
17653 if( VOS_STATUS_SUCCESS !=
17654 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17655 {
17656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17657 "BA Activity Timer Start Failed ");
17658 return;
17659 }
17660 return ;
17661}
Jeff Johnson295189b2012-06-20 16:38:30 -070017662/*
17663 * WDA common routine to create timer used by WDA.
17664 */
17665static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
17666{
Jeff Johnson295189b2012-06-20 16:38:30 -070017667 VOS_STATUS status = VOS_STATUS_SUCCESS ;
17668 tANI_U32 val = 0 ;
17669 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17670
17671 if(NULL == pMac)
17672 {
17673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017674 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017675 VOS_ASSERT(0);
17676 return VOS_STATUS_E_FAILURE;
17677 }
17678 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
17679 != eSIR_SUCCESS)
17680 {
17681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17682 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
17683 return VOS_STATUS_E_FAILURE;
17684 }
17685 val = SYS_MS_TO_TICKS(val) ;
17686
17687 /* BA activity check timer */
17688 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
17689 "BA Activity Check timer", WDA_TimerHandler,
17690 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
17691 if(status != TX_SUCCESS)
17692 {
17693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17694 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017695 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017696 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017697 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017698 /* Tx Complete Timeout timer */
17699 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
17700 "Tx Complete Check timer", WDA_TimerHandler,
17701 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017702 if(status != TX_SUCCESS)
17703 {
17704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17705 "Unable to create Tx Complete Timeout timer");
17706 /* Destroy timer of BA activity check timer */
17707 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17708 if(status != TX_SUCCESS)
17709 {
17710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17711 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017712 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017713 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017714 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017715 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017716
17717 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
17718
17719 /* Traffic Stats timer */
17720 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
17721 "Traffic Stats timer", WDA_TimerHandler,
17722 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
17723 if(status != TX_SUCCESS)
17724 {
17725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17726 "Unable to create traffic stats timer");
17727 /* Destroy timer of BA activity check timer */
17728 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17729 if(status != TX_SUCCESS)
17730 {
17731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17732 "Unable to Destroy BA activity timer");
17733 }
17734 /* Destroy timer of tx complete timer */
17735 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17736 if(status != TX_SUCCESS)
17737 {
17738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17739 "Unable to Tx complete timer");
17740 }
17741 return VOS_STATUS_E_FAILURE ;
17742 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017743 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017744}
Jeff Johnson295189b2012-06-20 16:38:30 -070017745/*
17746 * WDA common routine to destroy timer used by WDA.
17747 */
17748static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
17749{
17750 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017751 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17752 if(status != TX_SUCCESS)
17753 {
17754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17755 "Unable to Destroy Tx Complete Timeout timer");
17756 return eSIR_FAILURE ;
17757 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017758 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17759 if(status != TX_SUCCESS)
17760 {
17761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17762 "Unable to Destroy BA activity timer");
17763 return eSIR_FAILURE ;
17764 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017765 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
17766 if(status != TX_SUCCESS)
17767 {
17768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17769 "Unable to Destroy traffic stats timer");
17770 return eSIR_FAILURE ;
17771 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017772 return eSIR_SUCCESS ;
17773}
Jeff Johnson295189b2012-06-20 16:38:30 -070017774/*
17775 * WDA timer handler.
17776 */
17777void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
17778{
17779 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
17780 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017781 /*
17782 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
17783 */
17784 wdaMsg.type = timerInfo ;
17785 wdaMsg.bodyptr = NULL;
17786 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017787 /* post the message.. */
17788 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
17789 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
17790 {
17791 vosStatus = VOS_STATUS_E_BADMSG;
17792 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017793}
Jeff Johnson295189b2012-06-20 16:38:30 -070017794/*
17795 * WDA Tx Complete timeout Indication.
17796 */
17797void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17798{
17799 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017800 tpSirTxBdStatus txBdStatus = {0};
17801
Jeff Johnson295189b2012-06-20 16:38:30 -070017802 if( pWDA->pAckTxCbFunc )
17803 {
17804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017805 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017806 /*Indicate failure*/
17807 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017808 pWDA->pAckTxCbFunc = NULL;
17809 }
17810 else
17811 {
17812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017813 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017814 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017815}
Jeff Johnson295189b2012-06-20 16:38:30 -070017816/*
17817 * WDA Set REG Domain to VOS NV
17818 */
Abhishek Singha306a442013-11-07 18:39:01 +053017819eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17820 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017821{
Abhishek Singha306a442013-11-07 18:39:01 +053017822 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017823 {
17824 return eHAL_STATUS_INVALID_PARAMETER;
17825 }
17826 return eHAL_STATUS_SUCCESS;
17827}
Jeff Johnson295189b2012-06-20 16:38:30 -070017828
Jeff Johnson295189b2012-06-20 16:38:30 -070017829#ifdef FEATURE_WLAN_SCAN_PNO
17830/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017831 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017832 *
17833 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017834void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017835{
17836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017837 tSirPNOScanReq *pPNOScanReqParams;
17838
Jeff Johnson295189b2012-06-20 16:38:30 -070017839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017840 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017841 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017842 {
17843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017844 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017845 VOS_ASSERT(0) ;
17846 return ;
17847 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017848
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017849 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17850 if(pPNOScanReqParams->statusCallback)
17851 {
17852 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17853 (status == WDI_STATUS_SUCCESS) ?
17854 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17855 }
17856
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017857 if (pPNOScanReqParams->enable == 1)
17858 {
17859 if (pPNOScanReqParams->aNetworks)
17860 vos_mem_free(pPNOScanReqParams->aNetworks);
17861 if (pPNOScanReqParams->p24GProbeTemplate)
17862 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17863 if (pPNOScanReqParams->p5GProbeTemplate)
17864 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17865 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17867 vos_mem_free(pWdaParams->wdaMsgParam);
17868 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017869
17870 return ;
17871}
Jeff Johnson295189b2012-06-20 16:38:30 -070017872/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017873 * FUNCTION: WDA_PNOScanReqCallback
17874 * Free memory.
17875 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17876 */
17877void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017878{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017880 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017881
17882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17883 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17884
17885 if(NULL == pWdaParams)
17886 {
17887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17888 "%s: pWdaParams received NULL", __func__);
17889 VOS_ASSERT(0);
17890 return;
17891 }
17892
17893 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17894 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017895 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17896 if(pPNOScanReqParams->statusCallback)
17897 {
17898 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17899 VOS_STATUS_E_FAILURE);
17900 }
17901
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017902 if (pPNOScanReqParams->enable == 1)
17903 {
17904 if (pPNOScanReqParams->aNetworks)
17905 vos_mem_free(pPNOScanReqParams->aNetworks);
17906 if (pPNOScanReqParams->p24GProbeTemplate)
17907 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17908 if (pPNOScanReqParams->p5GProbeTemplate)
17909 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17910 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17912 vos_mem_free(pWdaParams->wdaMsgParam);
17913 vos_mem_free(pWdaParams);
17914 }
17915
17916 return;
17917}
17918/*
17919 * FUNCTION: WDA_UpdateScanParamsRespCallback
17920 *
17921 */
17922void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17923{
17924 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017926 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017927 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017928 {
17929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017930 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017931 VOS_ASSERT(0) ;
17932 return ;
17933 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017934
17935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17936 vos_mem_free(pWdaParams->wdaMsgParam);
17937 vos_mem_free(pWdaParams);
17938
Jeff Johnson295189b2012-06-20 16:38:30 -070017939 return ;
17940}
Jeff Johnson295189b2012-06-20 16:38:30 -070017941/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017942 * FUNCTION: WDA_UpdateScanParamsReqCallback
17943 * Free memory.
17944 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17945 */
17946void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17947{
17948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17949
17950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17951 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17952
17953 if(NULL == pWdaParams)
17954 {
17955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17956 "%s: pWdaParams received NULL", __func__);
17957 VOS_ASSERT(0);
17958 return;
17959 }
17960
17961 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17962 {
17963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17964 vos_mem_free(pWdaParams->wdaMsgParam);
17965 vos_mem_free(pWdaParams);
17966 }
17967
17968 return;
17969}
17970/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017971 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17972 * Request to WDI to set Preferred Network List.Offload
17973 */
17974VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17975 tSirPNOScanReq *pPNOScanReqParams)
17976{
Jeff Johnson43971f52012-07-17 12:26:56 -070017977 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017978 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17979 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17980 tWDA_ReqParams *pWdaParams ;
17981 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017983 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017984 if(NULL == pwdiPNOScanReqInfo)
17985 {
17986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017987 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017988 VOS_ASSERT(0);
17989 return VOS_STATUS_E_NOMEM;
17990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017991 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17992 if(NULL == pWdaParams)
17993 {
17994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017996 VOS_ASSERT(0);
17997 vos_mem_free(pwdiPNOScanReqInfo);
17998 return VOS_STATUS_E_NOMEM;
17999 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018000 //
18001 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
18002 //
18003 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
18004 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070018005 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
18006 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
18007 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018008 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
18009 {
18010 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
18011 &pPNOScanReqParams->aNetworks[i],
18012 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
18013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018014 /*Scan timer intervals*/
18015 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
18016 &pPNOScanReqParams->scanTimers,
18017 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070018018 /*Probe template for 2.4GHz band*/
18019 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
18020 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18021 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018022 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
18023 pPNOScanReqParams->p24GProbeTemplate,
18024 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070018025 /*Probe template for 5GHz band*/
18026 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
18027 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18028 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018029 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
18030 pPNOScanReqParams->p5GProbeTemplate,
18031 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018032 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
18033 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018034
Jeff Johnson295189b2012-06-20 16:38:30 -070018035 /* Store Params pass it to WDI */
18036 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
18037 pWdaParams->pWdaContext = pWDA;
18038 /* Store param pointer as passed in by caller */
18039 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018040 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018041 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018042 if(IS_WDI_STATUS_FAILURE(status))
18043 {
18044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18045 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018046 if(pPNOScanReqParams->statusCallback)
18047 {
18048 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18049 VOS_STATUS_E_FAILURE);
18050 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018051 if (pPNOScanReqParams->enable == 1)
18052 {
18053 if (pPNOScanReqParams->aNetworks)
18054 vos_mem_free(pPNOScanReqParams->aNetworks);
18055 if (pPNOScanReqParams->p24GProbeTemplate)
18056 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18057 if (pPNOScanReqParams->p5GProbeTemplate)
18058 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18059 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18061 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018062
Jeff Johnson295189b2012-06-20 16:38:30 -070018063 pWdaParams->wdaWdiApiMsgParam = NULL;
18064 pWdaParams->wdaMsgParam = NULL;
18065 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018066 return CONVERT_WDI2VOS_STATUS(status) ;
18067}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018068
18069#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18070
18071void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
18072{
18073 /*Convert the CSR Auth types to WDI Auth types */
18074 switch (csrAuthType)
18075 {
18076 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
18077 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18078 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018079#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018080 case eCSR_AUTH_TYPE_CCKM_WPA:
18081 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
18082 break;
18083#endif
18084 case eCSR_AUTH_TYPE_WPA:
18085 *AuthType = eWDA_AUTH_TYPE_WPA;
18086 break;
18087 case eCSR_AUTH_TYPE_WPA_PSK:
18088 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
18089 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018090#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018091 case eCSR_AUTH_TYPE_CCKM_RSN:
18092 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
18093 break;
18094#endif
18095 case eCSR_AUTH_TYPE_RSN:
18096 *AuthType = eWDA_AUTH_TYPE_RSN;
18097 break;
18098 case eCSR_AUTH_TYPE_RSN_PSK:
18099 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
18100 break;
18101#if defined WLAN_FEATURE_VOWIFI_11R
18102 case eCSR_AUTH_TYPE_FT_RSN:
18103 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
18104 break;
18105 case eCSR_AUTH_TYPE_FT_RSN_PSK:
18106 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
18107 break;
18108#endif
18109#ifdef FEATURE_WLAN_WAPI
18110 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
18111 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
18112 break;
18113 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
18114 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
18115 break;
18116#endif /* FEATURE_WLAN_WAPI */
18117 case eCSR_AUTH_TYPE_SHARED_KEY:
18118 case eCSR_AUTH_TYPE_AUTOSWITCH:
18119 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18120 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018121#ifdef WLAN_FEATURE_11W
18122 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
18123 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018124 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018125 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
18126 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
18127 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018128#endif
18129 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053018130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018131 "%s: Unknown Auth Type", __func__);
18132 break;
18133 }
18134}
18135void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
18136{
18137 switch (csrEncrType)
18138 {
18139 case eCSR_ENCRYPT_TYPE_NONE:
18140 *EncrType = WDI_ED_NONE;
18141 break;
18142 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
18143 case eCSR_ENCRYPT_TYPE_WEP40:
18144 *EncrType = WDI_ED_WEP40;
18145 break;
18146 case eCSR_ENCRYPT_TYPE_WEP104:
18147 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
18148 *EncrType = WDI_ED_WEP104;
18149 break;
18150 case eCSR_ENCRYPT_TYPE_TKIP:
18151 *EncrType = WDI_ED_TKIP;
18152 break;
18153 case eCSR_ENCRYPT_TYPE_AES:
18154 *EncrType = WDI_ED_CCMP;
18155 break;
18156#ifdef WLAN_FEATURE_11W
18157 case eCSR_ENCRYPT_TYPE_AES_CMAC:
18158 *EncrType = WDI_ED_AES_128_CMAC;
18159 break;
18160#endif
18161#ifdef FEATURE_WLAN_WAPI
18162 case eCSR_ENCRYPT_TYPE_WPI:
18163 *EncrType = WDI_ED_WPI;
18164 break;
18165#endif
18166 case eCSR_ENCRYPT_TYPE_ANY:
18167 *EncrType = WDI_ED_ANY;
18168 break;
18169
18170 default:
18171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18172 "%s: Unknown Encryption Type", __func__);
18173 break;
18174 }
18175}
18176
Kapil Gupta04ab1992016-06-26 13:36:51 +053018177#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18178VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
18179 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
18180{
18181 WDI_Status status;
18182 tWDA_ReqParams *pWdaParams ;
18183 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
18184
18185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18186 "------> %s " ,__func__);
18187
18188 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
18189 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
18190 if (NULL == pwdiPERRoamOffloadScanInfo) {
18191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18192 "%s: VOS MEM Alloc Failure", __func__);
18193 VOS_ASSERT(0);
18194 return VOS_STATUS_E_NOMEM;
18195 }
18196
18197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18198 if (NULL == pWdaParams) {
18199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18200 "%s: VOS MEM Alloc Failure", __func__);
18201 VOS_ASSERT(0);
18202 vos_mem_free(pwdiPERRoamOffloadScanInfo);
18203 return VOS_STATUS_E_NOMEM;
18204 }
18205
18206 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
18207 pPERRoamOffloadScanReqParams->rateUpThreshold;
18208 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
18209 pPERRoamOffloadScanReqParams->rateDownThreshold;
18210 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
18211 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
18212 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
18213 pPERRoamOffloadScanReqParams->PERtimerThreshold;
18214 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
18215 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053018216 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
18217 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053018218 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
18219 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
18220
18221 /* Store Params pass it to WDI */
18222 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
18223 pWdaParams->pWdaContext = pWDA;
18224
18225 /* Store param pointer as passed in by caller */
18226 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
18227 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
18228 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
18229 pWdaParams);
18230
18231 if(IS_WDI_STATUS_FAILURE(status)) {
18232 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18233 "Failure in Send config PER roam params");
18234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18235 vos_mem_free(pWdaParams->wdaMsgParam);
18236 vos_mem_free(pWdaParams);
18237 }
18238 return CONVERT_WDI2VOS_STATUS(status) ;
18239}
18240#endif
18241
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018242/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018243 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018244 * Request to WDI to set Roam Offload Scan
18245 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018246VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018247 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
18248{
18249 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018250 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18251 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018252 tWDA_ReqParams *pWdaParams ;
18253 v_U8_t csrAuthType;
18254 WDI_RoamNetworkType *pwdiRoamNetworkType;
18255 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18257 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018258 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018259 {
18260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18261 "%s: VOS MEM Alloc Failure", __func__);
18262 VOS_ASSERT(0);
18263 return VOS_STATUS_E_NOMEM;
18264 }
18265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18266 if (NULL == pWdaParams)
18267 {
18268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18269 "%s: VOS MEM Alloc Failure", __func__);
18270 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018271 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018272 return VOS_STATUS_E_NOMEM;
18273 }
18274
18275 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018276 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018277 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018278 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18279 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018280 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18281 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18282 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18283 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18284 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18285 sizeof(pwdiRoamNetworkType->currAPbssid));
18286 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18287 csrAuthType);
18288 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18289 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18290 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18291 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18292 pwdiRoamOffloadScanInfo->LookupThreshold =
18293 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018294 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18295 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018296 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18297 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018298 pwdiRoamOffloadScanInfo->MAWCEnabled =
18299 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018300 pwdiRoamOffloadScanInfo->Command =
18301 pRoamOffloadScanReqParams->Command ;
18302 pwdiRoamOffloadScanInfo->StartScanReason =
18303 pRoamOffloadScanReqParams->StartScanReason ;
18304 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18305 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18306 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18307 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18308 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18309 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18310 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18311 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18312 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18313 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018314 pwdiRoamOffloadScanInfo->IsESEEnabled =
18315 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018316 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18317 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18318 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18319 pwdiRoamNetworkType->ssId.ucLength =
18320 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18321 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18322 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18323 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18324 pwdiRoamNetworkType->ChannelCount =
18325 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18326 pwdiRoamOffloadScanInfo->ChannelCacheType =
18327 pRoamOffloadScanReqParams->ChannelCacheType;
18328 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18329 pRoamOffloadScanReqParams->ValidChannelList,
18330 pRoamOffloadScanReqParams->ValidChannelCount);
18331 pwdiRoamOffloadScanInfo->ValidChannelCount =
18332 pRoamOffloadScanReqParams->ValidChannelCount;
18333 pwdiRoamOffloadScanInfo->us24GProbeSize =
18334 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18335 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18336 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18337 pRoamOffloadScanReqParams->p24GProbeTemplate,
18338 pwdiRoamOffloadScanInfo->us24GProbeSize);
18339 pwdiRoamOffloadScanInfo->us5GProbeSize =
18340 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18341 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18342 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18343 pRoamOffloadScanReqParams->p5GProbeTemplate,
18344 pwdiRoamOffloadScanInfo->us5GProbeSize);
18345 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18346 pRoamOffloadScanReqParams->MDID.mdiePresent;
18347 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18348 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018349 pwdiRoamOffloadScanInfo->nProbes =
18350 pRoamOffloadScanReqParams->nProbes;
18351 pwdiRoamOffloadScanInfo->HomeAwayTime =
18352 pRoamOffloadScanReqParams->HomeAwayTime;
18353 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018354 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018355 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018356 pWdaParams->pWdaContext = pWDA;
18357 /* Store param pointer as passed in by caller */
18358 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018359 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018360 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18361 if(IS_WDI_STATUS_FAILURE(status))
18362 {
18363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18364 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18366 vos_mem_free(pWdaParams->wdaMsgParam);
18367 pWdaParams->wdaWdiApiMsgParam = NULL;
18368 pWdaParams->wdaMsgParam = NULL;
18369 }
18370 return CONVERT_WDI2VOS_STATUS(status) ;
18371}
18372#endif
18373
Jeff Johnson295189b2012-06-20 16:38:30 -070018374/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018375 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018376 *
18377 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018378void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018379{
18380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18381
18382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018384
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018385 if(NULL == pWdaParams)
18386 {
18387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018388 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018389 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018390 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018391 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018392
Jeff Johnson295189b2012-06-20 16:38:30 -070018393 vos_mem_free(pWdaParams->wdaMsgParam) ;
18394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18395 vos_mem_free(pWdaParams) ;
18396
18397 return ;
18398}
18399/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018400 * FUNCTION: WDA_RssiFilterReqCallback
18401 * Free memory.
18402 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18403 */
18404void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18405{
18406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18407
18408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18409 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18410
18411 if(NULL == pWdaParams)
18412 {
18413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18414 "%s: pWdaParams received NULL", __func__);
18415 VOS_ASSERT(0);
18416 return;
18417 }
18418
18419 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18420 {
18421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18422 vos_mem_free(pWdaParams->wdaMsgParam);
18423 vos_mem_free(pWdaParams);
18424 }
18425
18426 return;
18427}
18428/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018429 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018430 * Request to WDI to set Preferred Network List.Offload
18431 */
18432VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18433 tSirSetRSSIFilterReq* pRssiFilterParams)
18434{
Jeff Johnson43971f52012-07-17 12:26:56 -070018435 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018436 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18437 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18438 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018441 if(NULL == pwdiSetRssiFilterReqInfo)
18442 {
18443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018445 VOS_ASSERT(0);
18446 return VOS_STATUS_E_NOMEM;
18447 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18449 if(NULL == pWdaParams)
18450 {
18451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018453 VOS_ASSERT(0);
18454 vos_mem_free(pwdiSetRssiFilterReqInfo);
18455 return VOS_STATUS_E_NOMEM;
18456 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018457 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018458 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18459 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018460
Jeff Johnson295189b2012-06-20 16:38:30 -070018461 /* Store Params pass it to WDI */
18462 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18463 pWdaParams->pWdaContext = pWDA;
18464 /* Store param pointer as passed in by caller */
18465 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018466 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018467 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018468 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018469 if(IS_WDI_STATUS_FAILURE(status))
18470 {
18471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18472 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18474 vos_mem_free(pWdaParams->wdaMsgParam);
18475 pWdaParams->wdaWdiApiMsgParam = NULL;
18476 pWdaParams->wdaMsgParam = NULL;
18477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018478 return CONVERT_WDI2VOS_STATUS(status) ;
18479}
18480
Jeff Johnson295189b2012-06-20 16:38:30 -070018481/*
18482 * FUNCTION: WDA_ProcessUpdateScanParams
18483 * Request to WDI to update Scan Parameters
18484 */
18485VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18486 tSirUpdateScanParams *pUpdateScanParams)
18487{
Jeff Johnson43971f52012-07-17 12:26:56 -070018488 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018489 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18490 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18491 sizeof(WDI_UpdateScanParamsInfoType)) ;
18492 tWDA_ReqParams *pWdaParams ;
18493 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018496 if(NULL == wdiUpdateScanParamsInfoType)
18497 {
18498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018500 VOS_ASSERT(0);
18501 return VOS_STATUS_E_NOMEM;
18502 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18504 if ( NULL == pWdaParams )
18505 {
18506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018508 VOS_ASSERT(0);
18509 vos_mem_free(wdiUpdateScanParamsInfoType);
18510 return VOS_STATUS_E_NOMEM;
18511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018512 //
18513 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
18514 //
Jeff Johnson295189b2012-06-20 16:38:30 -070018515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18516 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
18517 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
18518 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080018519 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070018520 pUpdateScanParams->b11dEnabled,
18521 pUpdateScanParams->b11dResolved,
18522 pUpdateScanParams->ucChannelCount,
18523 pUpdateScanParams->usPassiveMinChTime,
18524 pUpdateScanParams->usPassiveMaxChTime,
18525 pUpdateScanParams->usActiveMinChTime,
18526 pUpdateScanParams->usActiveMaxChTime,
18527 sizeof(tSirUpdateScanParams),
18528 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
18529
Jeff Johnson295189b2012-06-20 16:38:30 -070018530 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
18531 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070018532 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
18533 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070018534 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
18535 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070018536 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
18537 pUpdateScanParams->usActiveMaxChTime;
18538 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
18539 pUpdateScanParams->usActiveMinChTime;
18540 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
18541 pUpdateScanParams->usPassiveMaxChTime;
18542 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
18543 pUpdateScanParams->usPassiveMinChTime;
18544
Jeff Johnson295189b2012-06-20 16:38:30 -070018545 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053018546 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
18547 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070018548
Jeff Johnson295189b2012-06-20 16:38:30 -070018549 for ( i = 0; i <
18550 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
18551 i++)
18552 {
18553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18554 "Update Scan Parameters channel: %d",
18555 pUpdateScanParams->aChannels[i]);
18556
18557 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
18558 pUpdateScanParams->aChannels[i];
18559 }
18560
Yue Ma7f44bbe2013-04-12 11:47:39 -070018561 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
18562 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018563
Jeff Johnson295189b2012-06-20 16:38:30 -070018564 /* Store Params pass it to WDI */
18565 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
18566 pWdaParams->pWdaContext = pWDA;
18567 /* Store param pointer as passed in by caller */
18568 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070018569
Jeff Johnson295189b2012-06-20 16:38:30 -070018570
18571
18572 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018573 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018574 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018575 if(IS_WDI_STATUS_FAILURE(status))
18576 {
18577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18578 "Failure in Update Scan Params EQ WDI API, free all the memory " );
18579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18580 vos_mem_free(pWdaParams->wdaMsgParam);
18581 vos_mem_free(pWdaParams);
18582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018583 return CONVERT_WDI2VOS_STATUS(status) ;
18584}
18585#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018586
18587#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18588/*
18589 * FUNCTION: WDA_RoamOffloadScanReqCallback
18590 *
18591 */
18592void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18593{
18594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018595 vos_msg_t vosMsg;
18596 wpt_uint8 reason = 0;
18597
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070018598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018599 "<------ %s " ,__func__);
18600 if (NULL == pWdaParams)
18601 {
18602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18603 "%s: pWdaParams received NULL", __func__);
18604 VOS_ASSERT(0) ;
18605 return ;
18606 }
18607 if ( pWdaParams != NULL )
18608 {
18609 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
18610 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018611 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18613 }
18614 if ( pWdaParams->wdaMsgParam != NULL)
18615 {
18616 vos_mem_free(pWdaParams->wdaMsgParam);
18617 }
18618
18619 vos_mem_free(pWdaParams) ;
18620 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018621 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18622 vosMsg.bodyptr = NULL;
18623 if (WDI_STATUS_SUCCESS != status)
18624 {
18625 reason = 0;
18626 }
18627 vosMsg.bodyval = reason;
18628 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18629 {
18630 /* free the mem and return */
18631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070018632 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018633 }
18634
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018635 return ;
18636}
Kapil Gupta04ab1992016-06-26 13:36:51 +053018637
18638void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
18639{
18640 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18641 vos_msg_t vosMsg;
18642 wpt_uint8 reason = 0;
18643
18644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18645 "<------ %s " ,__func__);
18646 if (NULL == pWdaParams) {
18647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18648 "%s: pWdaParams received NULL", __func__);
18649 VOS_ASSERT(0) ;
18650 return ;
18651 }
18652 if ( pWdaParams->wdaMsgParam != NULL)
18653 vos_mem_free(pWdaParams->wdaMsgParam);
18654
18655 vos_mem_free(pWdaParams) ;
18656 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
18657 vosMsg.bodyptr = NULL;
18658 if (WDI_STATUS_SUCCESS != status)
18659 reason = 0;
18660
18661 vosMsg.bodyval = reason;
18662 if (VOS_STATUS_SUCCESS !=
18663 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18664 /* free the mem and return */
18665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18666 "%s: Failed to post the rsp to UMAC", __func__);
18667 }
18668
18669 return ;
18670}
18671
18672
18673void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18674{
18675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18676 vos_msg_t vosMsg;
18677 wpt_uint8 reason = 0;
18678
18679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18680 "<------ %s " ,__func__);
18681 if (NULL == pWdaParams) {
18682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18683 "%s: pWdaParams received NULL", __func__);
18684 VOS_ASSERT(0) ;
18685 return ;
18686 }
18687 if ( pWdaParams->wdaMsgParam != NULL)
18688 vos_mem_free(pWdaParams->wdaMsgParam);
18689
18690 vos_mem_free(pWdaParams) ;
18691 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18692 vosMsg.bodyptr = NULL;
18693 if (WDI_STATUS_SUCCESS != status)
18694 reason = 0;
18695
18696 vosMsg.bodyval = reason;
18697 if (VOS_STATUS_SUCCESS !=
18698 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
18699 /* free the mem and return */
18700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18701 "%s: Failed to post the rsp to UMAC", __func__);
18702 }
18703
18704 return ;
18705}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018706#endif
18707
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018708/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018709 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018710 *
18711 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018712void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018713{
18714 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18715
18716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18717 "<------ %s " ,__func__);
18718
18719 if(NULL == pWdaParams)
18720 {
18721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18722 "%s: pWdaParams received NULL", __func__);
18723 VOS_ASSERT(0);
18724 return;
18725 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018726
18727 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18728 vos_mem_free(pWdaParams->wdaMsgParam);
18729 vos_mem_free(pWdaParams);
18730
18731 return;
18732}
18733/*
18734 * FUNCTION: WDA_SetPowerParamsReqCallback
18735 * Free memory.
18736 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
18737 */
18738void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18739{
18740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18741
18742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18743 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18744
18745 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018746 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070018747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18748 "%s: pWdaParams received NULL", __func__);
18749 VOS_ASSERT(0);
18750 return;
18751 }
18752
18753 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18754 {
18755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18756 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018757 vos_mem_free(pWdaParams);
18758 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018759
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018760 return;
18761}
18762
Jeff Johnson295189b2012-06-20 16:38:30 -070018763#ifdef WLAN_FEATURE_PACKET_FILTERING
18764/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018765 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018766 *
18767 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018768void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018769 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
18770 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018771{
18772 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018774 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018775 if(NULL == pWdaParams)
18776 {
18777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018778 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018779 VOS_ASSERT(0) ;
18780 return ;
18781 }
18782
18783 vos_mem_free(pWdaParams->wdaMsgParam) ;
18784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18785 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018786 //print a msg, nothing else to do
18787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018788 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018789 return ;
18790}
Jeff Johnson295189b2012-06-20 16:38:30 -070018791/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018792 * FUNCTION: WDA_8023MulticastListReqCallback
18793 * Free memory.
18794 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
18795 */
18796void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
18797{
18798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18799
18800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18801 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18802
18803 if(NULL == pWdaParams)
18804 {
18805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18806 "%s: pWdaParams received NULL", __func__);
18807 VOS_ASSERT(0);
18808 return;
18809 }
18810
18811 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18812 {
18813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18814 vos_mem_free(pWdaParams->wdaMsgParam);
18815 vos_mem_free(pWdaParams);
18816 }
18817
18818 return;
18819}
18820/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018821 * FUNCTION: WDA_Process8023MulticastListReq
18822 * Request to WDI to add 8023 Multicast List
18823 */
18824VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
18825 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
18826{
Jeff Johnson43971f52012-07-17 12:26:56 -070018827 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018828 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
18829 tWDA_ReqParams *pWdaParams ;
18830 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018832 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018833 pwdiFltPktSetMcListReqParamsType =
18834 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
18835 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
18836 ) ;
18837 if(NULL == pwdiFltPktSetMcListReqParamsType)
18838 {
18839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018841 return VOS_STATUS_E_NOMEM;
18842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018843 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18844 if(NULL == pWdaParams)
18845 {
18846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018848 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
18849 return VOS_STATUS_E_NOMEM;
18850 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018851
Jeff Johnson295189b2012-06-20 16:38:30 -070018852 //
18853 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
18854 //
18855 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070018856 pRcvFltMcAddrList->ulMulticastAddrCnt;
18857
18858 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
18859 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
18860 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
18861 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
18862
Jeff Johnson295189b2012-06-20 16:38:30 -070018863 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
18864 {
18865 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
18866 &(pRcvFltMcAddrList->multicastAddr[i]),
18867 sizeof(tSirMacAddr));
18868 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018869 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
18870 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018871
Jeff Johnson295189b2012-06-20 16:38:30 -070018872 /* Store Params pass it to WDI */
18873 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
18874 pWdaParams->pWdaContext = pWDA;
18875 /* Store param pointer as passed in by caller */
18876 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070018877 status = WDI_8023MulticastListReq(
18878 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018879 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018880 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018881 if(IS_WDI_STATUS_FAILURE(status))
18882 {
18883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18884 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
18885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18886 vos_mem_free(pWdaParams->wdaMsgParam);
18887 vos_mem_free(pWdaParams);
18888 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018889 return CONVERT_WDI2VOS_STATUS(status) ;
18890}
Jeff Johnson295189b2012-06-20 16:38:30 -070018891/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018892 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018893 *
18894 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018895void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018896 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
18897 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018898{
18899 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018901 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018902 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070018903 if(NULL == pWdaParams)
18904 {
18905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018906 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018907 VOS_ASSERT(0) ;
18908 return ;
18909 }
18910
18911 vos_mem_free(pWdaParams->wdaMsgParam) ;
18912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18913 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018914 //print a msg, nothing else to do
18915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018916 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018917 return ;
18918}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018919
18920/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018921 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
18922 * Free memory.
18923 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018924 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018925void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018926 void* pUserData)
18927{
18928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18929
18930 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18931 "<------ %s, wdiStatus: %d",
18932 __func__, wdiStatus);
18933
18934 if (NULL == pWdaParams)
18935 {
18936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18937 "%s: Invalid pWdaParams pointer", __func__);
18938 VOS_ASSERT(0);
18939 return;
18940 }
18941
18942 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18943 {
18944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18945 vos_mem_free(pWdaParams->wdaMsgParam);
18946 vos_mem_free(pWdaParams);
18947 }
18948
18949 return;
18950}
18951
Jeff Johnson295189b2012-06-20 16:38:30 -070018952/*
18953 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18954 * Request to WDI to set Receive Filters
18955 */
18956VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18957 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18958{
Jeff Johnson43971f52012-07-17 12:26:56 -070018959 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018960 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18961 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18962 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18963 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18964 tWDA_ReqParams *pWdaParams ;
18965 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018967 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018968 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18969 {
18970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018972 VOS_ASSERT(0);
18973 return VOS_STATUS_E_NOMEM;
18974 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18976 if(NULL == pWdaParams)
18977 {
18978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018980 VOS_ASSERT(0);
18981 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18982 return VOS_STATUS_E_NOMEM;
18983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018984 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18985 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18986 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18987 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018988 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18989 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18990
18991 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18992 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018993
18994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18995 "FID %d FT %d NParams %d CT %d",
18996 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18997 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18998 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18999 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070019000 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
19001 {
19002 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
19003 &pRcvPktFilterCfg->paramsData[i],
19004 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070019005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019006 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019007 pwdiSetRcvPktFilterReqParamsType->
19008 wdiPktFilterCfg.paramsData[i].protocolLayer,
19009 pwdiSetRcvPktFilterReqParamsType->
19010 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070019011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019012 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019013 pwdiSetRcvPktFilterReqParamsType->
19014 wdiPktFilterCfg.paramsData[i].dataOffset,
19015 pwdiSetRcvPktFilterReqParamsType->
19016 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070019017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019018 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019019 pwdiSetRcvPktFilterReqParamsType->
19020 wdiPktFilterCfg.paramsData[i].compareData[0],
19021 pwdiSetRcvPktFilterReqParamsType->
19022 wdiPktFilterCfg.paramsData[i].compareData[1],
19023 pwdiSetRcvPktFilterReqParamsType->
19024 wdiPktFilterCfg.paramsData[i].compareData[2],
19025 pwdiSetRcvPktFilterReqParamsType->
19026 wdiPktFilterCfg.paramsData[i].compareData[3],
19027 pwdiSetRcvPktFilterReqParamsType->
19028 wdiPktFilterCfg.paramsData[i].compareData[4],
19029 pwdiSetRcvPktFilterReqParamsType->
19030 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019032 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019033 pwdiSetRcvPktFilterReqParamsType->
19034 wdiPktFilterCfg.paramsData[i].dataMask[0],
19035 pwdiSetRcvPktFilterReqParamsType->
19036 wdiPktFilterCfg.paramsData[i].dataMask[1],
19037 pwdiSetRcvPktFilterReqParamsType->
19038 wdiPktFilterCfg.paramsData[i].dataMask[2],
19039 pwdiSetRcvPktFilterReqParamsType->
19040 wdiPktFilterCfg.paramsData[i].dataMask[3],
19041 pwdiSetRcvPktFilterReqParamsType->
19042 wdiPktFilterCfg.paramsData[i].dataMask[4],
19043 pwdiSetRcvPktFilterReqParamsType->
19044 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019045 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019046 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019047 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019048 /* Store Params pass it to WDI */
19049 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
19050 pWdaParams->pWdaContext = pWDA;
19051 /* Store param pointer as passed in by caller */
19052 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070019053 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019054 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019055 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019056 if(IS_WDI_STATUS_FAILURE(status))
19057 {
19058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19059 "Failure in SetFilter(),free all the memory,status %d ",status);
19060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19061 vos_mem_free(pWdaParams->wdaMsgParam);
19062 vos_mem_free(pWdaParams);
19063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019064 return CONVERT_WDI2VOS_STATUS(status) ;
19065}
Jeff Johnson295189b2012-06-20 16:38:30 -070019066/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019067 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019068 *
19069 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019070void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019071 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
19072 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019073{
19074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19075 tWDA_CbContext *pWDA;
19076 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
19077 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
19078 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
19079 tANI_U8 i;
19080 vos_msg_t vosMsg;
19081
19082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019083 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019084 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
19085
Jeff Johnsone7245742012-09-05 17:12:55 -070019086 if(NULL == pRcvFltPktMatchCntRsp)
19087 {
19088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019089 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070019090 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019091 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070019092 return ;
19093 }
19094
Jeff Johnson295189b2012-06-20 16:38:30 -070019095 if(NULL == pWdaParams)
19096 {
19097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019098 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019099 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019100 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070019101 return ;
19102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019103 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
19104 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019105 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
19106 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
19107
19108 /* Message Header */
19109 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19110 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
19111
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019112 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070019113
19114 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
19115 {
19116 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
19117 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
19118 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019119 /* VOS message wrapper */
19120 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19121 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
19122 vosMsg.bodyval = 0;
19123 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19124 {
19125 /* free the mem and return */
19126 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
19127 }
19128
19129 vos_mem_free(pWdaParams->wdaMsgParam) ;
19130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19131 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019132
19133 return;
19134}
19135/*
19136 * FUNCTION: WDA_FilterMatchCountReqCallback
19137 * Free memory and send RSP back to SME.
19138 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
19139 */
19140void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
19141{
19142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19143 vos_msg_t vosMsg;
19144
19145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19146 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19147
19148 if(NULL == pWdaParams)
19149 {
19150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19151 "%s: pWdaParams received NULL", __func__);
19152 VOS_ASSERT(0);
19153 return;
19154 }
19155
19156 /* VOS message wrapper */
19157 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19158 vosMsg.bodyptr = NULL;
19159 vosMsg.bodyval = 0;
19160
19161 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19162 {
19163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19164 vos_mem_free(pWdaParams->wdaMsgParam);
19165 vos_mem_free(pWdaParams);
19166 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
19167 }
19168
19169 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019170}
Jeff Johnson295189b2012-06-20 16:38:30 -070019171/*
19172 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
19173 * Request to WDI to get PC Filter Match Count
19174 */
19175VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
19176{
Jeff Johnson43971f52012-07-17 12:26:56 -070019177 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019178 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
19179 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
19180 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019182 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019183 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
19184 {
19185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019187 VOS_ASSERT(0);
19188 return VOS_STATUS_E_NOMEM;
19189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19191 if(NULL == pWdaParams)
19192 {
19193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019195 VOS_ASSERT(0);
19196 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
19197 return VOS_STATUS_E_NOMEM;
19198 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019199
Yue Ma7f44bbe2013-04-12 11:47:39 -070019200 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
19201 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019202
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019203 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
19204 pRcvFltPktMatchRsp->bssId,
19205 sizeof(wpt_macAddr));
19206
Jeff Johnson295189b2012-06-20 16:38:30 -070019207 /* Store Params pass it to WDI */
19208 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
19209 pWdaParams->pWdaContext = pWDA;
19210 /* Store param pointer as passed in by caller */
19211 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070019212 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019213 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019214 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019215 if(IS_WDI_STATUS_FAILURE(status))
19216 {
19217 /* failure returned by WDI API */
19218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19219 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
19220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19221 vos_mem_free(pWdaParams) ;
19222 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
19223 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
19224 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019225 return CONVERT_WDI2VOS_STATUS(status) ;
19226}
Jeff Johnson295189b2012-06-20 16:38:30 -070019227/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019228 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019229 *
19230 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019231void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019232 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
19233 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019234{
19235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019236 tSirRcvFltPktClearParam *pktClearParam;
19237
Jeff Johnson295189b2012-06-20 16:38:30 -070019238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019239 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019240/* WDA_VOS_ASSERT(NULL != pWdaParams); */
19241 if(NULL == pWdaParams)
19242 {
19243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019244 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019245 VOS_ASSERT(0) ;
19246 return ;
19247 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019248
19249 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
19250 if(pktClearParam->pktFilterCallback)
19251 {
19252 pktClearParam->pktFilterCallback(
19253 pktClearParam->cbCtx,
19254 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
19255 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019256 vos_mem_free(pWdaParams->wdaMsgParam) ;
19257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19258 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019259 //print a msg, nothing else to do
19260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019261 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019262 return ;
19263}
Jeff Johnson295189b2012-06-20 16:38:30 -070019264/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019265 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
19266 * Free memory.
19267 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
19268 */
19269void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19270{
19271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019272 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019273
19274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19275 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19276
19277 if(NULL == pWdaParams)
19278 {
19279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19280 "%s: Invalid pWdaParams pointer", __func__);
19281 VOS_ASSERT(0);
19282 return;
19283 }
19284
19285 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19286 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019287 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
19288 if(pktClearParam->pktFilterCallback)
19289 {
19290 pktClearParam->pktFilterCallback(
19291 pktClearParam->cbCtx,
19292 CONVERT_WDI2SIR_STATUS(wdiStatus));
19293 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19295 vos_mem_free(pWdaParams->wdaMsgParam);
19296 vos_mem_free(pWdaParams);
19297 }
19298
19299 return;
19300}
19301/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019302 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
19303 * Request to WDI to clear Receive Filters
19304 */
19305VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
19306 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
19307{
Jeff Johnson43971f52012-07-17 12:26:56 -070019308 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019309 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
19310 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
19311 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019313 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019314 if(NULL == pwdiRcvFltPktClearReqParamsType)
19315 {
19316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019318 VOS_ASSERT(0);
19319 return VOS_STATUS_E_NOMEM;
19320 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019321 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19322 if(NULL == pWdaParams)
19323 {
19324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019326 VOS_ASSERT(0);
19327 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
19328 return VOS_STATUS_E_NOMEM;
19329 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019330 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
19331 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070019332 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
19333 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
19334 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
19335 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019336
Yue Ma7f44bbe2013-04-12 11:47:39 -070019337 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019338 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019339 /* Store Params pass it to WDI */
19340 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19341 pWdaParams->pWdaContext = pWDA;
19342 /* Store param pointer as passed in by caller */
19343 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019344 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019345 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019346 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019347 if(IS_WDI_STATUS_FAILURE(status))
19348 {
19349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19350 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019351 if(pRcvFltPktClearParam->pktFilterCallback)
19352 {
19353 pRcvFltPktClearParam->pktFilterCallback(
19354 pRcvFltPktClearParam->cbCtx,
19355 CONVERT_WDI2SIR_STATUS(status));
19356 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019358 vos_mem_free(pWdaParams->wdaMsgParam);
19359 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019360 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019361 return CONVERT_WDI2VOS_STATUS(status) ;
19362}
19363#endif // WLAN_FEATURE_PACKET_FILTERING
19364
Jeff Johnson295189b2012-06-20 16:38:30 -070019365/*
19366 * FUNCTION: WDA_ProcessSetPowerParamsReq
19367 * Request to WDI to set power params
19368 */
19369VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19370 tSirSetPowerParamsReq *pPowerParams)
19371{
Jeff Johnson43971f52012-07-17 12:26:56 -070019372 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019373 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19374 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019375 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019378 if(NULL == pwdiSetPowerParamsReqInfo)
19379 {
19380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019382 VOS_ASSERT(0);
19383 return VOS_STATUS_E_NOMEM;
19384 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19386 if(NULL == pWdaParams)
19387 {
19388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019390 VOS_ASSERT(0);
19391 vos_mem_free(pwdiSetPowerParamsReqInfo);
19392 return VOS_STATUS_E_NOMEM;
19393 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019394
Jeff Johnson295189b2012-06-20 16:38:30 -070019395
19396 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19397 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019398 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19399 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019400 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19401 pPowerParams->uListenInterval;
19402 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19403 pPowerParams->uBcastMcastFilter;
19404 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19405 pPowerParams->uEnableBET;
19406 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19407 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019408 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19409 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019410 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19411 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019412
Jeff Johnson295189b2012-06-20 16:38:30 -070019413 /* Store Params pass it to WDI */
19414 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19415 pWdaParams->pWdaContext = pWDA;
19416 /* Store param pointer as passed in by caller */
19417 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019418 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019419 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019420 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019421 if(IS_WDI_STATUS_FAILURE(status))
19422 {
19423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19424 "Failure in Set power params REQ WDI API, free all the memory " );
19425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19426 vos_mem_free(pWdaParams->wdaMsgParam);
19427 pWdaParams->wdaWdiApiMsgParam = NULL;
19428 pWdaParams->wdaMsgParam = NULL;
19429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019430 return CONVERT_WDI2VOS_STATUS(status) ;
19431}
19432
19433/*
19434 * FUNCTION: WDA_SetTmLevelRspCallback
19435 * Set TM Level response
19436 */
19437void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19438{
19439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19440
19441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019442 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019443
19444 if(NULL == pWdaParams)
19445 {
19446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019447 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019448 VOS_ASSERT(0) ;
19449 return ;
19450 }
19451
19452 /* Dose not need to send notification to upper layer
19453 * Just free allocated resources */
19454 if( pWdaParams != NULL )
19455 {
19456 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19457 {
19458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19459 }
19460 vos_mem_free(pWdaParams->wdaMsgParam) ;
19461 vos_mem_free(pWdaParams) ;
19462 }
19463}
19464
19465/*
19466 * FUNCTION: WDA_ProcessSetTmLevelReq
19467 * Set TM Level request
19468 */
19469VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19470 tAniSetTmLevelReq *setTmLevelReq)
19471{
19472 WDI_Status status = WDI_STATUS_SUCCESS ;
19473 tWDA_ReqParams *pWdaParams ;
19474 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19475 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19476 sizeof(WDI_SetTmLevelReqType)) ;
19477 if(NULL == wdiSetTmLevelReq)
19478 {
19479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019481 VOS_ASSERT(0);
19482 return VOS_STATUS_E_NOMEM;
19483 }
19484
19485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19486 if(NULL == pWdaParams)
19487 {
19488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019490 VOS_ASSERT(0);
19491 vos_mem_free(wdiSetTmLevelReq);
19492 return VOS_STATUS_E_NOMEM;
19493 }
19494
19495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019497
19498 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19499 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19500
19501 pWdaParams->pWdaContext = pWDA;
19502 pWdaParams->wdaMsgParam = setTmLevelReq;
19503 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19504
19505 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19506 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19507
19508 if(IS_WDI_STATUS_FAILURE(status))
19509 {
19510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019511 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019512 vos_mem_free(pWdaParams->wdaMsgParam) ;
19513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19514 vos_mem_free(pWdaParams) ;
19515 }
19516
19517 return CONVERT_WDI2VOS_STATUS(status) ;
19518}
19519
19520VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19521 tpTxControlParams pTxCtrlParam)
19522{
19523 VOS_STATUS wdaStatus;
19524
19525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019527 if( pTxCtrlParam == NULL )
19528 {
19529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019530 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019531 return VOS_STATUS_E_FAILURE;
19532 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019533 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
19534 {
19535 wdaStatus = WDA_SuspendDataTx(pWDA);
19536 }
19537 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
19538 {
19539 wdaStatus = WDA_ResumeDataTx(pWDA);
19540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019541 return wdaStatus;
19542}
19543
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019544void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053019545{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019546 WDI_Status status;
19547 status = WDI_FWLoggingDXEdoneInd(logType);
19548
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053019549 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019550 {
19551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19552 FL("Failure status %d"), status);
19553 }
Mihir Shete5affadc2015-05-29 20:54:57 +053019554}
19555
Jeff Johnson295189b2012-06-20 16:38:30 -070019556 /* FUNCTION WDA_featureCapsExchange
19557 * WDA API to invoke capability exchange between host and FW.
19558 */
19559void WDA_featureCapsExchange(v_PVOID_t pVosContext)
19560{
19561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019562 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019563 WDI_featureCapsExchangeReq( NULL, pVosContext);
19564}
19565
Yathish9f22e662012-12-10 14:21:35 -080019566/* FUNCTION WDA_disableCapablityFeature
19567 * WDA API to diable Active mode offload in host.
19568 */
19569void WDA_disableCapablityFeature(tANI_U8 feature_index)
19570{
19571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19572 "%s:enter", __func__ );
19573 WDI_disableCapablityFeature(feature_index);
19574}
19575
Jeff Johnson295189b2012-06-20 16:38:30 -070019576 /* FUNCTION WDA_getHostWlanFeatCaps
19577 * Wrapper for WDI API, that will return if the feature (enum value).passed
19578 * to this API is supported or not in Host
19579 * return value
19580 * 0 - implies feature is NOT Supported
19581 * any non zero value - implies feature is SUPPORTED
19582 */
19583tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
19584{
19585 return WDI_getHostWlanFeatCaps(featEnumValue);
19586}
19587
19588 /* FUNCTION WDA_getFwWlanFeatCaps
19589 * Wrapper for WDI API, that will return if the feature (enum value).passed
19590 * to this API is supported or not in FW
19591 * return value
19592 * 0 - implies feature is NOT Supported
19593 * any non zero value - implies feature is SUPPORTED
19594 */
19595tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
19596{
19597 return WDI_getFwWlanFeatCaps(featEnumValue);
19598}
19599
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053019600
Jeff Johnson295189b2012-06-20 16:38:30 -070019601/*
19602 * FUNCTION: WDA_shutdown
19603 * Shutdown WDA/WDI without handshaking with Riva.
19604 * Synchronous function.
19605 */
19606VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
19607{
19608 WDI_Status wdiStatus;
19609 //tANI_U8 eventIdx = 0;
19610 VOS_STATUS status = VOS_STATUS_SUCCESS;
19611 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070019612 if (NULL == pWDA)
19613 {
19614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019615 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019616 VOS_ASSERT(0);
19617 return VOS_STATUS_E_FAILURE;
19618 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019619 /* FTM mode stay START_STATE */
19620 if( (WDA_READY_STATE != pWDA->wdaState) &&
19621 (WDA_INIT_STATE != pWDA->wdaState) &&
19622 (WDA_START_STATE != pWDA->wdaState) )
19623 {
19624 VOS_ASSERT(0);
19625 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019626
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019627 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070019628 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019629 if(VOS_TRUE == pWDA->wdaTimersCreated)
19630 {
19631 wdaDestroyTimers(pWDA);
19632 pWDA->wdaTimersCreated = VOS_FALSE;
19633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019634 }
Leo Chang9d76f622013-08-23 16:34:52 -070019635 else
19636 {
19637 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019638 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019639
Jeff Johnson295189b2012-06-20 16:38:30 -070019640 /* call WDI shutdown */
19641 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070019642 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
19643 {
19644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19645 "error in WDA Stop" );
19646 status = VOS_STATUS_E_FAILURE;
19647 }
19648 /* WDI stop is synchrnous, shutdown is complete when it returns */
19649 pWDA->wdaState = WDA_STOP_STATE;
19650
Jeff Johnson295189b2012-06-20 16:38:30 -070019651 /* shutdown should perform the stop & close actions. */
19652 /* Destroy the event */
19653 status = vos_event_destroy(&pWDA->txFrameEvent);
19654 if(!VOS_IS_STATUS_SUCCESS(status))
19655 {
19656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019657 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019658 status = VOS_STATUS_E_FAILURE;
19659 }
19660 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
19661 if(!VOS_IS_STATUS_SUCCESS(status))
19662 {
19663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019664 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019665 status = VOS_STATUS_E_FAILURE;
19666 }
19667 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
19668 if(!VOS_IS_STATUS_SUCCESS(status))
19669 {
19670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019671 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019672 status = VOS_STATUS_E_FAILURE;
19673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019674 /* free WDA context */
19675 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
19676 if ( !VOS_IS_STATUS_SUCCESS(status) )
19677 {
19678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19679 "error in WDA close " );
19680 status = VOS_STATUS_E_FAILURE;
19681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019682 return status;
19683}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019684
Jeff Johnsone7245742012-09-05 17:12:55 -070019685/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019686 * FUNCTION: WDA_setNeedShutdown
19687 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070019688 */
19689
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019690void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070019691{
19692 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019693 if(pWDA == NULL)
19694 {
19695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19696 "Could not get the WDA Context pointer" );
19697 return;
19698 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019699 pWDA->needShutdown = TRUE;
19700}
19701/*
19702 * FUNCTION: WDA_needShutdown
19703 * WDA needs a shutdown
19704 */
19705
19706v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
19707{
19708 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019709 if(pWDA == NULL)
19710 {
19711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19712 "Could not get the WDA Context pointer" );
19713 return 0;
19714 }
19715 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070019716}
19717
Mohit Khanna4a70d262012-09-11 16:30:12 -070019718#ifdef WLAN_FEATURE_11AC
19719/*
19720 * FUNCTION: WDA_SetBeaconFilterReqCallback
19721 *
19722 */
19723void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
19724{
19725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019727 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019728 if(NULL == pWdaParams)
19729 {
19730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019731 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019732 VOS_ASSERT(0) ;
19733 return ;
19734 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019735
Mohit Khanna4a70d262012-09-11 16:30:12 -070019736 vos_mem_free(pWdaParams->wdaMsgParam) ;
19737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19738 vos_mem_free(pWdaParams) ;
19739 /*
19740 * No respone required for SetBeaconFilter req so just free the request
19741 * param here
19742 */
19743
19744 return ;
19745}
19746
19747VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
19748 tUpdateVHTOpMode *pData)
19749{
19750 WDI_Status status = WDI_STATUS_SUCCESS ;
19751 tWDA_ReqParams *pWdaParams ;
19752 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
19753 sizeof(WDI_UpdateVHTOpMode)) ;
19754 if(NULL == wdiTemp)
19755 {
19756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019757 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019758 VOS_ASSERT(0);
19759 return VOS_STATUS_E_NOMEM;
19760 }
19761 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19762 if(NULL == pWdaParams)
19763 {
19764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019765 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019766 VOS_ASSERT(0);
19767 vos_mem_free(wdiTemp);
19768 return VOS_STATUS_E_NOMEM;
19769 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053019770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19771 "------> %s Opmode = %d and staid = %d" ,
19772 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019773 wdiTemp->opMode = pData->opMode;
19774 wdiTemp->staId = pData->staId;
19775
19776 pWdaParams->pWdaContext = pWDA;
19777 /* Store Req pointer, as this will be used for response */
19778 pWdaParams->wdaMsgParam = (void *)pData;
19779 /* store Params pass it to WDI */
19780 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
19781
19782 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
19783
19784 if(IS_WDI_STATUS_FAILURE(status))
19785 {
19786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19787 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
19788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19789 vos_mem_free(pWdaParams->wdaMsgParam);
19790 vos_mem_free(pWdaParams);
19791 }
19792 return CONVERT_WDI2VOS_STATUS(status) ;
19793}
19794#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019795
19796/*==========================================================================
19797 FUNCTION WDA_TransportChannelDebug
19798
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070019799 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019800 Display Transport Channel debugging information
19801 User may request to display DXE channel snapshot
19802 Or if host driver detects any abnormal stcuk may display
19803
19804 PARAMETERS
schang6295e542013-03-12 15:31:23 -070019805 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080019806 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053019807 debugFlags : Enable stall detect features
19808 defined by WPAL_DeviceDebugFlags
19809 These features may effect
19810 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019811
19812 RETURN VALUE
19813 NONE
19814
19815===========================================================================*/
19816void WDA_TransportChannelDebug
19817(
schang6295e542013-03-12 15:31:23 -070019818 tpAniSirGlobal pMac,
19819 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053019820 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019821)
19822{
Mihir Shete40a55652014-03-02 14:14:47 +053019823 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019824 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070019825}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019826
19827/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053019828 FUNCTION WDA_TransportKickDxe
19829
19830 DESCRIPTION
19831 Request Kick Dxe when first hdd TX time out
19832 happens
19833
19834 PARAMETERS
19835 NONE
19836
19837 RETURN VALUE
19838 NONE
19839
19840===========================================================================*/
19841void WDA_TransportKickDxe()
19842{
19843 WDI_TransportKickDxe();
19844 return;
19845}
19846
19847
19848/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019849 FUNCTION WDA_SetEnableSSR
19850
19851 DESCRIPTION
19852 API to enable/disable SSR on WDI timeout
19853
19854 PARAMETERS
19855 enableSSR : enable/disable SSR
19856
19857 RETURN VALUE
19858 NONE
19859
19860===========================================================================*/
19861void WDA_SetEnableSSR(v_BOOL_t enableSSR)
19862{
19863 WDI_SetEnableSSR(enableSSR);
19864}
Leo Chang9056f462013-08-01 19:21:11 -070019865
Agrawal Ashish0552be02016-03-02 18:03:43 +053019866/**
19867 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
19868 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
19869 *
19870 * Return: void
19871 */
19872void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
19873{
19874 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
19875}
19876
Leo Chang9056f462013-08-01 19:21:11 -070019877#ifdef FEATURE_WLAN_LPHB
19878/*
19879 * FUNCTION: WDA_LPHBconfRspCallback
19880 *
19881 */
19882void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
19883{
19884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19885
19886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19887 "<------ %s " ,__func__);
19888 if (NULL == pWdaParams)
19889 {
19890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19891 "%s: pWdaParams received NULL", __func__);
19892 VOS_ASSERT(0) ;
19893 return ;
19894 }
19895
19896 /* Do not need to send notification to upper layer
19897 * Just free allocated resources */
19898 if (pWdaParams != NULL)
19899 {
19900 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19901 {
19902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19903 }
19904 vos_mem_free(pWdaParams->wdaMsgParam) ;
19905 vos_mem_free(pWdaParams) ;
19906 }
19907
19908 return;
19909}
19910
19911/*
19912 * FUNCTION: WDA_ProcessLPHBConfReq
19913 *
19914 */
19915VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
19916 tSirLPHBReq *pData)
19917{
19918 WDI_Status wdiStatus;
19919 tWDA_ReqParams *pWdaParams ;
19920
19921 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19922 "------> %s " , __func__);
19923
19924 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19925 if (NULL == pWdaParams)
19926 {
19927 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19928 "%s: VOS MEM Alloc Failure", __func__);
19929 VOS_ASSERT(0);
19930 vos_mem_free(pData);
19931 return VOS_STATUS_E_NOMEM;
19932 }
19933
19934 pWdaParams->pWdaContext = pWDA;
19935 pWdaParams->wdaMsgParam = (void *)pData;
19936 pWdaParams->wdaWdiApiMsgParam = NULL;
19937
19938 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
19939 if (WDI_STATUS_PENDING == wdiStatus)
19940 {
19941 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19942 "Pending received for %s:%d ", __func__, __LINE__);
19943 }
19944 else if (WDI_STATUS_SUCCESS != wdiStatus)
19945 {
19946 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19947 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
19948 vos_mem_free(pWdaParams->wdaMsgParam);
19949 vos_mem_free(pWdaParams);
19950 }
19951
19952 return CONVERT_WDI2VOS_STATUS(wdiStatus);
19953}
19954#endif /* FEATURE_WLAN_LPHB */
19955
c_hpothu92367912014-05-01 15:18:17 +053019956void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
19957 void* pUserData)
19958{
19959 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
19960
19961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19962 "<------ %s " ,__func__);
19963 if (NULL == pBcnMissRateInfo)
19964 {
19965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19966 "%s: pWdaParams received NULL", __func__);
19967 VOS_ASSERT(0) ;
19968 return ;
19969 }
19970 if (pBcnMissRateInfo->callback)
19971 {
19972 pBcnMissRateInfo->callback(status, bcnMissRate,
19973 pBcnMissRateInfo->data);
19974 }
19975 vos_mem_free(pUserData);
19976
19977 return;
19978}
19979
19980v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19981 tSirBcnMissRateReq *pData)
19982{
19983 WDI_Status wdiStatus;
19984 tSirBcnMissRateInfo *pBcnMissRateInfo;
19985
19986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19987 "------> %s " , __func__);
19988
19989 pBcnMissRateInfo =
19990 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19991 if (NULL == pBcnMissRateInfo)
19992 {
19993 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19994 "%s: VOS MEM Alloc Failure", __func__);
19995 VOS_ASSERT(0);
19996 vos_mem_free(pData);
19997 return;
19998 }
19999
20000 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
20001 pBcnMissRateInfo->data = pData->data;
20002
20003 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
20004 WDA_GetBcnMissRateCallback,
20005 pData->bssid);
20006 if (WDI_STATUS_PENDING == wdiStatus)
20007 {
20008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20009 "Pending received for %s:%d ", __func__, __LINE__);
20010 }
20011 else if (WDI_STATUS_SUCCESS != wdiStatus)
20012 {
20013 if (pBcnMissRateInfo->callback)
20014 {
20015 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
20016 -1, pBcnMissRateInfo->data);
20017 }
20018 }
20019 vos_mem_free(pData);
20020}
Dino Mycle41bdc942014-06-10 11:30:24 +053020021
20022#ifdef WLAN_FEATURE_EXTSCAN
20023
20024/*==========================================================================
20025 FUNCTION WDA_EXTScanStartRspCallback
20026
20027 DESCRIPTION
20028 API to send EXTScan Start Response to HDD
20029
20030 PARAMETERS
20031 pEventData: Response from FW
20032 pUserData:
20033===========================================================================*/
20034void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
20035{
20036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20037 tWDA_CbContext *pWDA = NULL;
20038 void *pCallbackContext;
20039 tpAniSirGlobal pMac;
20040
20041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20042 "%s:", __func__);
20043 if (NULL == pWdaParams)
20044 {
20045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20046 "%s: pWdaParams received NULL", __func__);
20047 VOS_ASSERT(0);
20048 return;
20049 }
20050
20051 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20052
20053 if (NULL == pWDA)
20054 {
20055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20056 "%s: pWDA received NULL", __func__);
20057 VOS_ASSERT(0);
20058 goto error;
20059 }
20060
20061 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20062 if (NULL == pMac)
20063 {
20064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20065 "%s:pMac is NULL", __func__);
20066 VOS_ASSERT(0);
20067 goto error;
20068 }
20069
20070 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20071
20072 if (pMac->sme.pEXTScanIndCb)
20073 {
20074 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
20075 pEventData);
20076 }
20077 else
20078 {
20079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20080 "%s:HDD callback is null", __func__);
20081 VOS_ASSERT(0);
20082 }
20083
20084error:
20085
20086 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20087 {
20088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20089 }
20090 if (pWdaParams->wdaMsgParam != NULL)
20091 {
20092 vos_mem_free(pWdaParams->wdaMsgParam);
20093 }
20094 vos_mem_free(pWdaParams) ;
20095
20096 return;
20097}
20098
20099/*==========================================================================
20100 FUNCTION WDA_EXTScanStopRspCallback
20101
20102 DESCRIPTION
20103 API to send EXTScan Stop Response to HDD
20104
20105 PARAMETERS
20106 pEventData: Response from FW
20107 pUserData:
20108===========================================================================*/
20109void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
20110{
20111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20112 tWDA_CbContext *pWDA = NULL;
20113 void *pCallbackContext;
20114 tpAniSirGlobal pMac;
20115
20116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20117 "%s:", __func__);
20118 if (NULL == pWdaParams)
20119 {
20120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20121 "%s: pWdaParams received NULL", __func__);
20122 VOS_ASSERT(0);
20123 return;
20124 }
20125
20126 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20127
20128 if (NULL == pWDA)
20129 {
20130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20131 "%s: pWDA received NULL", __func__);
20132 VOS_ASSERT(0);
20133 goto error;
20134 }
20135
20136 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20137 if (NULL == pMac)
20138 {
20139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20140 "%s:pMac is NULL", __func__);
20141 VOS_ASSERT(0);
20142 goto error;
20143 }
20144 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20145
20146 if (pMac->sme.pEXTScanIndCb)
20147 {
20148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20149 "%s:HDD call back function called", __func__);
20150 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
20151 pEventData);
20152 }
20153 else
20154 {
20155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20156 "%s:HDD callback is null", __func__);
20157 VOS_ASSERT(0);
20158 }
20159
20160error:
20161
20162 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20163 {
20164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20165 }
20166 if (pWdaParams->wdaMsgParam != NULL)
20167 {
20168 vos_mem_free(pWdaParams->wdaMsgParam);
20169 }
20170 vos_mem_free(pWdaParams) ;
20171
20172
20173 return;
20174}
20175
20176/*==========================================================================
20177 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
20178
20179 DESCRIPTION
20180 API to send EXTScan Get Cached Results Response to HDD
20181
20182 PARAMETERS
20183 pEventData: Response from FW
20184 pUserData:
20185===========================================================================*/
20186void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
20187{
20188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20189 tWDA_CbContext *pWDA = NULL;
20190 void *pCallbackContext;
20191 tpAniSirGlobal pMac;
20192
20193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20194 "%s: ", __func__);
20195 if (NULL == pWdaParams)
20196 {
20197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20198 "%s: pWdaParams received NULL", __func__);
20199 VOS_ASSERT(0);
20200 return;
20201 }
20202
20203 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20204
20205 if (NULL == pWDA)
20206 {
20207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20208 "%s: pWDA received NULL", __func__);
20209 VOS_ASSERT(0);
20210 goto error;
20211 }
20212
20213 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20214 if (NULL == pMac)
20215 {
20216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20217 "%s:pMac is NULL", __func__);
20218 VOS_ASSERT(0);
20219 goto error;
20220 }
20221
20222 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20223
20224 if (pMac->sme.pEXTScanIndCb)
20225 {
20226 pMac->sme.pEXTScanIndCb(pCallbackContext,
20227 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
20228 pEventData);
20229 }
20230 else
20231 {
20232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20233 "%s:HDD callback is null", __func__);
20234 VOS_ASSERT(0);
20235 }
20236
20237
20238error:
20239
20240 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20241 {
20242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20243 }
20244 if (pWdaParams->wdaMsgParam != NULL)
20245 {
20246 vos_mem_free(pWdaParams->wdaMsgParam);
20247 }
20248 vos_mem_free(pWdaParams) ;
20249
20250 return;
20251}
20252
20253/*==========================================================================
20254 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
20255
20256 DESCRIPTION
20257 API to send EXTScan Get Capabilities Response to HDD
20258
20259 PARAMETERS
20260 pEventData: Response from FW
20261 pUserData:
20262===========================================================================*/
20263void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
20264{
20265 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20266 tWDA_CbContext *pWDA = NULL;
20267 void *pCallbackContext;
20268 tpAniSirGlobal pMac;
20269
20270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20271 "%s:", __func__);
20272 if (NULL == pWdaParams)
20273 {
20274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20275 "%s: pWdaParams received NULL", __func__);
20276 VOS_ASSERT(0);
20277 return;
20278 }
20279
20280 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20281
20282 if (NULL == pWDA)
20283 {
20284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20285 "%s: pWDA received NULL", __func__);
20286 VOS_ASSERT(0);
20287 goto error;
20288 }
20289
20290 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20291 if (NULL == pMac)
20292 {
20293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20294 "%s:pMac is NULL", __func__);
20295 VOS_ASSERT(0);
20296 goto error;
20297 }
20298
20299 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20300
20301 if (pMac->sme.pEXTScanIndCb)
20302 {
20303 pMac->sme.pEXTScanIndCb(pCallbackContext,
20304 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
20305 pEventData);
20306 }
20307 else
20308 {
20309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20310 "%s:HDD callback is null", __func__);
20311 VOS_ASSERT(0);
20312 }
20313
20314
20315error:
20316
20317 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20318 {
20319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20320 }
20321 if (pWdaParams->wdaMsgParam != NULL)
20322 {
20323 vos_mem_free(pWdaParams->wdaMsgParam);
20324 }
20325 vos_mem_free(pWdaParams) ;
20326
20327 return;
20328}
20329
20330/*==========================================================================
20331 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
20332
20333 DESCRIPTION
20334 API to send EXTScan Set BSSID Hotlist Response to HDD
20335
20336 PARAMETERS
20337 pEventData: Response from FW
20338 pUserData:
20339===========================================================================*/
20340void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20341{
20342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20343 tWDA_CbContext *pWDA = NULL;
20344 void *pCallbackContext;
20345 tpAniSirGlobal pMac;
20346
20347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20348 "%s: ", __func__);
20349 if (NULL == pWdaParams)
20350 {
20351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20352 "%s: pWdaParams received NULL", __func__);
20353 VOS_ASSERT(0) ;
20354 return;
20355 }
20356
20357 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20358
20359 if (NULL == pWDA)
20360 {
20361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20362 "%s: pWDA received NULL", __func__);
20363 VOS_ASSERT(0);
20364 goto error;
20365 }
20366
20367 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20368 if (NULL == pMac)
20369 {
20370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20371 "%s:pMac is NULL", __func__);
20372 VOS_ASSERT(0);
20373 goto error;
20374 }
20375
20376 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20377
20378 if (pMac->sme.pEXTScanIndCb)
20379 {
20380 pMac->sme.pEXTScanIndCb(pCallbackContext,
20381 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20382 pEventData);
20383 }
20384 else
20385 {
20386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20387 "%s:HDD callback is null", __func__);
20388 VOS_ASSERT(0);
20389 }
20390
20391
20392error:
20393
20394 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20395 {
20396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20397 }
20398 if (pWdaParams->wdaMsgParam != NULL)
20399 {
20400 vos_mem_free(pWdaParams->wdaMsgParam);
20401 }
20402 vos_mem_free(pWdaParams) ;
20403
20404 return;
20405}
20406
20407/*==========================================================================
20408 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20409
20410 DESCRIPTION
20411 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20412
20413 PARAMETERS
20414 pEventData: Response from FW
20415 pUserData:
20416===========================================================================*/
20417void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20418{
20419 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20420 tWDA_CbContext *pWDA = NULL;
20421 void *pCallbackContext;
20422 tpAniSirGlobal pMac;
20423
20424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20425 "%s:", __func__);
20426 if (NULL == pWdaParams)
20427 {
20428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20429 "%s: pWdaParams received NULL", __func__);
20430 VOS_ASSERT(0) ;
20431 return;
20432 }
20433
20434 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20435
20436 if (NULL == pWDA)
20437 {
20438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20439 "%s: pWDA received NULL", __func__);
20440 VOS_ASSERT(0);
20441 goto error;
20442 }
20443
20444 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20445 if (NULL == pMac)
20446 {
20447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20448 "%s:pMac is NULL", __func__);
20449 VOS_ASSERT(0);
20450 goto error;
20451 }
20452
20453 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20454
20455 if (pMac->sme.pEXTScanIndCb)
20456 {
20457 pMac->sme.pEXTScanIndCb(pCallbackContext,
20458 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20459 pEventData);
20460 }
20461 else
20462 {
20463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20464 "%s:HDD callback is null", __func__);
20465 VOS_ASSERT(0);
20466 }
20467
20468
20469error:
20470
20471 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20472 {
20473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20474 }
20475 if (pWdaParams->wdaMsgParam != NULL)
20476 {
20477 vos_mem_free(pWdaParams->wdaMsgParam);
20478 }
20479 vos_mem_free(pWdaParams) ;
20480
20481 return;
20482}
20483
20484/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020485 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20486
20487 DESCRIPTION
20488 API to send EXTScan Set SSID Hotlist Response to HDD
20489
20490 PARAMETERS
20491 pEventData: Response from FW
20492 pUserData:
20493===========================================================================*/
20494void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20495{
20496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20497 tWDA_CbContext *pWDA = NULL;
20498 void *pCallbackContext;
20499 tpAniSirGlobal pMac;
20500
20501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20502 "%s: ", __func__);
20503 if (NULL == pWdaParams)
20504 {
20505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20506 "%s: pWdaParams received NULL", __func__);
20507 VOS_ASSERT(0) ;
20508 return;
20509 }
20510
20511 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20512
20513 if (NULL == pWDA)
20514 {
20515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20516 "%s: pWDA received NULL", __func__);
20517 VOS_ASSERT(0);
20518 goto error;
20519 }
20520
20521 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20522 if (NULL == pMac)
20523 {
20524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20525 "%s:pMac is NULL", __func__);
20526 VOS_ASSERT(0);
20527 goto error;
20528 }
20529
20530 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20531
20532 if (pMac->sme.pEXTScanIndCb)
20533 {
20534 pMac->sme.pEXTScanIndCb(pCallbackContext,
20535 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
20536 pEventData);
20537 }
20538 else
20539 {
20540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20541 "%s:HDD callback is null", __func__);
20542 VOS_ASSERT(0);
20543 }
20544
20545
20546error:
20547
20548 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20549 {
20550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20551 }
20552 if (pWdaParams->wdaMsgParam != NULL)
20553 {
20554 vos_mem_free(pWdaParams->wdaMsgParam);
20555 }
20556 vos_mem_free(pWdaParams) ;
20557
20558 return;
20559}
20560
20561/*==========================================================================
20562 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
20563
20564 DESCRIPTION
20565 API to send EXTScan ReSet SSID Hotlist Response to HDD
20566
20567 PARAMETERS
20568 pEventData: Response from FW
20569 pUserData:
20570===========================================================================*/
20571void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20572{
20573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20574 tWDA_CbContext *pWDA = NULL;
20575 void *pCallbackContext;
20576 tpAniSirGlobal pMac;
20577
20578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20579 "%s:", __func__);
20580 if (NULL == pWdaParams)
20581 {
20582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20583 "%s: pWdaParams received NULL", __func__);
20584 VOS_ASSERT(0) ;
20585 return;
20586 }
20587
20588 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20589
20590 if (NULL == pWDA)
20591 {
20592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20593 "%s: pWDA received NULL", __func__);
20594 VOS_ASSERT(0);
20595 goto error;
20596 }
20597
20598 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20599 if (NULL == pMac)
20600 {
20601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20602 "%s:pMac is NULL", __func__);
20603 VOS_ASSERT(0);
20604 goto error;
20605 }
20606
20607 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20608
20609 if (pMac->sme.pEXTScanIndCb)
20610 {
20611 pMac->sme.pEXTScanIndCb(pCallbackContext,
20612 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
20613 pEventData);
20614 }
20615 else
20616 {
20617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20618 "%s:HDD callback is null", __func__);
20619 VOS_ASSERT(0);
20620 }
20621
20622
20623error:
20624
20625 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20626 {
20627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20628 }
20629 if (pWdaParams->wdaMsgParam != NULL)
20630 {
20631 vos_mem_free(pWdaParams->wdaMsgParam);
20632 }
20633 vos_mem_free(pWdaParams) ;
20634
20635 return;
20636}
20637
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020638/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053020639 FUNCTION WDA_ProcessEXTScanStartReq
20640
20641 DESCRIPTION
20642 API to send EXTScan Start Request to WDI
20643
20644 PARAMETERS
20645 pWDA: Pointer to WDA context
20646 wdaRequest: Pointer to EXTScan req parameters
20647===========================================================================*/
20648VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
20649 tSirEXTScanStartReqParams *wdaRequest)
20650{
20651 WDI_Status status = WDI_STATUS_SUCCESS;
20652 tWDA_ReqParams *pWdaParams;
20653
20654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20655 "%s: ", __func__);
20656 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20657 if (NULL == pWdaParams)
20658 {
20659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20660 "%s: VOS MEM Alloc Failure", __func__);
20661 VOS_ASSERT(0);
20662 return VOS_STATUS_E_NOMEM;
20663 }
20664 pWdaParams->pWdaContext = pWDA;
20665 pWdaParams->wdaMsgParam = wdaRequest;
20666 pWdaParams->wdaWdiApiMsgParam = NULL;
20667
20668 status = WDI_EXTScanStartReq((void *)wdaRequest,
20669 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
20670 (void *)pWdaParams);
20671 if (IS_WDI_STATUS_FAILURE(status))
20672 {
20673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20674 "Failure to request. Free all the memory " );
20675 vos_mem_free(pWdaParams->wdaMsgParam);
20676 vos_mem_free(pWdaParams);
20677 }
20678 return CONVERT_WDI2VOS_STATUS(status);
20679}
20680
20681/*==========================================================================
20682 FUNCTION WDA_ProcessEXTScanStopReq
20683
20684 DESCRIPTION
20685 API to send EXTScan Start Request to WDI
20686
20687 PARAMETERS
20688 pWDA: Pointer to WDA context
20689 wdaRequest: Pointer to EXTScan req parameters
20690===========================================================================*/
20691VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
20692 tSirEXTScanStopReqParams *wdaRequest)
20693{
20694 WDI_Status status = WDI_STATUS_SUCCESS;
20695 tWDA_ReqParams *pWdaParams;
20696
20697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20698 "%s:", __func__);
20699 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20700 if (NULL == pWdaParams)
20701 {
20702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20703 "%s: VOS MEM Alloc Failure", __func__);
20704 VOS_ASSERT(0);
20705 return VOS_STATUS_E_NOMEM;
20706 }
20707 pWdaParams->pWdaContext = pWDA;
20708 pWdaParams->wdaMsgParam = wdaRequest;
20709 pWdaParams->wdaWdiApiMsgParam = NULL;
20710
20711 status = WDI_EXTScanStopReq((void *)wdaRequest,
20712 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
20713 (void *)pWdaParams);
20714 if (IS_WDI_STATUS_FAILURE(status))
20715 {
20716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20717 "Failure to request. Free all the memory " );
20718 vos_mem_free(pWdaParams->wdaMsgParam);
20719 vos_mem_free(pWdaParams);
20720 }
20721 return CONVERT_WDI2VOS_STATUS(status);
20722}
20723
20724/*==========================================================================
20725 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
20726
20727 DESCRIPTION
20728 API to send EXTScan Get Cached Results Request to WDI
20729
20730 PARAMETERS
20731 pWDA: Pointer to WDA context
20732 wdaRequest: Pointer to EXTScan req parameters
20733===========================================================================*/
20734VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
20735 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
20736{
20737 WDI_Status status = WDI_STATUS_SUCCESS;
20738 tWDA_ReqParams *pWdaParams;
20739
20740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20741 "%s: ", __func__);
20742 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20743 if (NULL == pWdaParams)
20744 {
20745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20746 "%s: VOS MEM Alloc Failure", __func__);
20747 VOS_ASSERT(0);
20748 return VOS_STATUS_E_NOMEM;
20749 }
20750 pWdaParams->pWdaContext = pWDA;
20751 pWdaParams->wdaMsgParam = wdaRequest;
20752 pWdaParams->wdaWdiApiMsgParam = NULL;
20753
20754 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
20755 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
20756 (void *)pWdaParams);
20757 if (IS_WDI_STATUS_FAILURE(status))
20758 {
20759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20760 "Failure to request. Free all the memory " );
20761 vos_mem_free(pWdaParams->wdaMsgParam);
20762 vos_mem_free(pWdaParams);
20763 }
20764 return CONVERT_WDI2VOS_STATUS(status);
20765}
20766
20767/*==========================================================================
20768 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
20769
20770 DESCRIPTION
20771 API to send EXTScan Get Capabilities Request to WDI
20772
20773 PARAMETERS
20774 pWDA: Pointer to WDA context
20775 wdaRequest: Pointer to EXTScan req parameters
20776===========================================================================*/
20777VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
20778 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
20779{
20780 WDI_Status status = WDI_STATUS_SUCCESS;
20781 tWDA_ReqParams *pWdaParams;
20782
20783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20784 "%s:", __func__);
20785 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20786 if (NULL == pWdaParams)
20787 {
20788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20789 "%s: VOS MEM Alloc Failure", __func__);
20790 VOS_ASSERT(0);
20791 return VOS_STATUS_E_NOMEM;
20792 }
20793 pWdaParams->pWdaContext = pWDA;
20794 pWdaParams->wdaMsgParam = wdaRequest;
20795 pWdaParams->wdaWdiApiMsgParam = NULL;
20796
20797 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
20798 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
20799 (void *)pWdaParams);
20800 if (IS_WDI_STATUS_FAILURE(status))
20801 {
20802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20803 "Failure to request. Free all the memory " );
20804 vos_mem_free(pWdaParams->wdaMsgParam);
20805 vos_mem_free(pWdaParams);
20806 }
20807 return CONVERT_WDI2VOS_STATUS(status);
20808}
20809
20810/*==========================================================================
20811 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
20812
20813 DESCRIPTION
20814 API to send Set BSSID Hotlist Request to WDI
20815
20816 PARAMETERS
20817 pWDA: Pointer to WDA context
20818 wdaRequest: Pointer to EXTScan req parameters
20819===========================================================================*/
20820VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20821 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
20822{
20823 WDI_Status status = WDI_STATUS_SUCCESS;
20824 tWDA_ReqParams *pWdaParams;
20825
20826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20827 "%s: ", __func__);
20828 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20829 if (NULL == pWdaParams)
20830 {
20831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20832 "%s: VOS MEM Alloc Failure", __func__);
20833 VOS_ASSERT(0);
20834 return VOS_STATUS_E_NOMEM;
20835 }
20836 pWdaParams->pWdaContext = pWDA;
20837 pWdaParams->wdaMsgParam = wdaRequest;
20838 pWdaParams->wdaWdiApiMsgParam = NULL;
20839
20840 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
20841 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
20842 (void *)pWdaParams);
20843 if (IS_WDI_STATUS_FAILURE(status))
20844 {
20845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20846 "Failure to request. Free all the memory " );
20847 vos_mem_free(pWdaParams->wdaMsgParam);
20848 vos_mem_free(pWdaParams);
20849 }
20850 return CONVERT_WDI2VOS_STATUS(status);
20851}
20852
20853/*==========================================================================
20854 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
20855
20856 DESCRIPTION
20857 API to send Reset BSSID Hotlist Request to WDI
20858
20859 PARAMETERS
20860 pWDA: Pointer to WDA context
20861 wdaRequest: Pointer to EXTScan req parameters
20862===========================================================================*/
20863VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20864 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
20865{
20866 WDI_Status status = WDI_STATUS_SUCCESS;
20867 tWDA_ReqParams *pWdaParams;
20868
20869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20870 "%s:", __func__);
20871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20872 if (NULL == pWdaParams)
20873 {
20874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20875 "%s: VOS MEM Alloc Failure", __func__);
20876 VOS_ASSERT(0);
20877 return VOS_STATUS_E_NOMEM;
20878 }
20879 pWdaParams->pWdaContext = pWDA;
20880 pWdaParams->wdaMsgParam = wdaRequest;
20881 pWdaParams->wdaWdiApiMsgParam = NULL;
20882
20883 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
20884 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
20885 (void *)pWdaParams);
20886 if (IS_WDI_STATUS_FAILURE(status))
20887 {
20888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20889 "Failure to request. Free all the memory " );
20890 vos_mem_free(pWdaParams->wdaMsgParam);
20891 vos_mem_free(pWdaParams);
20892 }
20893 return CONVERT_WDI2VOS_STATUS(status);
20894}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020895
20896/*==========================================================================
20897 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
20898
20899 DESCRIPTION
20900 API to send Set SSID Hotlist Request to WDI
20901
20902 PARAMETERS
20903 pWDA: Pointer to WDA context
20904 wdaRequest: Pointer to EXTScan req parameters
20905===========================================================================*/
20906VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
20907 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
20908{
20909 WDI_Status status = WDI_STATUS_SUCCESS;
20910 tWDA_ReqParams *pWdaParams;
20911
20912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20913 "%s: ", __func__);
20914 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20915 if (NULL == pWdaParams)
20916 {
20917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20918 "%s: VOS MEM Alloc Failure", __func__);
20919 VOS_ASSERT(0);
20920 return VOS_STATUS_E_NOMEM;
20921 }
20922 pWdaParams->pWdaContext = pWDA;
20923 pWdaParams->wdaMsgParam = wdaRequest;
20924 pWdaParams->wdaWdiApiMsgParam = NULL;
20925
20926 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
20927 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
20928 (void *)pWdaParams);
20929 if (IS_WDI_STATUS_FAILURE(status))
20930 {
20931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20932 "Failure to request. Free all the memory " );
20933 vos_mem_free(pWdaParams->wdaMsgParam);
20934 vos_mem_free(pWdaParams);
20935 }
20936 return CONVERT_WDI2VOS_STATUS(status);
20937}
20938
20939/*==========================================================================
20940 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
20941
20942 DESCRIPTION
20943 API to send Reset SSID Hotlist Request to WDI
20944
20945 PARAMETERS
20946 pWDA: Pointer to WDA context
20947 wdaRequest: Pointer to EXTScan req parameters
20948===========================================================================*/
20949VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
20950 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
20951{
20952 WDI_Status status = WDI_STATUS_SUCCESS;
20953 tWDA_ReqParams *pWdaParams;
20954
20955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20956 "%s:", __func__);
20957 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20958 if (NULL == pWdaParams)
20959 {
20960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20961 "%s: VOS MEM Alloc Failure", __func__);
20962 VOS_ASSERT(0);
20963 return VOS_STATUS_E_NOMEM;
20964 }
20965 pWdaParams->pWdaContext = pWDA;
20966 pWdaParams->wdaMsgParam = wdaRequest;
20967 pWdaParams->wdaWdiApiMsgParam = NULL;
20968
20969 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
20970 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
20971 (void *)pWdaParams);
20972 if (IS_WDI_STATUS_FAILURE(status))
20973 {
20974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20975 "Failure to request. Free all the memory " );
20976 vos_mem_free(pWdaParams->wdaMsgParam);
20977 vos_mem_free(pWdaParams);
20978 }
20979 return CONVERT_WDI2VOS_STATUS(status);
20980}
20981
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020982/*==========================================================================
20983 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20984
20985 DESCRIPTION
20986 API to send Reset SSID Hotlist Request to WDI
20987
20988 PARAMETERS
20989 pWDA: Pointer to WDA context
20990 wdaRequest: Pointer to EXTScan req parameters
20991===========================================================================*/
20992VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20993 tSirHighPriorityDataInfoInd *wdaRequest)
20994{
20995 WDI_Status status = WDI_STATUS_SUCCESS;
20996
20997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20998 "%s:", __func__);
20999
21000 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
21001 if (WDI_STATUS_PENDING == status)
21002 {
21003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21004 FL("pending status received "));
21005 }
21006 else if (WDI_STATUS_SUCCESS_SYNC != status)
21007 {
21008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21009 FL("Failure status %d"), status);
21010 }
21011 return CONVERT_WDI2VOS_STATUS(status);
21012}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021013
Dino Mycle41bdc942014-06-10 11:30:24 +053021014#endif /* WLAN_FEATURE_EXTSCAN */
21015
Sunil Duttbd736ed2014-05-26 21:19:41 +053021016#ifdef WLAN_FEATURE_LINK_LAYER_STATS
21017
21018/*==========================================================================
21019 FUNCTION WDA_LLStatsSetRspCallback
21020
21021 DESCRIPTION
21022 API to process set link layer statistics response from FW
21023
21024 PARAMETERS
21025 pRsp: Pointer to set link layer statistics response
21026 pUserData: Pointer to user data
21027
21028 RETURN VALUE
21029 NONE
21030
21031===========================================================================*/
21032void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
21033{
21034 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21035
21036
21037 if (NULL == pWdaParams)
21038 {
21039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21040 "%s: pWdaParams received NULL", __func__);
21041 VOS_ASSERT(0) ;
21042 return ;
21043 }
21044
21045 /* Do not need to send notification to upper layer
21046 * Just free allocated resources */
21047 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21048 {
21049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21050 }
21051 if (pWdaParams->wdaMsgParam != NULL)
21052 {
21053 vos_mem_free(pWdaParams->wdaMsgParam);
21054 }
21055 vos_mem_free(pWdaParams) ;
21056
21057 return;
21058}
21059
21060/*==========================================================================
21061 FUNCTION WDA_ProcessLLStatsSetReq
21062
21063 DESCRIPTION
21064 API to send Set Link Layer Stats request to WDI
21065
21066 PARAMETERS
21067 pWDA: Pointer to WDA context
21068 wdaRequest: Pointer to set Link Layer Stats req parameters
21069===========================================================================*/
21070VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
21071 tSirLLStatsSetReq *wdaRequest)
21072{
21073 WDI_Status status = WDI_STATUS_SUCCESS;
21074 tWDA_ReqParams *pWdaParams;
21075
21076 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21077 if (NULL == pWdaParams)
21078 {
21079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21080 "%s: VOS MEM Alloc Failure", __func__);
21081 VOS_ASSERT(0);
21082 return VOS_STATUS_E_NOMEM;
21083 }
21084 pWdaParams->pWdaContext = pWDA;
21085 pWdaParams->wdaMsgParam = wdaRequest;
21086 pWdaParams->wdaWdiApiMsgParam = NULL;
21087
21088 status = WDI_LLStatsSetReq((void *)wdaRequest,
21089 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
21090 (void *)pWdaParams);
21091 if (IS_WDI_STATUS_FAILURE(status))
21092 {
21093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21094 "Failure to request. Free all the memory " );
21095 vos_mem_free(pWdaParams->wdaMsgParam);
21096 vos_mem_free(pWdaParams);
21097 }
21098 return CONVERT_WDI2VOS_STATUS(status);
21099}
21100
21101/*==========================================================================
21102 FUNCTION WDA_LLStatsGetRspCallback
21103
21104 DESCRIPTION
21105 API to process get link layer statistics response from FW
21106
21107 PARAMETERS
21108 pRsp: Pointer to get link layer statistics response
21109 pUserData: Pointer to user data
21110
21111 RETURN VALUE
21112 NONE
21113
21114===========================================================================*/
21115void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
21116{
21117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21118
21119 if (NULL == pWdaParams)
21120 {
21121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21122 "%s: pWdaParams received NULL", __func__);
21123 VOS_ASSERT(0) ;
21124 return ;
21125 }
21126
21127 /* Do not need to send notification to upper layer
21128 * Just free allocated resources */
21129 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21130 {
21131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21132 }
21133 if (pWdaParams->wdaMsgParam != NULL)
21134 {
21135 vos_mem_free(pWdaParams->wdaMsgParam);
21136 }
21137 vos_mem_free(pWdaParams) ;
21138
21139 return;
21140}
21141
21142/*==========================================================================
21143 FUNCTION WDA_ProcessLLStatsGetReq
21144
21145 DESCRIPTION
21146 API to send Get Link Layer Stats request to WDI
21147
21148 PARAMETERS
21149 pWDA: Pointer to WDA context
21150 wdaRequest: Pointer to get Link Layer Stats req parameters
21151===========================================================================*/
21152VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
21153 tSirLLStatsGetReq *wdaRequest)
21154{
21155 WDI_Status status = WDI_STATUS_SUCCESS;
21156 tWDA_ReqParams *pWdaParams;
21157
21158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21159 if (NULL == pWdaParams)
21160 {
21161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21162 "%s: VOS MEM Alloc Failure", __func__);
21163 VOS_ASSERT(0);
21164 return VOS_STATUS_E_NOMEM;
21165 }
21166 pWdaParams->pWdaContext = pWDA;
21167 pWdaParams->wdaMsgParam = wdaRequest;
21168 pWdaParams->wdaWdiApiMsgParam = NULL;
21169
21170 status = WDI_LLStatsGetReq((void *) wdaRequest,
21171 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
21172 (void *)pWdaParams);
21173 if (IS_WDI_STATUS_FAILURE(status))
21174 {
21175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21176 "Failure to request. Free all the memory " );
21177 vos_mem_free(pWdaParams->wdaMsgParam);
21178 vos_mem_free(pWdaParams);
21179 }
21180 return CONVERT_WDI2VOS_STATUS(status);
21181}
21182
21183/*==========================================================================
21184 FUNCTION WDA_LLStatsClearRspCallback
21185
21186 DESCRIPTION
21187 API to process clear link layer statistics response from FW
21188
21189 PARAMETERS
21190 pRsp: Pointer to clear link layer statistics response
21191 pUserData: Pointer to user data
21192
21193 RETURN VALUE
21194 NONE
21195
21196===========================================================================*/
21197void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
21198{
21199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21200
21201
21202 if (NULL == pWdaParams)
21203 {
21204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21205 "%s: pWdaParams received NULL", __func__);
21206 VOS_ASSERT(0) ;
21207 return ;
21208 }
21209 /* Do not need to send notification to upper layer
21210 * Just free allocated resources */
21211 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21212 {
21213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21214 }
21215 if (pWdaParams->wdaMsgParam != NULL)
21216 {
21217 vos_mem_free(pWdaParams->wdaMsgParam);
21218 }
21219 vos_mem_free(pWdaParams) ;
21220 return;
21221}
21222
21223/*==========================================================================
21224 FUNCTION WDA_ProcessLLStatsClearReq
21225
21226 DESCRIPTION
21227 API to send Clear Link Layer Stats request to WDI
21228
21229 PARAMETERS
21230 pWDA: Pointer to WDA context
21231 wdaRequest: Pointer to earLink Layer Stats req
21232===========================================================================*/
21233VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
21234 tSirLLStatsClearReq *wdaRequest)
21235{
21236 WDI_Status status = WDI_STATUS_SUCCESS;
21237 tWDA_ReqParams *pWdaParams;
21238
21239 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21240 if (NULL == pWdaParams)
21241 {
21242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21243 "%s: VOS MEM Alloc Failure", __func__);
21244 VOS_ASSERT(0);
21245 return VOS_STATUS_E_NOMEM;
21246 }
21247 pWdaParams->pWdaContext = pWDA;
21248 pWdaParams->wdaMsgParam = wdaRequest;
21249 pWdaParams->wdaWdiApiMsgParam = NULL;
21250
21251 status = WDI_LLStatsClearReq((void *) wdaRequest,
21252 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
21253 (void *)pWdaParams);
21254 if (IS_WDI_STATUS_FAILURE(status))
21255 {
21256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21257 "Failure to request. Free all the memory " );
21258 vos_mem_free(pWdaParams->wdaMsgParam);
21259 vos_mem_free(pWdaParams);
21260 }
21261 return CONVERT_WDI2VOS_STATUS(status);
21262}
21263
21264#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053021265
Abhishek Singh85b74712014-10-08 11:38:19 +053021266void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
21267{
21268 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
21269
21270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21271 "<------ %s " ,__func__);
21272 if (NULL == fwStatsinfo)
21273 {
21274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21275 "%s: pWdaParams received NULL", __func__);
21276 VOS_ASSERT(0);
21277 return;
21278 }
21279
21280 if(fwStatsinfo->callback)
21281 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
21282
21283 vos_mem_free(pUserData);
21284 return;
21285}
21286
21287
21288v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
21289 tSirFWStatsGetReq *pData)
21290{
21291
21292 WDI_Status wdiStatus;
21293 tSirFWStatsInfo *fwStatsinfo;
21294
21295 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21296 "------> %s" , __func__);
21297
21298 fwStatsinfo =
21299 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
21300 if (NULL == fwStatsinfo)
21301 {
21302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21303 "%s: VOS MEM Alloc Failure", __func__);
21304 VOS_ASSERT(0);
21305 vos_mem_free(pData);
21306 return;
21307 }
21308
21309 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
21310 fwStatsinfo->data = pData->data;
21311
21312 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
21313 WDA_FWStatsGetRspCallback,
21314 pData->stats);
21315 if (WDI_STATUS_PENDING == wdiStatus)
21316 {
21317 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21318 "Pending received for %s:%d ", __func__, __LINE__);
21319 }
21320 else if (WDI_STATUS_SUCCESS != wdiStatus)
21321 {
21322 if (fwStatsinfo->callback)
21323 {
21324 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
21325 }
21326 vos_mem_free(fwStatsinfo);
21327 }
21328 vos_mem_free(pData);
21329}
21330
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053021331/*==========================================================================
21332 FUNCTION WDA_EncryptMsgRspCallback
21333
21334 DESCRIPTION
21335 API to send Encrypt message response to HDD
21336
21337 PARAMETERS
21338 pEventData: Response from FW
21339 pUserData: Data sent to firmware as part of request
21340===========================================================================*/
21341void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
21342 void* pUserData)
21343{
21344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21345 tWDA_CbContext *pWDA = NULL;
21346 tpAniSirGlobal pMac;
21347 vos_msg_t vosMsg;
21348 tpSirEncryptedDataRspParams pEncRspParams;
21349 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21350
21351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21352 FL("%s:"), __func__);
21353 if (NULL == pWdaParams)
21354 {
21355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21356 FL("%s: pWdaParams received NULL"), __func__);
21357 VOS_ASSERT(0);
21358 return;
21359 }
21360
21361 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21362
21363 if (NULL == pWDA)
21364 {
21365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21366 FL("%s: pWDA received NULL"), __func__);
21367 VOS_ASSERT(0);
21368 goto error;
21369 }
21370
21371 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21372 if (NULL == pMac)
21373 {
21374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21375 FL("%s:pMac is NULL"), __func__);
21376 VOS_ASSERT(0);
21377 goto error;
21378 }
21379
21380 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21381
21382 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21383 if (NULL == pEncRspParams)
21384 {
21385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21386 FL("%s: VOS MEM Alloc Failure"), __func__);
21387 VOS_ASSERT(0);
21388 goto error;
21389 }
21390
21391 /* Message Header */
21392 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21393 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21394 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21395 pEncryptedDataRsp->encryptedPayload.length;
21396 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21397 pEncryptedDataRsp->encryptedPayload.data,
21398 pEncryptedDataRsp->encryptedPayload.length);
21399
21400 /* VOS message wrapper */
21401 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21402 vosMsg.bodyptr = (void *)pEncRspParams;
21403 vosMsg.bodyval = 0;
21404
21405 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21406 {
21407 /* free the mem */
21408 vos_mem_free((v_VOID_t *) pEncRspParams);
21409 }
21410
21411error:
21412
21413 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21414 {
21415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21416 }
21417 if (pWdaParams->wdaMsgParam != NULL)
21418 {
21419 vos_mem_free(pWdaParams->wdaMsgParam);
21420 }
21421 vos_mem_free(pWdaParams) ;
21422
21423 return;
21424}
21425/*==========================================================================
21426 FUNCTION WDA_ProcessEncryptMsgReq
21427
21428 DESCRIPTION
21429 API to send Encrypt message Request to WDI
21430
21431 PARAMETERS
21432 pWDA: Pointer to WDA context
21433 wdaRequest: Pointer to Encrypt_msg req parameters
21434===========================================================================*/
21435VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21436 u8 *wdaRequest)
21437{
21438 WDI_Status status = WDI_STATUS_SUCCESS;
21439 tWDA_ReqParams *pWdaParams;
21440
21441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21442 FL("%s: "), __func__);
21443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21444 if (NULL == pWdaParams)
21445 {
21446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21447 FL("%s: VOS MEM Alloc Failure"), __func__);
21448 VOS_ASSERT(0);
21449 return VOS_STATUS_E_NOMEM;
21450 }
21451 pWdaParams->pWdaContext = pWDA;
21452 pWdaParams->wdaMsgParam = wdaRequest;
21453 pWdaParams->wdaWdiApiMsgParam = NULL;
21454
21455 status = WDI_EncryptMsgReq((void *)wdaRequest,
21456 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21457 (void *)pWdaParams);
21458 if (IS_WDI_STATUS_FAILURE(status))
21459 {
21460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21461 FL("Failure to request. Free all the memory " ));
21462 vos_mem_free(pWdaParams->wdaMsgParam);
21463 vos_mem_free(pWdaParams);
21464 }
21465 return CONVERT_WDI2VOS_STATUS(status);
21466}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021467/*==========================================================================
21468 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21469
21470 DESCRIPTION
21471 API to enable/disable RTS/CTS for different modes.
21472
21473 PARAMETERS
21474 pWDA: Pointer to WDA context
21475 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21476===========================================================================*/
21477
21478VOS_STATUS
21479WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21480 tANI_U32 rtsCtsVal)
21481{
21482 WDI_Status status;
21483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21484 FL("---> %s"), __func__);
21485 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21486 if (WDI_STATUS_PENDING == status)
21487 {
21488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21489 FL("pending status received "));
21490 }
21491 else if (WDI_STATUS_SUCCESS_SYNC != status)
21492 {
21493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21494 FL("Failure status %d"), status);
21495 }
21496 return CONVERT_WDI2VOS_STATUS(status) ;
21497}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021498
21499void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021500{
21501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021502 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021503
21504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21505 "<------ %s " ,__func__);
21506 if (NULL == pWdaParams)
21507 {
21508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21509 "%s: pWdaParams received NULL", __func__);
21510 VOS_ASSERT(0) ;
21511 return ;
21512 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021513 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21514 if (pData != NULL) {
21515 pData->callback(pData->magic, pData->cmpVar);
21516 vos_mem_free(pWdaParams->wdaMsgParam);
21517 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021518 vos_mem_free(pWdaParams) ;
21519
21520 return;
21521}
21522
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021523VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053021524{
21525
21526 WDI_Status status = WDI_STATUS_SUCCESS;
21527 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021528 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053021529
21530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21531 FL("%s: "), __func__);
21532 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21533 if (NULL == pWdaParams)
21534 {
21535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21536 FL("%s: VOS MEM Alloc Failure"), __func__);
21537 VOS_ASSERT(0);
21538 return VOS_STATUS_E_NOMEM;
21539 }
21540 pWdaParams->pWdaContext = pWDA;
21541 pWdaParams->wdaMsgParam = wdaRequest;
21542 pWdaParams->wdaWdiApiMsgParam = NULL;
21543
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021544 status = WDI_MonStartReq(pMonModeData->data,
21545 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021546 (void *)pWdaParams);
21547 if (IS_WDI_STATUS_FAILURE(status))
21548 {
21549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21550 "Failure to request. Free all the memory " );
21551 vos_mem_free(pWdaParams->wdaMsgParam);
21552 vos_mem_free(pWdaParams);
21553 }
21554 return CONVERT_WDI2VOS_STATUS(status);
21555}
21556
Katya Nigamf0511f62015-05-05 16:40:57 +053021557VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
21558{
21559
21560 WDI_Status status = WDI_STATUS_SUCCESS;
21561 tWDA_ReqParams *pWdaParams;
21562
21563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21564 FL("%s: "), __func__);
21565 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21566 if (NULL == pWdaParams)
21567 {
21568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21569 FL("%s: VOS MEM Alloc Failure"), __func__);
21570 VOS_ASSERT(0);
21571 return VOS_STATUS_E_NOMEM;
21572 }
21573 pWdaParams->pWdaContext = pWDA;
21574 pWdaParams->wdaMsgParam = wdaRequest;
21575 pWdaParams->wdaWdiApiMsgParam = NULL;
21576
Bhargav Shah1ae5de02015-07-20 13:32:31 +053021577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21578 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021579 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021580 (void *)pWdaParams);
21581
21582 if (IS_WDI_STATUS_FAILURE(status))
21583 {
21584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21585 "Failure to request. Free all the memory " );
21586 vos_mem_free(pWdaParams->wdaMsgParam);
21587 vos_mem_free(pWdaParams);
21588 }
21589 return CONVERT_WDI2VOS_STATUS(status);
21590}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053021591
21592VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
21593{
21594 WDI_Status status;
21595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21596 FL("---> %s"), __func__);
21597 status = WDI_EnableDisableCAEventInd(val);
21598 if (WDI_STATUS_PENDING == status)
21599 {
21600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21601 FL("pending status received "));
21602 }
21603 else if (WDI_STATUS_SUCCESS_SYNC != status)
21604 {
21605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21606 FL("Failure status %d"), status);
21607 }
21608 return CONVERT_WDI2VOS_STATUS(status) ;
21609}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021610
21611/*==========================================================================
21612 FUNCTION WDA_WifiConfigSetRspCallback
21613
21614 DESCRIPTION
21615 API to process set WifiConfig response from FW
21616
21617 PARAMETERS
21618 pRsp: Pointer to set WifiConfig response
21619 pUserData: Pointer to user data
21620
21621 RETURN VALUE
21622 NONE
21623
21624===========================================================================*/
21625void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
21626{
21627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21628
21629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21630 "<------ %s " ,__func__);
21631
21632 if(NULL == pWdaParams)
21633 {
21634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21635 "%s: pWdaParams received NULL", __func__);
21636 VOS_ASSERT(0);
21637 return ;
21638 }
21639
21640 if(NULL == pWdaParams->wdaMsgParam)
21641 {
21642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21643 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
21644 VOS_ASSERT(0);
21645 vos_mem_free(pWdaParams);
21646 return ;
21647 }
21648
21649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21650 vos_mem_free(pWdaParams->wdaMsgParam);
21651 vos_mem_free(pWdaParams);
21652
21653 return;
21654}
21655
21656/*==========================================================================
21657 FUNCTION WDA_ProcessWifiConfigReq
21658
21659 DESCRIPTION
21660 API to send Set WifiConfig params request to WDI
21661
21662 PARAMETERS
21663 pWDA: Pointer to WDA context
21664 wdaRequest: Pointer to set WifiConfig req parameters
21665===========================================================================*/
21666
21667VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
21668 tSetWifiConfigParams *pwdaWificonfig)
21669{
21670 WDI_Status status = WDI_STATUS_SUCCESS;
21671 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
21672 tWDA_ReqParams *pWdaParams ;
21673 WDI_Status wstatus;
21674
21675 /* Sanity Check*/
21676 if(NULL == pwdaWificonfig)
21677 {
21678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21679 "%s: tSetWifiConfigParams received NULL", __func__);
21680 VOS_ASSERT(0) ;
21681 return VOS_STATUS_E_FAULT;
21682 }
21683
21684 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
21685 sizeof(WDI_WifiConfigSetReqType));
21686 if(NULL == pwdiWifConfigSetReqParams)
21687 {
21688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21689 "%s: VOS MEM Alloc Failure", __func__);
21690 VOS_ASSERT(0);
21691 vos_mem_free(pwdaWificonfig);
21692 return VOS_STATUS_E_NOMEM;
21693 }
21694
21695 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21696 if(NULL == pWdaParams)
21697 {
21698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21699 "%s: VOS MEM Alloc Failure", __func__);
21700 VOS_ASSERT(0);
21701 vos_mem_free(pwdiWifConfigSetReqParams);
21702 vos_mem_free(pwdaWificonfig);
21703 return VOS_STATUS_E_NOMEM;
21704 }
21705 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
21706 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
21707 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
21708 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
21709
21710 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053021711 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021712 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
21713
21714 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
21715 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
21716 pWdaParams);
21717 if(IS_WDI_STATUS_FAILURE(wstatus))
21718 {
21719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21720 "Failure in sendind WifiConfigReq, free all the memory" );
21721 status = CONVERT_WDI2VOS_STATUS(wstatus);
21722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21723 vos_mem_free(pWdaParams->wdaMsgParam);
21724 vos_mem_free(pWdaParams);
21725 }
21726
21727 return status;
21728
21729}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021730
21731#ifdef FEATURE_OEM_DATA_SUPPORT
21732/*
21733 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
21734 * Request to WDI.
21735 */
21736VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
21737 tOemDataReqNewConfig *pOemDataReqNewConfig)
21738{
21739 VOS_STATUS status = VOS_STATUS_SUCCESS;
21740 WDI_Status wstatus;
21741 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
21742
21743 /* Sanity Check*/
21744 if(NULL == pOemDataReqNewConfig)
21745 {
21746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21747 "%s: pOemDataReqNewConfig received NULL", __func__);
21748 VOS_ASSERT(0) ;
21749 return VOS_STATUS_E_FAULT;
21750 }
21751
21752 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
21753 sizeof(WDI_OemDataReqNewConfig));
21754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21755 "------> %s " ,__func__);
21756
21757 if(NULL == wdiOemDataReqNewConfig)
21758 {
21759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21760 "%s: VOS MEM Alloc Failure", __func__);
21761 VOS_ASSERT(0);
21762 vos_mem_free(pOemDataReqNewConfig);
21763 return VOS_STATUS_E_NOMEM;
21764 }
21765
21766 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
21767 sizeof(WDI_OemDataReqNewConfig));
21768
21769 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
21770
21771 if (WDI_STATUS_PENDING == wstatus)
21772 {
21773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21774 FL("pending status received "));
21775 }
21776 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
21777 {
21778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21779 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021780 }
21781
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053021782 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021783 vos_mem_free(pOemDataReqNewConfig);
21784
21785 return status;
21786}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021787
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021788void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
21789 void *pUserData)
21790{
21791 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
21792 (tSirAntennaDiversitySelectionInfo *)pUserData;
21793
21794 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
21795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21796 "<------ %s " ,__func__);
21797 if (NULL == pAntennaDivSelInfo)
21798 {
21799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21800 "%s: pWdaParams received NULL", __func__);
21801 VOS_ASSERT(0) ;
21802 return ;
21803 }
21804 if (NULL == resParams)
21805 {
21806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21807 "%s: resParams received NULL", __func__);
21808 VOS_ASSERT(0) ;
21809 return ;
21810 }
21811
21812 if (pAntennaDivSelInfo->callback)
21813 {
21814 if (WDI_STATUS_SUCCESS == status)
21815 {
21816 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
21817 pAntennaDivSelInfo->data);
21818 }
21819 else
21820 {
21821 pAntennaDivSelInfo->callback(-1,
21822 pAntennaDivSelInfo->data);
21823 }
21824 }
21825
21826 vos_mem_free(pUserData);
21827 return;
21828}
21829
21830/*
21831 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
21832 * Request to WDI.
21833 */
21834v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
21835 tSirAntennaDiversitySelectionReq *pData)
21836{
21837 WDI_Status wdiStatus;
21838 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
21839
21840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21841 "------> %s " , __func__);
21842
21843 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
21844 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
21845 if (NULL == pAntennaDivSelInfo)
21846 {
21847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21848 "%s: VOS MEM Alloc Failure", __func__);
21849 VOS_ASSERT(0);
21850 vos_mem_free(pData);
21851 return;
21852 }
21853
21854 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
21855 pAntennaDivSelInfo->data = pData->data;
21856
21857 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
21858 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
21859
21860 if (WDI_STATUS_PENDING == wdiStatus)
21861 {
21862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21863 "Pending received for %s:%d ", __func__, __LINE__);
21864 }
21865 else if (WDI_STATUS_SUCCESS != wdiStatus)
21866 {
21867 if (pAntennaDivSelInfo->callback)
21868 {
21869 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
21870 }
21871 }
21872
21873 vos_mem_free(pData);
21874 return;
21875}
21876
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053021877/*
21878 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
21879 * Request to WDI.
21880 */
21881VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
21882 tModifyRoamParamsReqParams *params)
21883{
21884 WDI_Status status;
21885
21886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21887 FL("---> %s"), __func__);
21888
21889 if (NULL == params)
21890 {
21891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21892 FL("tModifyRoamParamsReqParams is received NULL"));
21893 return VOS_STATUS_E_NOMEM;
21894 }
21895
21896 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
21897 if (WDI_STATUS_PENDING == status)
21898 {
21899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21900 FL("pending status received "));
21901 }
21902 else if (WDI_STATUS_SUCCESS_SYNC != status)
21903 {
21904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21905 FL("Failure status %d"), status);
21906 }
21907 vos_mem_free(params);
21908 return CONVERT_WDI2VOS_STATUS(status) ;
21909}
21910
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021911#endif