blob: da7c8c2e26d9660053e00337f2fe67a6966164ce [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
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001696#ifdef WLAN_SOFTAP_VSTA_FEATURE
1697 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1701 != eSIR_SUCCESS)
1702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1704 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1705 goto handle_failure;
1706 }
1707
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710#endif
1711
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001712 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1713 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1714 tlvStruct->length = sizeof(tANI_U32);
1715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1716
1717 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1718 != eSIR_SUCCESS)
1719 {
1720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1721 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1722 goto handle_failure;
1723 }
1724
1725 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1726 + sizeof(tHalCfg) + tlvStruct->length) ;
1727
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301728/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1729 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1730 tlvStruct->length = sizeof(tANI_U32);
1731 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1732 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1733 configDataValue ) != eSIR_SUCCESS)
1734 {
1735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1736 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1737 goto handle_failure;
1738 }
1739
1740 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1741 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301742#ifdef FEATURE_WLAN_TDLS
1743 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1744 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1745 tlvStruct->length = sizeof(tANI_U32);
1746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1747 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1748 configDataValue ) != eSIR_SUCCESS)
1749 {
1750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1751 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1752 goto handle_failure;
1753 }
1754 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1755 + sizeof(tHalCfg) + tlvStruct->length) ;
1756
1757 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1758 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1759 tlvStruct->length = sizeof(tANI_U32);
1760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1761 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1762 configDataValue ) != eSIR_SUCCESS)
1763 {
1764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1765 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1766 goto handle_failure;
1767 }
1768 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1769 + sizeof(tHalCfg) + tlvStruct->length) ;
1770 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1771 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1772 tlvStruct->length = sizeof(tANI_U32);
1773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1774 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1775 configDataValue ) != eSIR_SUCCESS)
1776 {
1777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1778 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1779 goto handle_failure;
1780 }
1781 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1782 + sizeof(tHalCfg) + tlvStruct->length) ;
1783 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1784 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1785 tlvStruct->length = sizeof(tANI_U32);
1786 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1787 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1788 configDataValue ) != eSIR_SUCCESS)
1789 {
1790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1791 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1792 goto handle_failure;
1793 }
1794 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1795 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301796 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1797 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1798 tlvStruct->length = sizeof(tANI_U32);
1799 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1800 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1801 configDataValue ) != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1805 goto handle_failure;
1806 }
1807 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1808 + sizeof(tHalCfg) + tlvStruct->length) ;
1809
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301810#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301811
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001812 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1813 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1814 tlvStruct->length = sizeof(tANI_U32);
1815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1816 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1817 configDataValue ) != eSIR_SUCCESS)
1818 {
1819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1820 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1821 goto handle_failure;
1822 }
1823
1824 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001826
1827 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1828 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1829 tlvStruct->length = sizeof(tANI_U32);
1830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1831 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1832 != eSIR_SUCCESS)
1833 {
1834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1835 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1836 goto handle_failure;
1837 }
1838 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1839 + sizeof(tHalCfg) + tlvStruct->length));
1840
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301841 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1842 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1843 tlvStruct->length = sizeof(tANI_U32);
1844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1845 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1846 configDataValue ) != eSIR_SUCCESS)
1847 {
1848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1849 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1850 goto handle_failure;
1851 }
1852
1853 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1854 + sizeof(tHalCfg) + tlvStruct->length) ;
1855
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301856 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1857 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1858 tlvStruct->length = sizeof(tANI_U32);
1859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1860 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1861 configDataValue ) != eSIR_SUCCESS)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1865 goto handle_failure;
1866 }
1867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1868 + sizeof(tHalCfg) + tlvStruct->length) ;
1869
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301870 /* QWLAN_HAL_CFG_ATH_DISABLE */
1871 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1872 tlvStruct->length = sizeof(tANI_U32);
1873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1874 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1875 configDataValue ) != eSIR_SUCCESS)
1876 {
1877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1878 "Failed to get value for WNI_CFG_ATH_DISABLE");
1879 goto handle_failure;
1880 }
1881 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1882 + sizeof(tHalCfg) + tlvStruct->length) ;
1883
c_hpothu6d7dc922013-12-02 12:36:41 +05301884 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1885 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1886 tlvStruct->length = sizeof(tANI_U32);
1887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1888 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1889 configDataValue ) != eSIR_SUCCESS)
1890 {
1891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1892 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1893 goto handle_failure;
1894 }
1895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1896 + sizeof(tHalCfg) + tlvStruct->length) ;
1897
1898 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1899 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1900 tlvStruct->length = sizeof(tANI_U32);
1901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1902 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1903 configDataValue ) != eSIR_SUCCESS)
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1907 goto handle_failure;
1908 }
1909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1910 + sizeof(tHalCfg) + tlvStruct->length) ;
1911
1912 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1913 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1914 tlvStruct->length = sizeof(tANI_U32);
1915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1916 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1917 configDataValue ) != eSIR_SUCCESS)
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1921 goto handle_failure;
1922 }
1923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1924 + sizeof(tHalCfg) + tlvStruct->length) ;
1925
1926 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1927 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1928 tlvStruct->length = sizeof(tANI_U32);
1929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1930 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301940 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1941 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1945 configDataValue ) != eSIR_SUCCESS)
1946 {
1947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1948 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1949 goto handle_failure;
1950 }
1951 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1952 + sizeof(tHalCfg) + tlvStruct->length) ;
1953
1954 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1955 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1956 tlvStruct->length = sizeof(tANI_U32);
1957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1958 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1959 configDataValue ) != eSIR_SUCCESS)
1960 {
1961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1962 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1963 goto handle_failure;
1964 }
1965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1966 + sizeof(tHalCfg) + tlvStruct->length) ;
1967
1968 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1969 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1970 tlvStruct->length = sizeof(tANI_U32);
1971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1972 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1973 configDataValue ) != eSIR_SUCCESS)
1974 {
1975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1976 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1977 goto handle_failure;
1978 }
1979 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1980 + sizeof(tHalCfg) + tlvStruct->length) ;
1981
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001982 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1983 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1984 tlvStruct->length = sizeof(tANI_U32);
1985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1986 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1987 configDataValue ) != eSIR_SUCCESS)
1988 {
1989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1990 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1991 goto handle_failure;
1992 }
1993 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1994 + sizeof(tHalCfg) + tlvStruct->length) ;
1995
c_hpothu5bd1ae42014-03-07 20:28:22 +05301996 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1997 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1998 tlvStruct->length = sizeof(tANI_U32);
1999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2000
2001 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2002 configDataValue ) != eSIR_SUCCESS)
2003 {
2004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2005 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2006 goto handle_failure;
2007 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2009 + sizeof(tHalCfg) + tlvStruct->length) ;
2010
2011 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2012 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2013 tlvStruct->length = sizeof(tANI_U32);
2014 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2015
2016 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2017 configDataValue ) != eSIR_SUCCESS)
2018 {
2019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2020 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2021 goto handle_failure;
2022 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2024 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302025
c_hpothu2d0f1c42014-04-01 18:38:51 +05302026 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2027 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2028 tlvStruct->length = sizeof(tANI_U32);
2029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2030
2031 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2032 configDataValue ) != eSIR_SUCCESS)
2033 {
2034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2035 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2036 goto handle_failure;
2037 }
2038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2039 + sizeof(tHalCfg) + tlvStruct->length) ;
2040
2041 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2042 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2043 tlvStruct->length = sizeof(tANI_U32);
2044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2045
2046 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2047 configDataValue ) != eSIR_SUCCESS)
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2050 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2051 goto handle_failure;
2052 }
2053 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2054 + sizeof(tHalCfg) + tlvStruct->length) ;
2055
2056 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2057 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2058 tlvStruct->length = sizeof(tANI_U32);
2059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2060
2061 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
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_DYN_A2DP_TX_QUEUE_THOLD");
2066 goto handle_failure;
2067 }
2068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2069 + sizeof(tHalCfg) + tlvStruct->length) ;
2070
2071 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2072 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2073 tlvStruct->length = sizeof(tANI_U32);
2074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2075
2076 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
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_DYN_OPP_TX_QUEUE_THOLD");
2081 goto handle_failure;
2082 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2084 + sizeof(tHalCfg) + tlvStruct->length) ;
2085
Mihir Shetec34258c2014-07-30 17:50:27 +05302086 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2087 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2088 tlvStruct->length = sizeof(tANI_U32);
2089 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2090
2091 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2092 configDataValue ) != eSIR_SUCCESS)
2093 {
2094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2095 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2096 goto handle_failure;
2097 }
2098 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2099 + sizeof(tHalCfg) + tlvStruct->length) ;
2100
2101 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2102 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2103 tlvStruct->length = sizeof(tANI_U32);
2104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2105
2106 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2107 configDataValue ) != eSIR_SUCCESS)
2108 {
2109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2110 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2111 goto handle_failure;
2112 }
2113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2114 + sizeof(tHalCfg) + tlvStruct->length) ;
2115
2116 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2117 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2118 tlvStruct->length = sizeof(tANI_U32);
2119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2120
2121 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
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_TX_CNT");
2126 goto handle_failure;
2127 }
2128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2129 + sizeof(tHalCfg) + tlvStruct->length) ;
2130
2131 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2132 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2133 tlvStruct->length = sizeof(tANI_U32);
2134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2135
2136 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
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_TX_CNT_MEAS_WINDOW");
2141 goto handle_failure;
2142 }
2143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2144 + sizeof(tHalCfg) + tlvStruct->length) ;
2145
2146 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2147 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2148 tlvStruct->length = sizeof(tANI_U32);
2149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2150
2151 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
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_RX_CNT_MEAS_WINDOW");
2156 goto handle_failure;
2157 }
2158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2159 + sizeof(tHalCfg) + tlvStruct->length) ;
2160
2161 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2162 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2163 tlvStruct->length = sizeof(tANI_U32);
2164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2165
2166 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
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_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2171 goto handle_failure;
2172 }
2173 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2174 + sizeof(tHalCfg) + tlvStruct->length) ;
2175
2176 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2177 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2178 tlvStruct->length = sizeof(tANI_U32);
2179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2180
2181 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
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_INACTIVITY_INTERVALS");
2186 goto handle_failure;
2187 }
2188 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2189 + sizeof(tHalCfg) + tlvStruct->length) ;
2190
2191 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2192 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2193 tlvStruct->length = sizeof(tANI_U32);
2194 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2195
2196 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2197 configDataValue ) != eSIR_SUCCESS)
2198 {
2199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2200 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2201 goto handle_failure;
2202 }
2203 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2204 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302205
2206 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2207 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2208 tlvStruct->length = sizeof(tANI_U32);
2209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2210
2211 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2212 configDataValue ) != eSIR_SUCCESS)
2213 {
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2215 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2216 goto handle_failure;
2217 }
2218 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2219 + sizeof(tHalCfg) + tlvStruct->length) ;
2220
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302221 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2223 tlvStruct->length = sizeof(tANI_U32);
2224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2225
2226 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
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_RA_START_RATE");
2231 goto handle_failure;
2232 }
2233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2234 + sizeof(tHalCfg) + tlvStruct->length) ;
2235
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302236 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2237 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2238 tlvStruct->length = sizeof(tANI_U32);
2239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2240
2241 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2242 configDataValue ) != eSIR_SUCCESS)
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2246 goto handle_failure;
2247 }
2248 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2249 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302250
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302251 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2252 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2253 tlvStruct->length = sizeof(tANI_U32);
2254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2255
2256 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
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_RTSCTS_HTVHT");
2261 goto handle_failure;
2262 }
2263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2264 + sizeof(tHalCfg) + tlvStruct->length) ;
2265
Sachin Ahuja41b61902015-06-18 18:32:15 +05302266
2267 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2268 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2269 tlvStruct->length = sizeof(tANI_U32);
2270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2271
2272 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2273 configDataValue ) != eSIR_SUCCESS)
2274 {
2275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2276 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2277 goto handle_failure;
2278 }
2279 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2280 + sizeof(tHalCfg) + tlvStruct->length) ;
2281
2282 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2283 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2284 tlvStruct->length = sizeof(tANI_U32);
2285 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2286
2287 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2288 configDataValue ) != eSIR_SUCCESS)
2289 {
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2291 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2292 goto handle_failure;
2293 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302294 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2295 + sizeof(tHalCfg) + tlvStruct->length) ;
2296
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302297 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2298 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2299 tlvStruct->length = sizeof(tANI_U32);
2300 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2301
2302 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2303 configDataValue ) != eSIR_SUCCESS)
2304 {
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2306 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2307 goto handle_failure;
2308 }
2309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2310 + sizeof(tHalCfg) + tlvStruct->length) ;
2311
2312 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2313 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2314 tlvStruct->length = sizeof(tANI_U32);
2315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2316
2317 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2318 configDataValue ) != eSIR_SUCCESS)
2319 {
2320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2321 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2322 goto handle_failure;
2323 }
2324 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2325 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302326
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302327 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2328 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2329 tlvStruct->length = sizeof(tANI_U32);
2330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2331
2332 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2333 configDataValue ) != eSIR_SUCCESS)
2334 {
2335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2336 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2337 goto handle_failure;
2338 }
2339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2340 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302341 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2342 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2343 tlvStruct->length = sizeof(tANI_U32);
2344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2345 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2346 configDataValue ) != eSIR_SUCCESS)
2347 {
2348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2349 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2350 goto handle_failure;
2351 }
2352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2353 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302354
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302355 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2356 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2357 tlvStruct->length = sizeof(tANI_U32);
2358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2359
2360 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2361 configDataValue ) != eSIR_SUCCESS)
2362 {
2363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2364 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2365 goto handle_failure;
2366 }
2367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2368 + sizeof(tHalCfg) + tlvStruct->length) ;
2369
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302370 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2371 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2372 tlvStruct->length = sizeof(tANI_U32);
2373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2374
2375 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2376 configDataValue ) != eSIR_SUCCESS)
2377 {
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2379 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2380 goto handle_failure;
2381 }
2382 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2383 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302384
2385 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2386 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2387 tlvStruct->length = sizeof(tANI_U32);
2388 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2389
2390 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2391 configDataValue ) != eSIR_SUCCESS)
2392 {
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2394 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2395 goto handle_failure;
2396 }
2397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2398 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302399 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2400 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2401 tlvStruct->length = sizeof(tANI_U32);
2402 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2403
2404 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2405 configDataValue ) != eSIR_SUCCESS)
2406 {
2407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2408 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2409 goto handle_failure;
2410 }
2411 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2412 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302413
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302415
2416 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2417 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2418 tlvStruct->length = sizeof(tANI_U32);
2419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2420
2421 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2422 configDataValue ) != eSIR_SUCCESS)
2423 {
2424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2425 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2426 goto handle_failure;
2427 }
2428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2429 + sizeof(tHalCfg) + tlvStruct->length) ;
Anurag Chouhana9116af2016-11-23 00:03:08 +05302430
2431 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
2432 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
2433 tlvStruct->length = sizeof(tANI_U32);
2434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2435 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
2436 != eSIR_SUCCESS)
2437 {
2438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2439 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
2440 goto handle_failure;
2441 }
2442
2443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2444 + sizeof(tHalCfg) + tlvStruct->length);
2445
2446 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
2447 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
2448 tlvStruct->length = sizeof(tANI_U32);
2449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2450 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
2451 != eSIR_SUCCESS)
2452 {
2453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2454 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
2455 goto handle_failure;
2456 }
2457
2458 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2459 + sizeof(tHalCfg) + tlvStruct->length);
2460
Jeff Johnson295189b2012-06-20 16:38:30 -07002461#ifdef WLAN_DEBUG
2462 {
2463 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2465 "****** Dumping CFG TLV ***** ");
2466 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2467 {
2468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2469 "%02x %02x %02x %02x %02x %02x %02x %02x",
2470 tlvStructStart[i],
2471 tlvStructStart[i+1],
2472 tlvStructStart[i+2],
2473 tlvStructStart[i+3],
2474 tlvStructStart[i+4],
2475 tlvStructStart[i+5],
2476 tlvStructStart[i+6],
2477 tlvStructStart[i+7]);
2478 }
2479 /* Dump the bytes in the last line*/
2480 for (; i < wdiStartParams->usConfigBufferLen; i++)
2481 {
2482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2483 "%02x ",tlvStructStart[i]);
2484 }
2485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2486 "**************************** ");
2487 }
2488#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490handle_failure:
2491 vos_mem_free(configParam);
2492 return VOS_STATUS_E_FAILURE;
2493}
Anurag Chouhan83026002016-12-13 22:46:21 +05302494
2495#ifdef DHCP_SERVER_OFFLOAD
2496/**
2497 * wda_dhcp_server_offload_rsp_callback() - response to the dhcp server offload
2498 * @wdi_rsp: pointer to the dhcp server offload response
2499 * @user_data: pointer to user data
2500 *
2501 * Return: None
2502 */
2503void wda_dhcp_server_offload_rsp_callback(wdi_dhcp_server_offload_rsp_param_t*
2504 wdi_rsp,
2505 void* user_data)
2506{
2507 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2508 sir_dhcp_srv_offload_info_t *dhcp_srv_offload_info;
2509 VOS_STATUS status;
2510
2511 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2512 "<------ %s " ,__func__);
2513
2514 if(NULL == wda_params)
2515 {
2516 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2517 "%s: pWdaParams received NULL", __func__);
2518 VOS_ASSERT(0);
2519 return;
2520 }
2521
2522 if(NULL == wda_params->wdaMsgParam)
2523 {
2524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2525 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2526 VOS_ASSERT(0);
2527 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2528 vos_mem_free(wda_params);
2529 return;
2530 }
2531
2532 dhcp_srv_offload_info = (sir_dhcp_srv_offload_info_t *)
2533 wda_params->wdaMsgParam;
2534
2535 if(dhcp_srv_offload_info->dhcp_offload_callback)
2536 {
2537 dhcp_srv_offload_info->dhcp_offload_callback(
2538 dhcp_srv_offload_info->dhcp_server_offload_cb_context,
2539 CONVERT_WDI2VOS_STATUS(wdi_rsp->status));
2540 }
2541 else
2542 {
2543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2544 "%s: pFWLoggingInitParams callback is NULL", __func__);
2545 }
2546
2547 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2548 if (status)
2549 {
2550 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2551 "%s: DHCP server offload failed with status=%d", __func__, status);
2552 VOS_ASSERT(0);
2553 }
2554
2555 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2556 vos_mem_free(wda_params->wdaMsgParam);
2557 vos_mem_free(wda_params);
2558 return;
2559}
2560#endif /* DHCP_SERVER_OFFLOAD */
2561
Jeff Johnson295189b2012-06-20 16:38:30 -07002562/*
2563 * FUNCTION: WDA_wdiCompleteCB
2564 * call the voss call back function
2565 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002566void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002567{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002568 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2569 tWDA_CbContext *wdaContext;
2570
2571 if(NULL == pWdaParams)
2572 {
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002574 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002575 VOS_ASSERT(0) ;
2576 return ;
2577 }
2578
2579 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2580
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 if (NULL == wdaContext)
2582 {
2583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002584 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 return ;
2586 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002587
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002589 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002593 vos_mem_free(pWdaParams);
2594
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 if(WDI_STATUS_SUCCESS != status)
2596 {
2597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2598 "WDI stop callback returned failure" );
2599 VOS_ASSERT(0) ;
2600 }
2601 else
2602 {
2603 wdaContext->wdaState = WDA_STOP_STATE;
2604 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002605
Leo Chang9d76f622013-08-23 16:34:52 -07002606 /* FTM Driver stop procedure should be synced.
2607 * Stop and Close will happen on same context */
2608 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2609 {
2610 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2611 {
2612 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2613 "%s: FTM Stop Event Set Fail", __func__);
2614 VOS_ASSERT(0);
2615 }
2616 }
2617
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002619 vos_WDAComplete_cback(wdaContext->pVosContext);
2620
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 return ;
2622}
Jeff Johnson295189b2012-06-20 16:38:30 -07002623/*
2624 * FUNCTION: WDA_stop
2625 * call WDI_stop
2626 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002627VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2628{
2629 WDI_Status wdiStatus;
2630 VOS_STATUS status = VOS_STATUS_SUCCESS;
2631 WDI_StopReqParamsType *wdiStopReq;
2632 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002633 tWDA_ReqParams *pWdaParams ;
2634
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 if (NULL == pWDA)
2636 {
2637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002638 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 VOS_ASSERT(0);
2640 return VOS_STATUS_E_FAILURE;
2641 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002642 if (pWDA->wdiFailed == true)
2643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002645 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002646 return VOS_STATUS_E_ALREADY;
2647 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002648
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 /* FTM mode stay START_STATE */
2650 if( (WDA_READY_STATE != pWDA->wdaState) &&
2651 (WDA_INIT_STATE != pWDA->wdaState) &&
2652 (WDA_START_STATE != pWDA->wdaState) )
2653 {
2654 VOS_ASSERT(0);
2655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 wdiStopReq = (WDI_StopReqParamsType *)
2657 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2658 if(NULL == wdiStopReq)
2659 {
2660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002661 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 VOS_ASSERT(0);
2663 return VOS_STATUS_E_NOMEM;
2664 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002665
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 wdiStopReq->wdiStopReason = reason;
2667 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302668
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2670 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 {
2672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 VOS_ASSERT(0);
2675 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002676 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002678
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002679 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2680 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 {
2682 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002683 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002685
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002686 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2687 pWdaParams->wdaMsgParam = NULL;
2688 pWdaParams->pWdaContext = pWDA;
2689
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 /* call WDI stop */
2691 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002692 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2693
Jeff Johnson295189b2012-06-20 16:38:30 -07002694 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2695 {
2696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2697 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2699 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 status = VOS_STATUS_E_FAILURE;
2701 }
Leo Chang9d76f622013-08-23 16:34:52 -07002702
2703 /* FTM Driver stop procedure should be synced.
2704 * Stop and Close will happen on same context */
2705 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2706 {
2707 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2708 WDI_RESPONSE_TIMEOUT);
2709 if (status != VOS_STATUS_SUCCESS)
2710 {
2711 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2712 "%s: FTM Stop Timepoout", __func__);
2713 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002714 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302715 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 return status;
2718}
Jeff Johnson295189b2012-06-20 16:38:30 -07002719/*
2720 * FUNCTION: WDA_close
2721 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302722 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002723VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2724{
Jeff Johnson43971f52012-07-17 12:26:56 -07002725 VOS_STATUS status = VOS_STATUS_SUCCESS;
2726 WDI_Status wstatus;
2727 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 if (NULL == wdaContext)
2730 {
2731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002732 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 return VOS_STATUS_E_FAILURE;
2734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2736 (WDA_STOP_STATE != wdaContext->wdaState))
2737 {
2738 VOS_ASSERT(0);
2739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002741 wstatus = WDI_Close();
2742 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 {
2744 status = VOS_STATUS_E_FAILURE;
2745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002748 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2749 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 {
2751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002752 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 status = VOS_STATUS_E_FAILURE;
2754 }
2755
Jeff Johnson43971f52012-07-17 12:26:56 -07002756 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002757 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 {
2759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002760 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 status = VOS_STATUS_E_FAILURE;
2762 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002763 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002764 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 {
2766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002767 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 status = VOS_STATUS_E_FAILURE;
2769 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002770 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002771 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 {
2773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002774 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 status = VOS_STATUS_E_FAILURE;
2776 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302777
2778 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
2779
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002781 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002782 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 {
2784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2785 "error in WDA close " );
2786 status = VOS_STATUS_E_FAILURE;
2787 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05302788
Jeff Johnson295189b2012-06-20 16:38:30 -07002789 return status;
2790}
Jeff Johnson295189b2012-06-20 16:38:30 -07002791/*
2792 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2793 * returns 1 if the compiled version is greater than or equal to the input version
2794 */
2795
2796uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2797{
2798 VOS_STATUS status = VOS_STATUS_SUCCESS;
2799 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2800 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002801 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2803 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2804 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2805 (compiledVersion.revision >= revision)))
2806 return 1;
2807 else
2808 return 0;
2809}
Jeff Johnson295189b2012-06-20 16:38:30 -07002810/*
2811 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2812 * returns 1 if the compiled version is greater than or equal to the input version
2813 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002814uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2815{
2816 VOS_STATUS status = VOS_STATUS_SUCCESS;
2817 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2818 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002820 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2821 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2822 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2823 (reportedVersion.revision >= revision)))
2824 return 1;
2825 else
2826 return 0;
2827}
Jeff Johnson295189b2012-06-20 16:38:30 -07002828/*
2829 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2830 * Returns the version of the WCNSS WLAN API with which the HOST
2831 * device driver was compiled
2832 */
2833VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2834 tSirVersionType *pVersion)
2835{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302836 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 if ((NULL == pvosGCtx) || (NULL == pVersion))
2838 {
2839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002840 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 VOS_ASSERT(0);
2842 return VOS_STATUS_E_FAILURE;
2843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2845 if (NULL == pWDA )
2846 {
2847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002848 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 VOS_ASSERT(0);
2850 return VOS_STATUS_E_FAILURE;
2851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 *pVersion = pWDA->wcnssWlanCompiledVersion;
2853 return VOS_STATUS_SUCCESS;
2854}
Jeff Johnson295189b2012-06-20 16:38:30 -07002855/*
2856 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2857 * Returns the version of the WCNSS WLAN API with which the WCNSS
2858 * device driver was compiled
2859 */
2860VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2861 tSirVersionType *pVersion)
2862{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302863 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 if ((NULL == pvosGCtx) || (NULL == pVersion))
2865 {
2866 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002867 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 VOS_ASSERT(0);
2869 return VOS_STATUS_E_FAILURE;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2872 if (NULL == pWDA )
2873 {
2874 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002875 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 VOS_ASSERT(0);
2877 return VOS_STATUS_E_FAILURE;
2878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 *pVersion = pWDA->wcnssWlanReportedVersion;
2880 return VOS_STATUS_SUCCESS;
2881}
Jeff Johnson295189b2012-06-20 16:38:30 -07002882/*
2883 * FUNCTION: WDA_GetWcnssSoftwareVersion
2884 * Returns the WCNSS Software version string
2885 */
2886VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2887 tANI_U8 *pVersion,
2888 tANI_U32 versionBufferSize)
2889{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302890 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002892 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 if ((NULL == pvosGCtx) || (NULL == pVersion))
2894 {
2895 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_ASSERT(0);
2898 return VOS_STATUS_E_FAILURE;
2899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2901 if (NULL == pWDA )
2902 {
2903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002904 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 VOS_ASSERT(0);
2906 return VOS_STATUS_E_FAILURE;
2907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2909 return VOS_STATUS_SUCCESS;
2910}
Jeff Johnson295189b2012-06-20 16:38:30 -07002911/*
2912 * FUNCTION: WDA_GetWcnssHardwareVersion
2913 * Returns the WCNSS Hardware version string
2914 */
2915VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2916 tANI_U8 *pVersion,
2917 tANI_U32 versionBufferSize)
2918{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302919 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002921 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 if ((NULL == pvosGCtx) || (NULL == pVersion))
2923 {
2924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002925 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 VOS_ASSERT(0);
2927 return VOS_STATUS_E_FAILURE;
2928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2930 if (NULL == pWDA )
2931 {
2932 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002933 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 VOS_ASSERT(0);
2935 return VOS_STATUS_E_FAILURE;
2936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2938 return VOS_STATUS_SUCCESS;
2939}
Jeff Johnson295189b2012-06-20 16:38:30 -07002940/*
2941 * FUNCTION: WDA_WniCfgDnld
2942 * Trigger CFG Download
2943 */
2944VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2945{
2946 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302947 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002948
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 if (NULL == pMac )
2950 {
2951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002952 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 VOS_ASSERT(0);
2954 return VOS_STATUS_E_FAILURE;
2955 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302956 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 return vosStatus;
2958}
Jeff Johnson295189b2012-06-20 16:38:30 -07002959/* -----------------------------------------------------------------
2960 * WDI interface
2961 * -----------------------------------------------------------------
2962 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002963/*
2964 * FUNCTION: WDA_suspendDataTxCallback
2965 * call back function called from TL after suspend Transmission
2966 */
2967VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2968 v_U8_t* ucSTAId,
2969 VOS_STATUS vosStatus)
2970{
2971 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002973 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 if (NULL == pWDA )
2975 {
2976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002977 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 VOS_ASSERT(0);
2979 return VOS_STATUS_E_FAILURE;
2980 }
2981 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2982 {
2983 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2984 }
2985 else
2986 {
2987 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 /* Trigger the event to bring the WDA TL suspend function to come
2990 * out of wait*/
2991 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2992 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2993 {
2994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002995 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 /* If TL suspended had timedout before this callback was called, resume back
2998 * TL.*/
2999 if (pWDA->txSuspendTimedOut)
3000 {
3001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003002 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 WDA_ResumeDataTx(pWDA);
3004 pWDA->txSuspendTimedOut = FALSE;
3005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 return VOS_STATUS_SUCCESS;
3007}
Jeff Johnson295189b2012-06-20 16:38:30 -07003008/*
3009 * FUNCTION: WDA_suspendDataTx
3010 * Update TL to suspend the data Transmission
3011 */
3012VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
3013{
3014 VOS_STATUS status = VOS_STATUS_E_FAILURE;
3015 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003016
3017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003018 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 if (pWDA->txSuspendTimedOut)
3021 {
3022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003023 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 return status;
3025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 /* Reset the event to be not signalled */
3027 status = vos_event_reset(&pWDA->suspendDataTxEvent);
3028 if(!VOS_IS_STATUS_SUCCESS(status))
3029 {
3030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003031 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 return VOS_STATUS_E_FAILURE;
3033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07003035 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 WDA_SuspendDataTxCallback);
3037 if(status != VOS_STATUS_SUCCESS)
3038 {
3039 return status;
3040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 /* Wait for the event to be set by the TL, to get the response of
3042 * suspending the TX queues, this event should be set by the Callback
3043 * function called by TL*/
3044 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
3045 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
3046 if(!VOS_IS_STATUS_SUCCESS(status))
3047 {
3048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3049 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003050 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 /* Set this flag to true when TL suspend times out, so that when TL
3052 * suspend eventually happens and calls the callback, TL can be resumed
3053 * right away by looking at this flag when true.*/
3054 pWDA->txSuspendTimedOut = TRUE;
3055 }
3056 else
3057 {
3058 pWDA->txSuspendTimedOut = FALSE;
3059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
3061 {
3062 status = VOS_STATUS_SUCCESS;
3063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 return status;
3065}
Jeff Johnson295189b2012-06-20 16:38:30 -07003066/*
3067 * FUNCTION: WDA_resumeDataTx
3068 * Update TL to resume the data Transmission
3069 */
3070VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3071{
3072 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073
3074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003075 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003076
3077 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 return status;
3079}
Jeff Johnson295189b2012-06-20 16:38:30 -07003080/*
3081 * FUNCTION: WDA_InitScanReqCallback
3082 * Trigger Init SCAN callback
3083 */
3084void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3085{
3086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3087 tWDA_CbContext *pWDA;
3088 tInitScanParams *pWDA_ScanParam ;
3089 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003091 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 if(NULL == pWdaParams)
3093 {
3094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003095 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 VOS_ASSERT(0) ;
3097 return ;
3098 }
3099 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3100 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 if(NULL == pWDA_ScanParam)
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003105 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3107 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 return ;
3109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 if(WDI_STATUS_SUCCESS != wdiStatus)
3111 {
3112 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 if(VOS_STATUS_SUCCESS != status)
3114 {
3115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003116 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 }
3118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 /* free WDI command buffer */
3120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303122
3123
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003125 /* without converting the Status to Failure or Success Just
3126 pass the same status to lim */
3127 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 /* send SCAN RSP message back to PE */
3129 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 return ;
3131}
3132
3133/*
3134 * FUNCTION: WDA_ProcessInitScanReq
3135 * Trigger Init SCAN in DAL
3136 */
3137VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3138 tInitScanParams *initScanParams)
3139{
3140 WDI_Status status = WDI_STATUS_SUCCESS ;
3141 WDI_InitScanReqParamsType *wdiInitScanParam =
3142 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3143 sizeof(WDI_InitScanReqParamsType)) ;
3144 tWDA_ReqParams *pWdaParams;
3145 tANI_U8 i = 0;
3146
3147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003148 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 if(NULL == wdiInitScanParam)
3150 {
3151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003152 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 VOS_ASSERT(0);
3154 return VOS_STATUS_E_NOMEM;
3155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3157 if(NULL == pWdaParams)
3158 {
3159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 VOS_ASSERT(0);
3162 vos_mem_free(wdiInitScanParam);
3163 return VOS_STATUS_E_NOMEM;
3164 }
3165
3166 /* Copy init Scan params to WDI structure */
3167 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3168 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3169 sizeof(tSirMacAddr)) ;
3170 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3171 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3172 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3174 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3176 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3178 {
3179 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3180 initScanParams->scanEntry.bssIdx[i] ;
3181 }
3182
3183 /* if Frame length, copy macMgmtHdr or WDI structure */
3184 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3185 {
3186 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3187 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3188 }
3189 wdiInitScanParam->wdiReqStatusCB = NULL ;
3190
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 /* Store Init Req pointer, as this will be used for response */
3192 pWdaParams->pWdaContext = pWDA;
3193 pWdaParams->wdaMsgParam = initScanParams;
3194 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 /* first try to suspend TX */
3196 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 if(WDI_STATUS_SUCCESS != status)
3198 {
3199 goto handleWdiFailure;
3200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 /* call DAL API to pass init scan request to DAL */
3202 status = WDI_InitScanReq(wdiInitScanParam,
3203 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 if(IS_WDI_STATUS_FAILURE(status))
3205 {
3206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3207 "error in WDA Init Scan, Resume Tx " );
3208 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 VOS_ASSERT(0) ;
3210
3211 goto handleWdiFailure;
3212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214handleWdiFailure:
3215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3216 "Failure in WDI Api, free all the memory " );
3217 /* free WDI command buffer */
3218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3219 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 /* send Failure to PE */
3221 initScanParams->status = eSIR_FAILURE ;
3222 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 return CONVERT_WDI2VOS_STATUS(status) ;
3224}
3225
Jeff Johnson295189b2012-06-20 16:38:30 -07003226/*
3227 * FUNCTION: WDA_StartScanReqCallback
3228 * send Start SCAN RSP back to PE
3229 */
3230void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3231 void* pUserData)
3232{
3233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3234 tWDA_CbContext *pWDA;
3235 tStartScanParams *pWDA_ScanParam;
3236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 if(NULL == pWdaParams)
3239 {
3240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 VOS_ASSERT(0) ;
3243 return ;
3244 }
3245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3246 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 if(NULL == pWDA_ScanParam)
3248 {
3249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003252 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 return ;
3254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003260 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 return ;
3262 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3264 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003265
Jeff Johnson295189b2012-06-20 16:38:30 -07003266
3267 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003268 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 /* send SCAN RSP message back to PE */
3270 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 return ;
3272}
3273
Jeff Johnson295189b2012-06-20 16:38:30 -07003274/*
3275 * FUNCTION: WDA_ProcessStartScanReq
3276 * Trigger start SCAN in WDI
3277 */
3278VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3279 tStartScanParams *startScanParams)
3280{
3281 WDI_Status status = WDI_STATUS_SUCCESS;
3282 WDI_StartScanReqParamsType *wdiStartScanParams =
3283 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3284 sizeof(WDI_StartScanReqParamsType)) ;
3285 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003287 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 if(NULL == wdiStartScanParams)
3289 {
3290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 VOS_ASSERT(0);
3293 return VOS_STATUS_E_NOMEM;
3294 }
3295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3296 if(NULL == pWdaParams)
3297 {
3298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_ASSERT(0);
3301 vos_mem_free(wdiStartScanParams);
3302 return VOS_STATUS_E_NOMEM;
3303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 /* Copy init Scan params to WDI structure */
3305 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3306 wdiStartScanParams->wdiReqStatusCB = NULL ;
3307
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 /* Store Init Req pointer, as this will be used for response */
3309 /* store Params pass it to WDI */
3310 pWdaParams->pWdaContext = pWDA;
3311 pWdaParams->wdaMsgParam = startScanParams;
3312 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 /* call DAL API to pass init scan request to DAL */
3314 status = WDI_StartScanReq(wdiStartScanParams,
3315 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 /* failure returned by WDI API */
3317 if(IS_WDI_STATUS_FAILURE(status))
3318 {
3319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3320 "Failure in Start Scan WDI API, free all the memory "
3321 "It should be due to previous abort scan." );
3322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3323 vos_mem_free(pWdaParams) ;
3324 startScanParams->status = eSIR_FAILURE ;
3325 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 return CONVERT_WDI2VOS_STATUS(status) ;
3328}
Jeff Johnson295189b2012-06-20 16:38:30 -07003329/*
3330 * FUNCTION: WDA_EndScanReqCallback
3331 * END SCAN callback
3332 */
3333void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3334{
3335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3336 tWDA_CbContext *pWDA;
3337 tEndScanParams *endScanParam;
3338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003339 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 if(NULL == pWdaParams)
3341 {
3342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 VOS_ASSERT(0) ;
3345 return ;
3346 }
3347 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3348 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 if(NULL == endScanParam)
3350 {
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003352 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3355 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 return ;
3357 }
3358
3359 /* Free WDI command buffer */
3360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3361 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003363 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 /* send response back to PE */
3365 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3366 return ;
3367}
3368
Jeff Johnson295189b2012-06-20 16:38:30 -07003369/*
3370 * FUNCTION: WDA_ProcessEndScanReq
3371 * Trigger END SCAN in WDI
3372 */
3373VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3374 tEndScanParams *endScanParams)
3375{
3376 WDI_Status status = WDI_STATUS_SUCCESS;
3377 WDI_EndScanReqParamsType *wdiEndScanParams =
3378 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3379 sizeof(WDI_EndScanReqParamsType)) ;
3380 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 if(NULL == wdiEndScanParams)
3384 {
3385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 VOS_ASSERT(0);
3388 return VOS_STATUS_E_NOMEM;
3389 }
3390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3391 if(NULL == pWdaParams)
3392 {
3393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 VOS_ASSERT(0);
3396 vos_mem_free(wdiEndScanParams);
3397 return VOS_STATUS_E_NOMEM;
3398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 /* Copy init Scan params to WDI structure */
3400 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3401 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 /* Store Init Req pointer, as this will be used for response */
3403 /* store Params pass it to WDI */
3404 pWdaParams->pWdaContext = pWDA;
3405 pWdaParams->wdaMsgParam = endScanParams;
3406 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 /* call DAL API to pass init scan request to DAL */
3408 status = WDI_EndScanReq(wdiEndScanParams,
3409 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 if(IS_WDI_STATUS_FAILURE(status))
3411 {
3412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3413 "Failure in End Scan WDI API, free all the memory "
3414 "It should be due to previous abort scan." );
3415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3416 vos_mem_free(pWdaParams) ;
3417 endScanParams->status = eSIR_FAILURE ;
3418 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 return CONVERT_WDI2VOS_STATUS(status) ;
3421}
Jeff Johnson295189b2012-06-20 16:38:30 -07003422/*
3423 * FUNCTION: WDA_FinishScanReqCallback
3424 * Trigger Finish SCAN callback
3425 */
3426void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3427{
3428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3429 tWDA_CbContext *pWDA;
3430 tFinishScanParams *finishScanParam;
3431 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003433 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 if(NULL == pWdaParams)
3435 {
3436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003437 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 VOS_ASSERT(0) ;
3439 return ;
3440 }
3441
3442 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3443 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 if(NULL == finishScanParam)
3445 {
3446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003447 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3450 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003451 return ;
3452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3454 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 /*
3456 * Now Resume TX, if we reached here means, TX is already suspended, we
3457 * have to resume it unconditionaly
3458 */
3459 status = WDA_ResumeDataTx(pWDA) ;
3460
3461 if(VOS_STATUS_SUCCESS != status)
3462 {
3463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003464 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003466 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3468 return ;
3469}
Jeff Johnson295189b2012-06-20 16:38:30 -07003470/*
3471 * FUNCTION: WDA_ProcessFinshScanReq
3472 * Trigger Finish SCAN in WDI
3473 */
3474VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3475 tFinishScanParams *finishScanParams)
3476{
3477 WDI_Status status = WDI_STATUS_SUCCESS;
3478 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3479 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3480 sizeof(WDI_FinishScanReqParamsType)) ;
3481 tWDA_ReqParams *pWdaParams ;
3482 tANI_U8 i = 0;
3483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003484 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 if(NULL == wdiFinishScanParams)
3486 {
3487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 VOS_ASSERT(0);
3490 return VOS_STATUS_E_NOMEM;
3491 }
3492 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3493 if(NULL == pWdaParams)
3494 {
3495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003496 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 VOS_ASSERT(0);
3498 vos_mem_free(wdiFinishScanParams);
3499 return VOS_STATUS_E_NOMEM;
3500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 /* Copy init Scan params to WDI structure */
3502 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3503 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3504 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3506 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3507 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3508 finishScanParams->frameLength ;
3509 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3510 finishScanParams->currentOperChannel ;
3511 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3512 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3513 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3515 {
3516 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3517 finishScanParams->scanEntry.bssIdx[i] ;
3518 }
3519
3520
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 /* if Frame length, copy macMgmtHdr ro WDI structure */
3522 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3523 {
3524 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3525 &finishScanParams->macMgmtHdr,
3526 sizeof(WDI_MacMgmtHdr)) ;
3527 }
3528 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 /* Store Init Req pointer, as this will be used for response */
3530 /* store Params pass it to WDI */
3531 pWdaParams->pWdaContext = pWDA;
3532 pWdaParams->wdaMsgParam = finishScanParams;
3533 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 /* call DAL API to pass init scan request to DAL */
3535 status = WDI_FinishScanReq(wdiFinishScanParams,
3536 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003537
Jeff Johnson295189b2012-06-20 16:38:30 -07003538
3539 /*
3540 * WDI API returns failure..
3541 */
3542 if(IS_WDI_STATUS_FAILURE( status))
3543 {
3544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3545 "Failure in Finish Scan WDI API, free all the memory " );
3546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3547 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 finishScanParams->status = eSIR_FAILURE ;
3549 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 return CONVERT_WDI2VOS_STATUS(status) ;
3552}
Jeff Johnson295189b2012-06-20 16:38:30 -07003553/*---------------------------------------------------------------------
3554 * ASSOC API's
3555 *---------------------------------------------------------------------
3556 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003557/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303558 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 * Trigger Init SCAN callback
3560 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303561void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003562{
3563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3564 tWDA_CbContext *pWDA;
3565 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003567 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 if(NULL == pWdaParams)
3569 {
3570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003571 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 VOS_ASSERT(0) ;
3573 return ;
3574 }
3575 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3576 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3578 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 /* reset macBSSID */
3580 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 /* reset macSTASelf */
3582 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003583 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 return ;
3586}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303587
3588/*
3589 * FUNCTION: WDA_JoinReqCallback
3590 * Free memory and send SWITCH CHANNEL RSP back to PE.
3591 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3592 */
3593void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3594{
3595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3596 tWDA_CbContext *pWDA;
3597 tSwitchChannelParams *joinReqParam;
3598
3599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3600 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3601
3602 if(NULL == pWdaParams)
3603 {
3604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3605 "%s: pWdaParams received NULL", __func__);
3606 VOS_ASSERT(0);
3607 return;
3608 }
3609
3610 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3611 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3612 joinReqParam->status = wdiStatus;
3613
3614 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3615 {
3616 /* reset macBSSID */
3617 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3618 /* reset macSTASelf */
3619 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3620
3621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3622 vos_mem_free(pWdaParams);
3623 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3624 }
3625
3626 return;
3627}
3628
Jeff Johnson295189b2012-06-20 16:38:30 -07003629/*
3630 * FUNCTION: WDA_ProcessJoinReq
3631 * Trigger Join REQ in WDI
3632 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003633VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3634 tSwitchChannelParams* joinReqParam)
3635{
3636 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 WDI_JoinReqParamsType *wdiJoinReqParam =
3638 (WDI_JoinReqParamsType *)vos_mem_malloc(
3639 sizeof(WDI_JoinReqParamsType)) ;
3640 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003642 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 if(NULL == wdiJoinReqParam)
3644 {
3645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003646 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003648 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 return VOS_STATUS_E_NOMEM;
3650 }
3651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3652 if(NULL == pWdaParams)
3653 {
3654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 VOS_ASSERT(0);
3657 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003658 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 return VOS_STATUS_E_NOMEM;
3660 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003661
3662 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3663 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3664 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3665 {
3666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3667 "%s: received join request when BSSID or self-STA is NULL "
3668 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003669 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003670 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3671 VOS_ASSERT(0);
3672 vos_mem_free(wdiJoinReqParam);
3673 vos_mem_free(pWdaParams);
3674 joinReqParam->status = eSIR_FAILURE ;
3675 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3676 return VOS_STATUS_E_INVAL;
3677 }
3678
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 /* copy the BSSID for pWDA */
3680 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3681 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3683 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3685 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003686#ifdef WLAN_FEATURE_VOWIFI
3687 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3688 joinReqParam->maxTxPower ;
3689#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3691 joinReqParam->localPowerConstraint ;
3692#endif
3693 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3694 joinReqParam->secondaryChannelOffset ;
3695 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3696
Sachin Ahuja935eda782014-07-30 14:57:41 +05303697 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3698 wdiJoinReqParam->pUserData = pWdaParams;
3699
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 /* Store Init Req pointer, as this will be used for response */
3701 /* store Params pass it to WDI */
3702 pWdaParams->pWdaContext = pWDA;
3703 pWdaParams->wdaMsgParam = joinReqParam;
3704 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303706 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 if(IS_WDI_STATUS_FAILURE(status))
3708 {
3709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3710 "Failure in Join WDI API, free all the memory " );
3711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3712 vos_mem_free(pWdaParams) ;
3713 joinReqParam->status = eSIR_FAILURE ;
3714 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 return CONVERT_WDI2VOS_STATUS(status) ;
3717}
Jeff Johnson295189b2012-06-20 16:38:30 -07003718/*
3719 * FUNCTION: WDA_SwitchChannelReqCallback
3720 * send Switch channel RSP back to PE
3721 */
3722void WDA_SwitchChannelReqCallback(
3723 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3724{
3725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3726 tWDA_CbContext *pWDA;
3727 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003729 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003730 if(NULL == pWdaParams)
3731 {
3732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003733 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003734 VOS_ASSERT(0) ;
3735 return ;
3736 }
3737 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3738 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3739
3740#ifdef WLAN_FEATURE_VOWIFI
3741 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3742#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3744 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003746 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 return ;
3749}
Jeff Johnson295189b2012-06-20 16:38:30 -07003750/*
3751 * FUNCTION: WDA_ProcessChannelSwitchReq
3752 * Request to WDI to switch channel REQ params.
3753 */
3754VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3755 tSwitchChannelParams *pSwitchChanParams)
3756{
3757 WDI_Status status = WDI_STATUS_SUCCESS ;
3758 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3759 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3760 sizeof(WDI_SwitchChReqParamsType)) ;
3761 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 if(NULL == wdiSwitchChanParam)
3765 {
3766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 VOS_ASSERT(0);
3769 return VOS_STATUS_E_NOMEM;
3770 }
3771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3772 if(NULL == pWdaParams)
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 VOS_ASSERT(0);
3777 vos_mem_free(wdiSwitchChanParam);
3778 return VOS_STATUS_E_NOMEM;
3779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3781#ifndef WLAN_FEATURE_VOWIFI
3782 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3783 pSwitchChanParams->localPowerConstraint;
3784#endif
3785 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3786 pSwitchChanParams->secondaryChannelOffset;
3787 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 /* Store req pointer, as this will be used for response */
3789 /* store Params pass it to WDI */
3790 pWdaParams->pWdaContext = pWDA;
3791 pWdaParams->wdaMsgParam = pSwitchChanParams;
3792 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793#ifdef WLAN_FEATURE_VOWIFI
3794 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3795 = pSwitchChanParams->maxTxPower;
3796 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3797 pSwitchChanParams ->selfStaMacAddr,
3798 sizeof(tSirMacAddr));
3799#endif
3800 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3801 pSwitchChanParams->bssId,
3802 sizeof(tSirMacAddr));
3803
3804 status = WDI_SwitchChReq(wdiSwitchChanParam,
3805 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003806 if(IS_WDI_STATUS_FAILURE(status))
3807 {
3808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3809 "Failure in process channel switch Req WDI API, free all the memory " );
3810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3811 vos_mem_free(pWdaParams) ;
3812 pSwitchChanParams->status = eSIR_FAILURE ;
3813 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 return CONVERT_WDI2VOS_STATUS(status) ;
3816}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003817
3818/*
3819 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3820 * send Switch channel RSP back to PE
3821 */
3822void WDA_SwitchChannelReqCallback_V1(
3823 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3824 void* pUserData)
3825{
3826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3827 tWDA_CbContext *pWDA;
3828 tSwitchChannelParams *pSwitchChanParams;
3829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3830 "<------ %s " ,__func__);
3831
3832 if (NULL == pWdaParams)
3833 {
3834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3835 "%s: pWdaParams received NULL", __func__);
3836 VOS_ASSERT(0);
3837 return ;
3838 }
3839 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3840 pSwitchChanParams =
3841 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3842 pSwitchChanParams->channelSwitchSrc =
3843 wdiSwitchChanRsp->channelSwitchSrc;
3844#ifdef WLAN_FEATURE_VOWIFI
3845 pSwitchChanParams->txMgmtPower =
3846 wdiSwitchChanRsp->ucTxMgmtPower;
3847#endif
3848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3849 vos_mem_free(pWdaParams);
3850 pSwitchChanParams->status =
3851 wdiSwitchChanRsp->wdiStatus ;
3852 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3853 (void *)pSwitchChanParams , 0);
3854 return;
3855}
3856
3857/*
3858 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3859 * Request to WDI to switch channel REQ params.
3860 */
3861VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3862 tSwitchChannelParams *pSwitchChanParams)
3863{
3864 WDI_Status status = WDI_STATUS_SUCCESS ;
3865 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3866 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3867 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3868 tWDA_ReqParams *pWdaParams ;
3869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3870 "------> %s " ,__func__);
3871 if (NULL == wdiSwitchChanParam)
3872 {
3873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3874 "%s: VOS MEM Alloc Failure", __func__);
3875 VOS_ASSERT(0);
3876 return VOS_STATUS_E_NOMEM;
3877 }
3878 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3879 if (NULL == pWdaParams)
3880 {
3881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3882 "%s: VOS MEM Alloc Failure", __func__);
3883 VOS_ASSERT(0);
3884 vos_mem_free(wdiSwitchChanParam);
3885 return VOS_STATUS_E_NOMEM;
3886 }
3887 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3888 pSwitchChanParams->channelSwitchSrc;
3889
3890 wdiSwitchChanParam->wdiChInfo.ucChannel =
3891 pSwitchChanParams->channelNumber;
3892#ifndef WLAN_FEATURE_VOWIFI
3893 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3894 pSwitchChanParams->localPowerConstraint;
3895#endif
3896 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3897 pSwitchChanParams->secondaryChannelOffset;
3898 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3899 /* Store req pointer, as this will be used for response */
3900 /* store Params pass it to WDI */
3901 pWdaParams->pWdaContext = pWDA;
3902 pWdaParams->wdaMsgParam = pSwitchChanParams;
3903 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3904#ifdef WLAN_FEATURE_VOWIFI
3905 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3906 pSwitchChanParams->maxTxPower;
3907 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3908 pSwitchChanParams ->selfStaMacAddr,
3909 sizeof(tSirMacAddr));
3910#endif
3911 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3912 pSwitchChanParams->bssId,
3913 sizeof(tSirMacAddr));
3914
3915 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3916 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3917 pWdaParams);
3918 if (IS_WDI_STATUS_FAILURE(status))
3919 {
3920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3921 "Failure in process channel switch Req WDI "
3922 "API, free all the memory " );
3923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3924 vos_mem_free(pWdaParams) ;
3925 pSwitchChanParams->status = eSIR_FAILURE ;
3926 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3927 (void *)pSwitchChanParams, 0) ;
3928 }
3929 return CONVERT_WDI2VOS_STATUS(status) ;
3930}
3931
Jeff Johnson295189b2012-06-20 16:38:30 -07003932/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303933 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 * config BSS Req Callback, called by WDI
3935 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303936void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 ,void* pUserData)
3938{
3939 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3940 tWDA_CbContext *pWDA;
3941 tAddBssParams *configBssReqParam;
3942 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003944 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 if(NULL == pWdaParams)
3946 {
3947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003948 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003949 VOS_ASSERT(0) ;
3950 return ;
3951 }
3952 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3953 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3954 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003955 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003956 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003957 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3958 {
3959 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3960 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3962 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3963 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3964
3965 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3966 {
3967 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3968 {
3969 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3970 staConfigBssParam->staType = STA_ENTRY_BSSID;
3971 }
3972 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3973 (staConfigBssParam->staType == STA_ENTRY_SELF))
3974 {
3975 /* This is the 1st add BSS Req for the BTAMP STA */
3976 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3977 staConfigBssParam->staType = STA_ENTRY_BSSID;
3978 }
3979 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3980 (staConfigBssParam->staType == STA_ENTRY_PEER))
3981 {
3982 /* This is the 2nd ADD BSS Request that is sent
3983 * on the BTAMP STA side. The Sta type is
3984 * set to STA_ENTRY_PEER here.*/
3985 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3986 }
3987 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3988 (staConfigBssParam->staType == STA_ENTRY_SELF))
3989 {
3990 /* statype is already set by PE.
3991 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3992 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3993 staConfigBssParam->staType = STA_ENTRY_BSSID;
3994 }
3995 else
3996 {
3997 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3998 staConfigBssParam->staType = STA_ENTRY_PEER;
3999 }
4000 }
4001 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
4002 {
4003 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
4004 staConfigBssParam->staType = STA_ENTRY_SELF;
4005 }
4006 else
4007 {
4008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4009 "Invalid operation mode specified");
4010 VOS_ASSERT(0);
4011 }
4012
4013 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004016 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
4018 sizeof(tSirMacAddr));
4019 staConfigBssParam->txChannelWidthSet =
4020 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
4022 staConfigBssParam->htCapable)
4023 {
4024 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
4025 wdiConfigBssRsp->ucBSSIdx;
4026 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
4027 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05304028 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
4029 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
4032 wdiConfigBssRsp->ucBSSIdx,
4033 wdiConfigBssRsp->ucSTAIdx))
4034 {
4035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004036 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 VOS_ASSERT(0) ;
4038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
4040 {
4041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004042 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 VOS_ASSERT(0) ;
4044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004045#ifdef WLAN_FEATURE_VOWIFI
4046 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
4047#endif
4048 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304049 else
4050 {
4051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4052 "%s: Failure with status %d", __func__,
4053 wdiConfigBssRsp->wdiStatus);
4054 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4055 WLAN_LOG_INDICATOR_HOST_DRIVER,
4056 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4057 FALSE, TRUE);
4058 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304059 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4060 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4062 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004063 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 return ;
4065}
Jeff Johnson295189b2012-06-20 16:38:30 -07004066/*
4067 * FUNCTION: WDA_UpdateEdcaParamsForAC
4068 * Update WDI EDCA params with PE edca params
4069 */
4070void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4071 WDI_EdcaParamRecord *wdiEdcaParam,
4072 tSirMacEdcaParamRecord *macEdcaParam)
4073{
4074 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4075 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4076 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4077 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4078 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4079 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4080}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304081void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4082 void* pUserData)
4083{
4084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4085 tWDA_CbContext *pWDA;
4086 tAddBssParams *addBssParams;
4087
4088 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4089 "<------ %s, wdiStatus: %d",
4090 __func__, wdiStatus);
4091
4092 if (NULL == pWdaParams)
4093 {
4094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4095 "%s: Invalid pWdaParams pointer", __func__);
4096 VOS_ASSERT(0);
4097 return;
4098 }
4099
4100 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4101 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4102
4103 addBssParams->status = wdiStatus;
4104
4105 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4106 {
4107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4108 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304109 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4110 WLAN_LOG_INDICATOR_HOST_DRIVER,
4111 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4112 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304113 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4114 }
4115
4116 return ;
4117}
4118
Jeff Johnson295189b2012-06-20 16:38:30 -07004119/*
4120 * FUNCTION: WDA_ProcessConfigBssReq
4121 * Configure BSS before starting Assoc with AP
4122 */
4123VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4124 tAddBssParams* configBssReqParam)
4125{
4126 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304127 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004130 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304131 if (NULL == configBssReqParam)
4132 {
4133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4134 "%s: configBssReqParam is NULL", __func__);
4135 return VOS_STATUS_E_INVAL;
4136 }
4137
4138 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4139 sizeof(WDI_ConfigBSSReqParamsType)) ;
4140
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 if(NULL == wdiConfigBssReqParam)
4142 {
4143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 VOS_ASSERT(0);
4146 return VOS_STATUS_E_NOMEM;
4147 }
4148 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4149 if(NULL == pWdaParams)
4150 {
4151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 VOS_ASSERT(0);
4154 vos_mem_free(wdiConfigBssReqParam);
4155 return VOS_STATUS_E_NOMEM;
4156 }
Kiran4a17ebe2013-01-31 10:43:43 -08004157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4158 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4161 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304162 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4163 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 /* Store Init Req pointer, as this will be used for response */
4165 /* store Params pass it to WDI */
4166 pWdaParams->pWdaContext = pWDA;
4167 pWdaParams->wdaMsgParam = configBssReqParam;
4168 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304170 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 if(IS_WDI_STATUS_FAILURE(status))
4172 {
4173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4174 "Failure in Config BSS WDI API, free all the memory " );
4175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4176 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 return CONVERT_WDI2VOS_STATUS(status) ;
4181}
Jeff Johnson295189b2012-06-20 16:38:30 -07004182#ifdef ENABLE_HAL_COMBINED_MESSAGES
4183/*
4184 * FUNCTION: WDA_PostAssocReqCallback
4185 * Post ASSOC req callback, send RSP back to PE
4186 */
4187void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4188 void* pUserData)
4189{
4190 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4191 tPostAssocParams *postAssocReqParam =
4192 (tPostAssocParams *)pWDA->wdaMsgParam ;
4193 /*STA context within the BSS Params*/
4194 tAddStaParams *staPostAssocParam =
4195 &postAssocReqParam->addBssParams.staContext ;
4196 /*STA Params for self STA*/
4197 tAddStaParams *selfStaPostAssocParam =
4198 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004200 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004202 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4204 {
4205 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4206 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4207 sizeof(tSirMacAddr)) ;
4208 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4209 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4210 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4212 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304213 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4215 pWDA->wdaWdiApiMsgParam = NULL;
4216 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 return ;
4219}
Jeff Johnson295189b2012-06-20 16:38:30 -07004220/*
4221 * FUNCTION: WDA_ProcessPostAssocReq
4222 * Trigger POST ASSOC processing in WDI
4223 */
4224VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4225 tPostAssocParams *postAssocReqParam)
4226{
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 WDI_Status status = WDI_STATUS_SUCCESS ;
4228
4229 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4230 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4231 sizeof(WDI_PostAssocReqParamsType)) ;
4232 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
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 if(NULL == wdiPostAssocReqParam)
4236 {
4237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 VOS_ASSERT(0);
4240 return VOS_STATUS_E_NOMEM;
4241 }
4242
4243 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4244 {
4245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004246 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 VOS_ASSERT(0);
4248 return VOS_STATUS_E_FAILURE;
4249 }
4250
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 /* update BSS params into WDI structure */
4252 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4253 &postAssocReqParam->addBssParams) ;
4254 /* update STA params into WDI structure */
4255 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4256 &postAssocReqParam->addStaParams) ;
4257
4258 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4259 postAssocReqParam->addBssParams.highPerformance;
4260 WDA_UpdateEdcaParamsForAC(pWDA,
4261 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4262 &postAssocReqParam->addBssParams.acbe);
4263 WDA_UpdateEdcaParamsForAC(pWDA,
4264 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4265 &postAssocReqParam->addBssParams.acbk);
4266 WDA_UpdateEdcaParamsForAC(pWDA,
4267 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4268 &postAssocReqParam->addBssParams.acvi);
4269 WDA_UpdateEdcaParamsForAC(pWDA,
4270 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4271 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 /* Store Init Req pointer, as this will be used for response */
4273 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 /* store Params pass it to WDI */
4275 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4277 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 if(IS_WDI_STATUS_FAILURE(status))
4279 {
4280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4281 "Failure in Post Assoc WDI API, free all the memory " );
4282 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4283 pWDA->wdaWdiApiMsgParam = NULL;
4284 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 return CONVERT_WDI2VOS_STATUS(status) ;
4289}
4290#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004291/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304292 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 * ADD STA req callback, send RSP back to PE
4294 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304295void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 void* pUserData)
4297{
4298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4299 tWDA_CbContext *pWDA;
4300 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004302 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 if(NULL == pWdaParams)
4304 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 VOS_ASSERT(0) ;
4307 return ;
4308 }
4309 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4310 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004312 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4314 {
4315 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4316 /*TODO: UMAC structure doesn't have these fields*/
4317 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4318 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4319 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4320 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4321 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4322 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004323#ifdef FEATURE_WLAN_TDLS
4324 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4325 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4326#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004328#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 {
4330 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4331 wdiConfigStaRsp->ucBssIdx;
4332 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4333 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304334 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4335 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 }
4337 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4338 {
4339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004340 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004341 VOS_ASSERT(0) ;
4342 return ;
4343 }
4344 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304345 else
4346 {
4347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4348 "%s: Failure with status %d", __func__,
4349 wdiConfigStaRsp->wdiStatus);
4350 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4351 WLAN_LOG_INDICATOR_HOST_DRIVER,
4352 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4353 FALSE, TRUE);
4354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4356 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 return ;
4359}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304360void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4361 void* pUserData)
4362{
4363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4364 tWDA_CbContext *pWDA;
4365 tAddStaParams *addStaParams;
4366
4367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4368 "<------ %s, wdiStatus: %d",
4369 __func__, wdiStatus);
4370
4371 if (NULL == pWdaParams)
4372 {
4373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4374 "%s: Invalid pWdaParams pointer", __func__);
4375 VOS_ASSERT(0);
4376 return;
4377 }
4378
4379 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4380 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4381
4382 addStaParams->status = wdiStatus;
4383
4384 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4385 {
4386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4387 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304388 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4389 WLAN_LOG_INDICATOR_HOST_DRIVER,
4390 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4391 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304392 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4393 }
4394
4395 return ;
4396}
4397
Jeff Johnson295189b2012-06-20 16:38:30 -07004398/*
4399 * FUNCTION: WDA_ConfigStaReq
4400 * Trigger Config STA processing in WDI
4401 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304402VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 tAddStaParams *addStaReqParam)
4404{
Jeff Johnson295189b2012-06-20 16:38:30 -07004405 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004406 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4407 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4408 sizeof(WDI_ConfigSTAReqParamsType)) ;
4409 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004411 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 if(NULL == wdiConfigStaReqParam)
4413 {
4414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 VOS_ASSERT(0);
4417 return VOS_STATUS_E_NOMEM;
4418 }
4419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4420 if(NULL == pWdaParams)
4421 {
4422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 VOS_ASSERT(0);
4425 vos_mem_free(wdiConfigStaReqParam);
4426 return VOS_STATUS_E_NOMEM;
4427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 /* update STA params into WDI structure */
4430 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4431 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304432 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4433 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 /* Store Init Req pointer, as this will be used for response */
4435 /* store Params pass it to WDI */
4436 pWdaParams->pWdaContext = pWDA;
4437 pWdaParams->wdaMsgParam = addStaReqParam;
4438 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304439
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304441 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 if(IS_WDI_STATUS_FAILURE(status))
4443 {
4444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4445 "Failure in Config STA WDI API, free all the memory " );
4446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4447 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4450 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 return CONVERT_WDI2VOS_STATUS(status) ;
4452}
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304453#ifdef SAP_AUTH_OFFLOAD
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304454
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304455/**
4456 * WDA_ProcessSapAuthOffloadAddStaReq(): process add sta command.
4457 *
4458 * @pWDA: WDA Call back context
4459 * @addStaReqParam: Add sta request params
4460 *
4461 * This function process sta params and store them to WDA layer.
4462 * It will register station entry to mempool as well.
4463 * As station is already in associated state in firmware this
4464 * function doesnt send any request to firmware and wait for response,
4465 * instead of that this function will send response from here.
4466 *
4467 * Return: Return VOS_STATUS
4468 */
4469VOS_STATUS WDA_ProcessSapAuthOffloadAddStaReq(tWDA_CbContext *pWDA,
4470 tAddStaParams *addStaReqParam)
4471{
4472 WDI_Status status = WDI_STATUS_SUCCESS ;
4473 WDI_AddStaParams wdiAddSTAParam = {0};
4474 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4475 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4476 sizeof(WDI_ConfigSTAReqParamsType)) ;
4477
4478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4479 "------> %s " ,__func__);
4480
4481 if (NULL == wdiConfigStaReqParam)
4482 {
4483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4484 "%s: VOS MEM Alloc Failure", __func__);
4485 VOS_ASSERT(0);
4486 return VOS_STATUS_E_NOMEM;
4487 }
4488
4489 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
4490 /* update STA params into WDI structure */
4491 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4492 addStaReqParam);
4493 wdiAddSTAParam.ucSTAIdx = wdiConfigStaReqParam->wdiReqInfo.staIdx;
4494 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_PEER;
4495 /* MAC Address of STA */
4496 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
4497 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4498 WDI_MAC_ADDR_LEN);
4499
4500 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
4501 wdiConfigStaReqParam->wdiReqInfo.macBSSID,
4502 WDI_MAC_ADDR_LEN);
4503
4504 wdiAddSTAParam.dpuIndex = addStaReqParam->dpuIndex;
4505 wdiAddSTAParam.dpuSig = addStaReqParam->ucUcastSig;
4506 wdiAddSTAParam.bcastDpuIndex = addStaReqParam->bcastDpuIndex;
4507 wdiAddSTAParam.bcastDpuSignature = addStaReqParam->ucBcastSig;
4508 wdiAddSTAParam.bcastMgmtDpuIndex = addStaReqParam->bcastMgmtDpuIdx;
4509 wdiAddSTAParam.bcastMgmtDpuSignature = addStaReqParam->ucMgmtSig;
4510
4511 WDI_STATableAddSta(pWDA->pWdiContext, &wdiAddSTAParam);
4512 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].ucValidStaIndex =
4513 WDA_VALID_STA_INDEX;
4514 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].currentOperChan =
4515 addStaReqParam->currentOperChan;
4516
4517 if (WDI_STATUS_SUCCESS !=
4518 WDI_STATableFindStaidByAddr(pWDA->pWdiContext,
4519 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4520 (wpt_uint8 *)&wdiConfigStaReqParam->wdiReqInfo.staIdx))
4521 {
4522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4523 "%s: Failed to get selfStaIdx!", __func__);
4524 }
4525 if (WDI_DS_AddSTAMemPool(pWDA->pWdiContext,
4526 wdiConfigStaReqParam->wdiReqInfo.staIdx))
4527 {
4528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4529 "%s: add STA into mempool fail", __func__);
4530 VOS_ASSERT(0) ;
4531 }
4532 vos_mem_free(wdiConfigStaReqParam);
4533 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4534 return status;
4535}
4536#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004537/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304538 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304540 */
4541void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 void* pUserData)
4543{
4544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4545 tWDA_CbContext *pWDA;
4546 tDeleteBssParams *delBssReqParam;
4547 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004549 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 if(NULL == pWdaParams)
4551 {
4552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004553 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 VOS_ASSERT(0) ;
4555 return ;
4556 }
4557 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4558 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004559 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4561 {
4562 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4563 sizeof(tSirMacAddr)) ;
4564 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304565 else
4566 {
4567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4568 "%s: Failure with status %d", __func__,
4569 wdiDelBssRsp->wdiStatus);
4570 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4571 WLAN_LOG_INDICATOR_HOST_DRIVER,
4572 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4573 FALSE, TRUE);
4574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4576 {
4577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004578 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 VOS_ASSERT(0) ;
4580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4582 {
4583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004584 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 VOS_ASSERT(0) ;
4586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4588 {
4589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004590 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 VOS_ASSERT(0) ;
4592 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304593
4594 WLANTL_StartForwarding(staIdx,0,0);
4595
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4597 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 /* reset the the system role*/
4599 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4600
4601 /* Reset the BA related information */
4602 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4603 {
4604 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4605 {
4606 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4607 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304608 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 /* Reset framesTxed counters here */
4610 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4611 {
4612 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4613 }
4614 }
4615 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304616
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 return ;
4619}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304620void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4621 void* pUserData)
4622{
4623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4624 tWDA_CbContext *pWDA;
4625 tDeleteBssParams *delbssParams;
4626
4627 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4628 "<------ %s, wdiStatus: %d",
4629 __func__, wdiStatus);
4630
4631 if (NULL == pWdaParams)
4632 {
4633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4634 "%s: Invalid pWdaParams pointer", __func__);
4635 VOS_ASSERT(0);
4636 return;
4637 }
4638
4639 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4640 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4641
4642 delbssParams->status = wdiStatus ;
4643
4644 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4645 {
4646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4647 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304648 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4649 WLAN_LOG_INDICATOR_HOST_DRIVER,
4650 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4651 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304652 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4653 }
4654
4655 return ;
4656}
Jeff Johnson295189b2012-06-20 16:38:30 -07004657
Jeff Johnson295189b2012-06-20 16:38:30 -07004658/*
4659 * FUNCTION: WDA_ProcessDelBssReq
4660 * Init DEL BSS req with WDI
4661 */
4662VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4663 tDeleteBssParams *delBssParam)
4664{
4665 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4667 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4668 sizeof(WDI_DelBSSReqParamsType)) ;
4669 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004671 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 if(NULL == wdiDelBssReqParam)
4673 {
4674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 VOS_ASSERT(0);
4677 return VOS_STATUS_E_NOMEM;
4678 }
4679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4680 if(NULL == pWdaParams)
4681 {
4682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 VOS_ASSERT(0);
4685 vos_mem_free(wdiDelBssReqParam);
4686 return VOS_STATUS_E_NOMEM;
4687 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004688 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304689 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4690 wdiDelBssReqParam->pUserData = pWdaParams;
4691
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 /* Store Init Req pointer, as this will be used for response */
4693 /* store Params pass it to WDI */
4694 pWdaParams->pWdaContext = pWDA;
4695 pWdaParams->wdaMsgParam = delBssParam;
4696 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304697
Jeff Johnson295189b2012-06-20 16:38:30 -07004698 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304699 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 if(IS_WDI_STATUS_FAILURE(status))
4701 {
4702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4703 "Failure in Del BSS WDI API, free all the memory " );
4704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4705 vos_mem_free(pWdaParams) ;
4706 delBssParam->status = eSIR_FAILURE ;
4707 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 return CONVERT_WDI2VOS_STATUS(status) ;
4710}
Jeff Johnson295189b2012-06-20 16:38:30 -07004711/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304712 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304714 */
4715void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 void* pUserData)
4717{
4718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4719 tWDA_CbContext *pWDA;
4720 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004722 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 if(NULL == pWdaParams)
4724 {
4725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004726 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304727 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 return ;
4729 }
4730 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4731 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004732 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4734 {
4735 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4736 {
4737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 VOS_ASSERT(0) ;
4740 }
4741 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304742 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304744 else
4745 {
4746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4747 "%s: Failure with status %d", __func__,
4748 wdiDelStaRsp->wdiStatus);
4749 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4750 WLAN_LOG_INDICATOR_HOST_DRIVER,
4751 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4752 FALSE, TRUE);
4753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4755 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004756 /*Reset the BA information corresponding to this STAIdx */
4757 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4758 WDA_INVALID_STA_INDEX;
4759 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304760 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 return ;
4763}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304764void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4765 void* pUserData)
4766{
4767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4768 tWDA_CbContext *pWDA;
4769 tDeleteStaParams *delStaParams;
4770
4771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4772 "<------ %s, wdiStatus: %d",
4773 __func__, wdiStatus);
4774
4775 if (NULL == pWdaParams)
4776 {
4777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4778 "%s: Invalid pWdaParams pointer", __func__);
4779 VOS_ASSERT(0);
4780 return;
4781 }
4782
4783 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4784 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4785
4786 delStaParams->status = wdiStatus ;
4787
4788 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4789 {
4790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4791 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304792 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4793 WLAN_LOG_INDICATOR_HOST_DRIVER,
4794 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4795 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304796 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4797 }
4798
4799 return ;
4800}
4801
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304802#ifdef SAP_AUTH_OFFLOAD
4803/**
4804 * WDA_ProcessSapAuthOffloadDelStaReq(): process del sta command.
4805 *
4806 * @pWDA: WDA Call back context
4807 * @delStaParam: Del sta request params
4808 *
4809 * This function process sta params and remove entry from WDA layer.
4810 * It will unregister station entry from mempool as well.
4811 * As station is already in disassociated state in firmware this
4812 * function doesn't send any request to firmware and wait for response,
4813 * instead of that this function will send response from here.
4814 *
4815 * Return: Return VOS_STATUS
4816 */
4817void WDA_ProcessSapAuthOffloadDelStaReq(tWDA_CbContext *pWDA,
4818 tDeleteStaParams *delStaParam)
4819
4820{
4821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4822 "------> %s " ,__func__);
4823
4824 if (WDI_DS_DelSTAMemPool(pWDA->pWdiContext, delStaParam->staIdx))
4825 {
4826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4827 "%s: DEL STA from MemPool Fail", __func__);
4828 // VOS_ASSERT(0) ;
4829 }
4830 WDI_STATableDelSta(pWDA->pWdiContext, delStaParam->staIdx);
4831 pWDA->wdaStaInfo[delStaParam->staIdx].ucValidStaIndex =
4832 WDA_INVALID_STA_INDEX;
4833 pWDA->wdaStaInfo[delStaParam->staIdx].currentOperChan = 0;
4834 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0);
4835 return ;
4836}
4837#endif
4838
Jeff Johnson295189b2012-06-20 16:38:30 -07004839/*
4840 * FUNCTION: WDA_ProcessDelStaReq
4841 * Init DEL STA req with WDI
4842 */
4843VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4844 tDeleteStaParams *delStaParam)
4845{
4846 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4848 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4849 sizeof(WDI_DelSTAReqParamsType)) ;
4850 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004852 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if(NULL == wdiDelStaReqParam)
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 VOS_ASSERT(0);
4858 return VOS_STATUS_E_NOMEM;
4859 }
4860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4861 if(NULL == pWdaParams)
4862 {
4863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 VOS_ASSERT(0);
4866 vos_mem_free(wdiDelStaReqParam);
4867 return VOS_STATUS_E_NOMEM;
4868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304870 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4871 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 /* Store Init Req pointer, as this will be used for response */
4873 /* store Params pass it to WDI */
4874 pWdaParams->pWdaContext = pWDA;
4875 pWdaParams->wdaMsgParam = delStaParam;
4876 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304877
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304879 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 if(IS_WDI_STATUS_FAILURE(status))
4881 {
4882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4883 "Failure in Del STA WDI API, free all the memory status = %d",
4884 status );
4885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4886 vos_mem_free(pWdaParams) ;
4887 delStaParam->status = eSIR_FAILURE ;
4888 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 return CONVERT_WDI2VOS_STATUS(status) ;
4891}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304892void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004893{
4894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4895 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304896 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 if(NULL == pWdaParams)
4900 {
4901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004902 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 VOS_ASSERT(0) ;
4904 return ;
4905 }
4906 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4907 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4909 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4911 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4912 pwdiAddSTASelfRsp->macSelfSta,
4913 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304914 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4915 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4916 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4917 {
4918 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4919 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4921 "%s: Failure with status %d failcnter %d", __func__,
4922 pwdiAddSTASelfRsp->wdiStatus,
4923 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4924 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4925 WLAN_LOG_INDICATOR_HOST_DRIVER,
4926 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4927 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 return ;
4931}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304932void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4933 void* pUserData)
4934{
4935 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4936 tWDA_CbContext *pWDA;
4937 tAddStaSelfParams *addStaSelfParams;
4938
4939 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4940 "<------ %s, wdiStatus: %d",
4941 __func__, wdiStatus);
4942
4943 if (NULL == pWdaParams)
4944 {
4945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4946 "%s: Invalid pWdaParams pointer", __func__);
4947 VOS_ASSERT(0);
4948 return;
4949 }
4950
4951 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4952 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4953
4954 addStaSelfParams->status = wdiStatus ;
4955
4956 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4957 {
4958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4959 vos_mem_free(pWdaParams) ;
4960 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4961 = WDA_ADDSTA_REQ_WDI_FAIL;
4962 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4964 "%s: Failure with status %d failcnter %d", __func__,
4965 wdiStatus,
4966 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4967 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4968 WLAN_LOG_INDICATOR_HOST_DRIVER,
4969 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4970 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304971 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4972 }
4973
4974 return ;
4975}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304976
Jeff Johnson295189b2012-06-20 16:38:30 -07004977/*
4978 * FUNCTION: WDA_ProcessAddStaSelfReq
4979 *
4980 */
4981VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4982{
4983 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004984 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004985 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4986 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4987 sizeof(WDI_AddSTASelfReqParamsType)) ;
4988 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004990 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304991 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 if( NULL == wdiAddStaSelfReq )
4993 {
4994 VOS_ASSERT( 0 );
4995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004996 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304997 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4998 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 return( VOS_STATUS_E_NOMEM );
5000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 if( NULL == pWdaParams )
5003 {
5004 VOS_ASSERT( 0 );
5005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005006 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305007 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5008 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 vos_mem_free(wdiAddStaSelfReq) ;
5010 return( VOS_STATUS_E_NOMEM );
5011 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305012 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
5013 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07005015 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 /* Store Init Req pointer, as this will be used for response */
5017 /* store Params pass it to WDI */
5018 pWdaParams->pWdaContext = pWDA;
5019 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305020 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
5021
5022 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
5023 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005024
Jeff Johnson43971f52012-07-17 12:26:56 -07005025 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 {
5027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5028 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07005029 wstatus );
5030 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5032 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305033 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
5034 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 pAddStaSelfReq->status = eSIR_FAILURE ;
5036 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
5037 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005038 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005039}
Jeff Johnson295189b2012-06-20 16:38:30 -07005040/*
5041 * FUNCTION: WDA_DelSTASelfRespCallback
5042 *
5043 */
5044void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
5045 wdiDelStaSelfRspParams , void* pUserData)
5046{
5047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5048 tWDA_CbContext *pWDA;
5049 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005051 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 if (NULL == pWdaParams)
5053 {
5054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005055 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005056 VOS_ASSERT(0);
5057 return;
5058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5060 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005062 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005063
5064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5065 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305066 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305067 {
Abhishek Singh837adf22015-10-01 17:37:37 +05305068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5069 "%s: Failure with status %d", __func__,
5070 wdiDelStaSelfRspParams->wdiStatus);
5071 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5072 WLAN_LOG_INDICATOR_HOST_DRIVER,
5073 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5074 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 return ;
5078}
Jeff Johnson295189b2012-06-20 16:38:30 -07005079/*
5080 * FUNCTION: WDA_DelSTASelfReqCallback
5081 *
5082 */
5083void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
5084 void* pUserData)
5085{
5086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5087 tWDA_CbContext *pWDA;
5088 tDelStaSelfParams *delStaSelfParams;
5089
5090 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05305091 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005092 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005093
5094 if (NULL == pWdaParams)
5095 {
5096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005097 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 VOS_ASSERT(0);
5099 return;
5100 }
5101
5102 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5103 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
5104
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005105 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005106
5107 if(IS_WDI_STATUS_FAILURE(wdiStatus))
5108 {
5109 VOS_ASSERT(0);
5110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5111 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305112 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5113 WLAN_LOG_INDICATOR_HOST_DRIVER,
5114 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5115 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
5117 }
5118
5119 return ;
5120}
5121
5122/*
5123 * FUNCTION: WDA_DelSTASelfReq
5124 * Trigger Config STA processing in WDI
5125 */
5126VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
5127 tDelStaSelfParams* pDelStaSelfReqParam)
5128{
5129 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005130 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 tWDA_ReqParams *pWdaParams = NULL;
5132 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
5133 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
5134 sizeof(WDI_DelSTASelfReqParamsType)) ;
5135
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005137 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 if( NULL == wdiDelStaSelfReq )
5139 {
5140 VOS_ASSERT( 0 );
5141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005142 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 return( VOS_STATUS_E_NOMEM );
5144 }
5145
5146 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5147 if( NULL == pWdaParams )
5148 {
5149 VOS_ASSERT( 0 );
5150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005151 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 vos_mem_free(wdiDelStaSelfReq) ;
5153 return( VOS_STATUS_E_NOMEM );
5154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 pWdaParams->pWdaContext = pWDA;
5156 /* Store param pointer as passed in by caller */
5157 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
5158 /* store Params pass it to WDI */
5159 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
5161 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
5162
5163 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
5164 wdiDelStaSelfReq->pUserData = pWdaParams;
5165
Jeff Johnson43971f52012-07-17 12:26:56 -07005166 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
5168
Jeff Johnson43971f52012-07-17 12:26:56 -07005169 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 {
5171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
5172 "Failure in Del Sta Self REQ WDI API, free all the memory " );
5173 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07005174 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5176 vos_mem_free(pWdaParams) ;
5177 pDelStaSelfReqParam->status = eSIR_FAILURE ;
5178 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
5179 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005180 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181}
5182
Jeff Johnson295189b2012-06-20 16:38:30 -07005183/*
5184 * FUNCTION: WDA_SendMsg
5185 * Send Message back to PE
5186 */
5187void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
5188 void *pBodyptr, tANI_U32 bodyVal)
5189{
5190 tSirMsgQ msg = {0} ;
5191 tANI_U32 status = VOS_STATUS_SUCCESS ;
5192 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 msg.type = msgType;
5194 msg.bodyval = bodyVal;
5195 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 if (VOS_STATUS_SUCCESS != status)
5198 {
5199 if(NULL != pBodyptr)
5200 {
5201 vos_mem_free(pBodyptr);
5202 }
5203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005204 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005205 VOS_ASSERT(0) ;
5206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 return ;
5208}
Jeff Johnson295189b2012-06-20 16:38:30 -07005209/*
5210 * FUNCTION: WDA_UpdateBSSParams
5211 * Translated WDA/PE BSS info into WDI BSS info..
5212 */
5213void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5214 WDI_ConfigBSSReqInfoType *wdiBssParams,
5215 tAddBssParams *wdaBssParams)
5216{
5217 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305218 v_U8_t i = 0;
5219
Jeff Johnson295189b2012-06-20 16:38:30 -07005220 /* copy bssReq Params to WDI structure */
5221 vos_mem_copy(wdiBssParams->macBSSID,
5222 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5223 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5224 sizeof(tSirMacAddr)) ;
5225 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5226 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5227 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 wdiBssParams->ucShortSlotTimeSupported =
5229 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005230 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5231 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5232 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5233 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5234 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5235
5236 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5237 wdiBssParams->ucTXOPProtectionFullSupport =
5238 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5240 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5243 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5244 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5245 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5246
Chet Lanctot186b5732013-03-18 10:26:30 -07005247 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5248
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 /* copy SSID into WDI structure */
5250 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5251 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5252 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5254 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005256#ifdef WLAN_FEATURE_VOWIFI
5257 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5258#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005261#ifdef WLAN_FEATURE_VOWIFI_11R
5262 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005263 if(wdiBssParams->bExtSetStaKeyParamValid)
5264 {
5265 /* copy set STA key params to WDI structure */
5266 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5267 wdaBssParams->extSetStaKeyParam.staIdx;
5268 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5269 wdaBssParams->extSetStaKeyParam.encType;
5270 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5271 wdaBssParams->extSetStaKeyParam.wepType;
5272 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5273 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5275 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005276 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5278 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5279 {
5280 WDA_GetWepKeysFromCfg( pWDA,
5281 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5282 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5283 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5284 }
5285 else
5286 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005287 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5288 keyIndex++)
5289 {
5290 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5291 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5292 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5293 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5294 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5295 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305296
5297 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5298 {
5299 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5300 {
5301 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5302 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5303 }
5304
5305 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5306 {
5307 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5308 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5309 }
5310 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5311 FL("%s: Negated Keys"), __func__);
5312 }
5313 else
5314 {
5315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5316 FL("%s: No change in Keys "), __func__);
5317 vos_mem_copy(
5318 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5319 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5320 WLAN_MAX_KEY_RSC_LEN);
5321 vos_mem_copy(
5322 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5323 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5324 SIR_MAC_MAX_KEY_LENGTH);
5325 }
5326
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5328 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5329 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5330 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305332 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 }
5335 }
5336 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5337 }
5338 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5339 {
5340 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5341 sizeof(wdaBssParams->extSetStaKeyParam) );
5342 }
5343#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005344#ifdef WLAN_FEATURE_11AC
5345 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5346 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5347#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005348
5349 return ;
5350}
Jeff Johnson295189b2012-06-20 16:38:30 -07005351/*
5352 * FUNCTION: WDA_UpdateSTAParams
5353 * Translated WDA/PE BSS info into WDI BSS info..
5354 */
5355void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5356 WDI_ConfigStaReqInfoType *wdiStaParams,
5357 tAddStaParams *wdaStaParams)
5358{
5359 tANI_U8 i = 0;
5360 /* Update STA params */
5361 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5362 sizeof(tSirMacAddr)) ;
5363 wdiStaParams->usAssocId = wdaStaParams->assocId;
5364 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005365 wdiStaParams->staIdx = wdaStaParams->staIdx;
5366
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 wdiStaParams->ucShortPreambleSupported =
5368 wdaStaParams->shortPreambleSupported;
5369 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5370 sizeof(tSirMacAddr)) ;
5371 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5372
5373 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5374
5375 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5376 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5377 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5378 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5379 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5380 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5381 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5382
5383 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5384 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 wdiStaParams->wdiSupportedRates.opRateMode =
5386 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5388 {
5389 wdiStaParams->wdiSupportedRates.llbRates[i] =
5390 wdaStaParams->supportedRates.llbRates[i];
5391 }
5392 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5393 {
5394 wdiStaParams->wdiSupportedRates.llaRates[i] =
5395 wdaStaParams->supportedRates.llaRates[i];
5396 }
5397 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5398 {
5399 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5400 wdaStaParams->supportedRates.aniLegacyRates[i];
5401 }
5402 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5403 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005404#ifdef WLAN_FEATURE_11AC
5405 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5406 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5407 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5408 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5409#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5411 {
5412 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5413 wdaStaParams->supportedRates.supportedMCSSet[i];
5414 }
5415 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5416 wdaStaParams->supportedRates.rxHighestDataRate;
5417
5418 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5419
5420 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5421
5422 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5423 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5424 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5425
5426 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5427 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5428 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5429 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005431#ifdef WLAN_FEATURE_11AC
5432 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5433 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005434 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305435 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5436 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5437 * must be set by default */
5438 if ( wdiStaParams->vhtTxMUBformeeCapable )
5439 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005440#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005441 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5442 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 return ;
5444}
Jeff Johnson295189b2012-06-20 16:38:30 -07005445/*
5446 * -------------------------------------------------------------------------
5447 * CFG update to WDI
5448 * -------------------------------------------------------------------------
5449 */
5450
5451 /*
5452 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5453 * Convert the WNI CFG ID to HAL CFG ID
5454 */
mukul sharma6b53e202016-11-23 19:29:18 +05305455static inline tANI_U16 WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005456{
5457 switch(wniCfgId)
5458 {
5459 case WNI_CFG_STA_ID:
5460 return QWLAN_HAL_CFG_STA_ID;
5461 case WNI_CFG_CURRENT_TX_ANTENNA:
5462 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5463 case WNI_CFG_CURRENT_RX_ANTENNA:
5464 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5465 case WNI_CFG_LOW_GAIN_OVERRIDE:
5466 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5467 case WNI_CFG_POWER_STATE_PER_CHAIN:
5468 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5469 case WNI_CFG_CAL_PERIOD:
5470 return QWLAN_HAL_CFG_CAL_PERIOD;
5471 case WNI_CFG_CAL_CONTROL:
5472 return QWLAN_HAL_CFG_CAL_CONTROL;
5473 case WNI_CFG_PROXIMITY:
5474 return QWLAN_HAL_CFG_PROXIMITY;
5475 case WNI_CFG_NETWORK_DENSITY:
5476 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5477 case WNI_CFG_MAX_MEDIUM_TIME:
5478 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5479 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5480 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5481 case WNI_CFG_RTS_THRESHOLD:
5482 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5483 case WNI_CFG_SHORT_RETRY_LIMIT:
5484 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5485 case WNI_CFG_LONG_RETRY_LIMIT:
5486 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5487 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5488 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5489 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5490 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5491 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5492 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5493 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5494 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5495 case WNI_CFG_FIXED_RATE:
5496 return QWLAN_HAL_CFG_FIXED_RATE;
5497 case WNI_CFG_RETRYRATE_POLICY:
5498 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5499 case WNI_CFG_RETRYRATE_SECONDARY:
5500 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5501 case WNI_CFG_RETRYRATE_TERTIARY:
5502 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5503 case WNI_CFG_FORCE_POLICY_PROTECTION:
5504 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5505 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5506 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5507 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5508 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5509 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5510 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5511 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5512 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5513 case WNI_CFG_MAX_BA_SESSIONS:
5514 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5515 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5516 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5517 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5518 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5519 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5520 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5521 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5522 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5523 case WNI_CFG_STATS_PERIOD:
5524 return QWLAN_HAL_CFG_STATS_PERIOD;
5525 case WNI_CFG_CFP_MAX_DURATION:
5526 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5527#if 0 /*This is not part of CFG*/
5528 case WNI_CFG_FRAME_TRANS_ENABLED:
5529 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5530#endif
5531 case WNI_CFG_DTIM_PERIOD:
5532 return QWLAN_HAL_CFG_DTIM_PERIOD;
5533 case WNI_CFG_EDCA_WME_ACBK:
5534 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5535 case WNI_CFG_EDCA_WME_ACBE:
5536 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5537 case WNI_CFG_EDCA_WME_ACVI:
5538 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5539 case WNI_CFG_EDCA_WME_ACVO:
5540 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5541#if 0
5542 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5543 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5544 case WNI_CFG_TELE_BCN_TRANS_LI:
5545 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5546 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5547 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5548 case WNI_CFG_TELE_BCN_MAX_LI:
5549 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5550 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5551 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5552#endif
5553 case WNI_CFG_ENABLE_CLOSE_LOOP:
5554 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005555 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5556 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305557 case WNI_CFG_ENABLE_CONC_BMISS:
5558 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5559 case WNI_CFG_ENABLE_UNITS_BWAIT:
5560 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305561 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5562 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
mukul sharma6b53e202016-11-23 19:29:18 +05305563 case WNI_CFG_ENABLE_MC_ADDR_LIST:
5564 return QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 default:
5566 {
5567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005568 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 wniCfgId);
mukul sharma6b53e202016-11-23 19:29:18 +05305570 return QWLAN_HAL_CFG_MAX_PARAMS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 }
5572 }
5573}
Jeff Johnson295189b2012-06-20 16:38:30 -07005574/*
5575 * FUNCTION: WDA_UpdateCfgCallback
5576 *
5577 */
5578void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5579{
5580 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5581 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5582 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005584 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 /*
5586 * currently there is no response message is expected between PE and
5587 * WDA, Failure return from WDI is a ASSERT condition
5588 */
5589 if(WDI_STATUS_SUCCESS != wdiStatus)
5590 {
5591 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005592 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5594 }
5595
5596 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5597 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5598 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 return ;
5600}
Jeff Johnson295189b2012-06-20 16:38:30 -07005601/*
5602 * FUNCTION: WDA_UpdateCfg
5603 *
5604 */
5605VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5606{
5607
5608 WDI_Status status = WDI_STATUS_SUCCESS ;
5609 tANI_U32 val =0;
5610 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5611 tHalCfg *configData;
5612 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5613 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005615 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 if (NULL == pMac )
5617 {
5618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005619 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 return VOS_STATUS_E_FAILURE;
5621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 if(WDA_START_STATE != pWDA->wdaState)
5623 {
5624 return VOS_STATUS_E_FAILURE;
5625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5627 {
5628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005629 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 VOS_ASSERT(0);
5631 return VOS_STATUS_E_FAILURE;
5632 }
mukul sharma6b53e202016-11-23 19:29:18 +05305633
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5635 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 if(NULL == wdiCfgReqParam)
5637 {
5638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005639 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 VOS_ASSERT(0);
5641 return VOS_STATUS_E_NOMEM;
5642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5644 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 if(NULL == wdiCfgReqParam->pConfigBuffer)
5646 {
5647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 vos_mem_free(wdiCfgReqParam);
5650 VOS_ASSERT(0);
5651 return VOS_STATUS_E_NOMEM;
5652 }
mukul sharma6b53e202016-11-23 19:29:18 +05305653
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 /*convert the WNI CFG Id to HAL CFG Id*/
5655 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5656 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5657
5658 /*TODO: revisit this for handling string parameters */
5659 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5660 &val) != eSIR_SUCCESS)
5661 {
5662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005663 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5665 vos_mem_free(wdiCfgReqParam);
5666 return eSIR_FAILURE;
5667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5669 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5670 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5671 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5672 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5673
5674 /* store Params pass it to WDI */
5675 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005676#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5677 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5678 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 if(IS_WDI_STATUS_FAILURE(status))
5680 {
5681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5682 "Failure in Update CFG WDI API, free all the memory " );
5683 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5684 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5685 pWDA->wdaWdiCfgApiMsgParam = NULL;
5686 /* Failure is not expected */
5687 VOS_ASSERT(0) ;
5688 }
5689#else
5690 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5691 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5692 pWDA->wdaWdiCfgApiMsgParam = NULL;
5693#endif
5694 return CONVERT_WDI2VOS_STATUS(status) ;
5695}
5696
mukul sharma6b53e202016-11-23 19:29:18 +05305697/*
5698 * FUNCTION: WDA_UpdateCfgIntParamCb
5699 *
5700 */
5701void WDA_UpdateCfgIntParamCb(WDI_Status wdiStatus, void* pUserData)
5702{
5703 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5704 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5705 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgUpdateIntMsg ;
5706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5707 "<------ %s " ,__func__);
5708 /*
5709 * currently there is no response message is expected between PE and
5710 * WDA, Failure return from WDI is a ASSERT condition
5711 */
5712 if (WDI_STATUS_SUCCESS != wdiStatus)
5713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5714 "%s: CFG (%d) config failure", __func__,
5715 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5716
5717 if (wdiCfgParam && wdiCfgParam->pConfigBuffer)
5718 {
5719 vos_mem_free(wdiCfgParam->pConfigBuffer);
5720 wdiCfgParam->pConfigBuffer = NULL;
5721 }
5722
5723 if (pWDA->wdaWdiCfgUpdateIntMsg)
5724 {
5725 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
5726 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
5727 }
5728
5729 return ;
5730}
5731
5732/*
5733 * FUNCTION: WDA_UpdateCfgIntParam
5734 *
5735 */
5736VOS_STATUS WDA_UpdateCfgIntParam(tWDA_CbContext *pWDA,
5737 tSirUpdateCfgIntParam *cfgParam)
5738{
5739
5740 WDI_Status status = WDI_STATUS_SUCCESS ;
5741 tANI_U32 val =0;
5742 tpAniSirGlobal pMac;
5743 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5744 tHalCfg *tlvStruct = NULL ;
5745 tANI_U8 *tlvStructStart = NULL ;
5746 v_PVOID_t *configParam;
5747 tANI_U32 configParamSize;
5748 tANI_U32 *configDataValue;
5749 tANI_U32 cfgId;
5750 tANI_U32 tlv_type = QWLAN_HAL_CFG_MAX_PARAMS;
5751
5752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5753 " ------> %s " ,__func__);
5754
5755 if (cfgParam)
5756 {
5757 cfgId = cfgParam->cfgId;
5758 }
5759 else
5760 {
5761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5762 FL("Invoked with NULL cfgParam"));
5763 return VOS_STATUS_E_FAILURE;
5764 }
5765
5766 if (!pWDA)
5767 {
5768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5769 FL("Invoked with invalid WDA context"));
5770 return VOS_STATUS_E_FAILURE;
5771 }
5772
5773 if (NULL != pWDA->wdaWdiCfgUpdateIntMsg)
5774 {
5775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5776 FL("wdaWdiCfgApiMsgParam is not NULL"));
5777
5778 return VOS_STATUS_E_FAILURE;
5779 }
5780
5781 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5782 if (NULL == pMac)
5783 {
5784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5785 FL("Invoked with invalid MAC context "));
5786 return VOS_STATUS_E_FAILURE;
5787 }
5788
5789 if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId , &val) != eSIR_SUCCESS)
5790 {
5791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5792 FL("Fail to cfg get id %d"), cfgId);
5793 return VOS_STATUS_E_FAILURE;
5794 }
5795
5796 /* Get TLV type */
5797 tlv_type = WDA_ConvertWniCfgIdToHALCfgId(cfgId);
5798 if (tlv_type == QWLAN_HAL_CFG_MAX_PARAMS)
5799 {
5800 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5801 "Failed to Convert cfg to hal id %d", cfgId);
5802 return VOS_STATUS_E_FAILURE;
5803 }
5804
5805 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5806 sizeof(WDI_UpdateCfgReqParamsType)) ;
5807 if (NULL == wdiCfgReqParam)
5808 {
5809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5810 "%s: VOS MEM Alloc Failure", __func__);
5811 return VOS_STATUS_E_NOMEM;
5812 }
5813
5814 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * 1;
5815 configParam = vos_mem_malloc(configParamSize);
5816 if (NULL == configParam)
5817 {
5818 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5819 "%s: VOS MEM Alloc Failure", __func__);
5820 vos_mem_free(wdiCfgReqParam);
5821 return VOS_STATUS_E_NOMEM;
5822 }
5823
5824 vos_mem_set(configParam, configParamSize, 0);
5825 wdiCfgReqParam->pConfigBuffer = configParam;
5826 tlvStruct = (tHalCfg *)configParam;
5827 tlvStructStart = (tANI_U8 *)configParam;
5828 /* Set TLV type */
5829 tlvStruct->type = tlv_type;
5830 tlvStruct->length = sizeof(tANI_U32);
5831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
5832 *configDataValue = (tANI_U32)val;
5833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5834 "cfg_id %d tlv_type %d tlv_value %d \n",
5835 cfgId, tlvStruct->type, val);
5836 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
5837 + sizeof(tHalCfg) + tlvStruct->length)) ;
5838 wdiCfgReqParam->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
5839 wdiCfgReqParam->wdiReqStatusCB = NULL;
5840 /* store Params pass it to WDI */
5841 pWDA->wdaWdiCfgUpdateIntMsg = (void *)wdiCfgReqParam ;
5842 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5843 (WDI_UpdateCfgRspCb )WDA_UpdateCfgIntParamCb, pWDA) ;
5844 if (IS_WDI_STATUS_FAILURE(status))
5845 {
5846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5847 "Failure in WDA_UpdateCfgIntParam WDI API, free memory ");
5848 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5849 wdiCfgReqParam->pConfigBuffer = NULL;
5850 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
5851 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
5852 }
5853
5854 return CONVERT_WDI2VOS_STATUS(status);
5855}
5856
Jeff Johnson295189b2012-06-20 16:38:30 -07005857VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5858 v_U8_t *pDefaultKeyId,
5859 v_U8_t *pNumKeys,
5860 WDI_KeysType *pWdiKeys )
5861{
5862 v_U32_t i, j, defKeyId = 0;
5863 v_U32_t val = SIR_MAC_KEY_LENGTH;
5864 VOS_STATUS status = WDI_STATUS_SUCCESS;
5865 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 if (NULL == pMac )
5867 {
5868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005869 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 return VOS_STATUS_E_FAILURE;
5871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5873 &defKeyId ))
5874 {
5875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5876 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5877 }
5878
5879 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 /* Need to extract ALL of the configured WEP Keys */
5881 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5882 {
5883 val = SIR_MAC_KEY_LENGTH;
5884 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5885 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5886 pWdiKeys[j].key,
5887 &val ))
5888 {
5889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005890 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 }
5892 else
5893 {
5894 pWdiKeys[j].keyId = (tANI_U8) i;
5895 /*
5896 * Actually, a DC (Don't Care) because
5897 * this is determined (and set) by PE/MLME
5898 */
5899 pWdiKeys[j].unicast = 0;
5900 /*
5901 * Another DC (Don't Care)
5902 */
5903 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5904 /* Another DC (Don't Care). Unused for WEP */
5905 pWdiKeys[j].paeRole = 0;
5906 /* Determined from wlan_cfgGetStr() above.*/
5907 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 j++;
5909 *pNumKeys = (tANI_U8) j;
5910 }
5911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 return status;
5913}
Jeff Johnson295189b2012-06-20 16:38:30 -07005914/*
5915 * FUNCTION: WDA_SetBssKeyReqCallback
5916 * send SET BSS key RSP back to PE
5917 */
5918void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5919{
5920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5921 tWDA_CbContext *pWDA;
5922 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005924 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 if(NULL == pWdaParams)
5926 {
5927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005928 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 VOS_ASSERT(0) ;
5930 return ;
5931 }
5932 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5933 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305934 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5935 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5937 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005938 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 return ;
5941}
Jeff Johnson295189b2012-06-20 16:38:30 -07005942/*
5943 * FUNCTION: WDA_ProcessSetBssKeyReq
5944 * Request to WDI for programming the BSS key( key for
5945 * broadcast/multicast frames Encryption)
5946 */
5947VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5948 tSetBssKeyParams *setBssKeyParams )
5949{
5950 WDI_Status status = WDI_STATUS_SUCCESS ;
5951 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5952 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5953 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5954 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005957 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 if(NULL == wdiSetBssKeyParam)
5959 {
5960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005961 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 VOS_ASSERT(0);
5963 return VOS_STATUS_E_NOMEM;
5964 }
5965 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5966 if(NULL == pWdaParams)
5967 {
5968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 VOS_ASSERT(0);
5971 vos_mem_free(wdiSetBssKeyParam);
5972 return VOS_STATUS_E_NOMEM;
5973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 /* copy set BSS params to WDI structure */
5976 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5977 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5978 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005979 if(setBssKeyParams->encType != eSIR_ED_NONE)
5980 {
5981 if( setBssKeyParams->numKeys == 0 &&
5982 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5983 setBssKeyParams->encType == eSIR_ED_WEP104))
5984 {
5985 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5987 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5988 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5989 }
5990 else
5991 {
5992 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5993 {
5994 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5995 setBssKeyParams->key[keyIndex].keyId;
5996 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5997 setBssKeyParams->key[keyIndex].unicast;
5998 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5999 setBssKeyParams->key[keyIndex].keyDirection;
6000 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
6001 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6002 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
6003 setBssKeyParams->key[keyIndex].paeRole;
6004 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
6005 setBssKeyParams->key[keyIndex].keyLength;
6006 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
6007 setBssKeyParams->key[keyIndex].key,
6008 SIR_MAC_MAX_KEY_LENGTH);
6009 }
6010 }
6011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
6013 setBssKeyParams->singleTidRc;
6014 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 /* Store set key pointer, as this will be used for response */
6016 /* store Params pass it to WDI */
6017 pWdaParams->pWdaContext = pWDA;
6018 pWdaParams->wdaMsgParam = setBssKeyParams;
6019 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
6021 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
6022
6023 if(IS_WDI_STATUS_FAILURE(status))
6024 {
6025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6026 "Failure in Set BSS Key Req WDI API, free all the memory " );
6027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6028 vos_mem_free(pWdaParams) ;
6029 setBssKeyParams->status = eSIR_FAILURE ;
6030 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
6031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 return CONVERT_WDI2VOS_STATUS(status) ;
6033}
Jeff Johnson295189b2012-06-20 16:38:30 -07006034/*
6035 * FUNCTION: WDA_RemoveBssKeyReqCallback
6036 * send SET BSS key RSP back to PE
6037 */
6038void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
6039{
6040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6041 tWDA_CbContext *pWDA;
6042 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006044 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 if(NULL == pWdaParams)
6046 {
6047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006048 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006049 VOS_ASSERT(0) ;
6050 return ;
6051 }
6052 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6053 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6055 vos_mem_free(pWdaParams) ;
6056
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006057 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 return ;
6060}
Siddharth Bhal171788a2014-09-29 21:02:40 +05306061
6062/*
Siddharth Bhal64246172015-02-27 01:04:37 +05306063 * FUNCTION: WDA_GetFrameLogRspCallback
6064 * recieves get frame log response from FW
6065 */
6066void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
6067 void* pUserData)
6068{
6069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6070 tWDA_CbContext *pWDA = NULL;
6071 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
6072
6073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6074 "<------ Entering: %s " ,__func__);
6075 if(NULL == pWdaParams)
6076 {
6077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6078 "%s: pWdaParams received NULL", __func__);
6079 VOS_ASSERT(0) ;
6080 return ;
6081 }
6082
6083 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6084 if (NULL == pWDA)
6085 {
6086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6087 "%s:pWDA is NULL", __func__);
6088 VOS_ASSERT(0);
6089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6090 vos_mem_free(pWdaParams);
6091 return ;
6092 }
6093
6094 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
6095 if(NULL == pGetFrameLogReqParams)
6096 {
6097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6098 "%s: pGetFrameLogReqParams received NULL", __func__);
6099 VOS_ASSERT(0);
6100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6101 vos_mem_free(pWdaParams);
6102 return;
6103 }
6104
Siddharth Bhal64246172015-02-27 01:04:37 +05306105 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05306107 "%s:GetFrameLog with rsp status %d flag %d", __func__,
6108 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05306109 }
6110
6111 /* free WDI command buffer only */
6112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6113 vos_mem_free(pWdaParams->wdaMsgParam);
6114 vos_mem_free(pWdaParams);
6115
6116 return ;
6117
6118}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05306119
6120/*
6121 * FUNCTION: WDA_RssiMonitorStopRspCallback
6122 * recieves Rssi Monitor stop response from FW
6123 */
6124void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
6125 void* pUserData)
6126{
6127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6128 tSirRssiMonitorReq *pRssiMonitorReqParams;
6129
6130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6131 "<------ %s " ,__func__);
6132
6133 if(NULL == pWdaParams)
6134 {
6135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6136 "%s: pWdaParams received NULL", __func__);
6137 VOS_ASSERT(0);
6138 return ;
6139 }
6140
6141 if(NULL == pWdaParams->wdaMsgParam)
6142 {
6143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6144 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6145 VOS_ASSERT(0);
6146 vos_mem_free(pWdaParams);
6147 return ;
6148 }
6149
6150 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6151
6152 if(pRssiMonitorReqParams->rssiMonitorCallback)
6153 {
6154 pRssiMonitorReqParams->rssiMonitorCallback(
6155 pRssiMonitorReqParams->rssiMonitorCbContext,
6156 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6157 }
6158 else
6159 {
6160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6161 "%s: pFWLoggingInitParams callback is NULL", __func__);
6162 }
6163
6164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6165 vos_mem_free(pWdaParams->wdaMsgParam);
6166 vos_mem_free(pWdaParams);
6167
6168 return;
6169}
6170
6171/*
6172 * FUNCTION: WDA_RssiMonitorStartRspCallback
6173 * recieves Rssi Monitor start response from FW
6174 */
6175void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
6176 void* pUserData)
6177{
6178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6179 tSirRssiMonitorReq *pRssiMonitorReqParams;
6180
6181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6182 "<------ %s " ,__func__);
6183
6184 if(NULL == pWdaParams)
6185 {
6186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6187 "%s: pWdaParams received NULL", __func__);
6188 VOS_ASSERT(0);
6189 return ;
6190 }
6191
6192 if(NULL == pWdaParams->wdaMsgParam)
6193 {
6194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6195 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6196 VOS_ASSERT(0);
6197 vos_mem_free(pWdaParams);
6198 return ;
6199 }
6200
6201 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6202
6203 if(pRssiMonitorReqParams->rssiMonitorCallback)
6204 {
6205 pRssiMonitorReqParams->rssiMonitorCallback(
6206 pRssiMonitorReqParams->rssiMonitorCbContext,
6207 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6208 }
6209 else
6210 {
6211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6212 "%s: pFWLoggingInitParams callback is NULL", __func__);
6213 }
6214
6215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6216 vos_mem_free(pWdaParams->wdaMsgParam);
6217 vos_mem_free(pWdaParams);
6218
6219 return;
6220}
6221
Siddharth Bhal64246172015-02-27 01:04:37 +05306222/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306223 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306224 * recieves Mgmt Logging init response from FW
6225 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306226void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306227 void* pUserData)
6228{
6229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306230 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05306231 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306232
6233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6234 "<------ %s " ,__func__);
6235
6236 if(NULL == pWdaParams)
6237 {
6238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6239 "%s: pWdaParams received NULL", __func__);
6240 VOS_ASSERT(0);
6241 return ;
6242 }
6243
6244 if(NULL == pWdaParams->wdaMsgParam)
6245 {
6246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6247 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6248 VOS_ASSERT(0);
6249 vos_mem_free(pWdaParams);
6250 return ;
6251 }
6252
c_manjeecfd1efb2015-09-25 19:32:34 +05306253 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
6254 if(NULL == pWdaParams)
6255 {
6256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6257 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
6258 VOS_ASSERT(0);
6259 vos_mem_free(pWdaParams);
6260 return;
6261 }
6262
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306263 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05306264 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306265
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306266 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306267 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306268 pFWLoggingInitParams->fwlogInitCallback(
6269 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05306270 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306271 }
6272 else
6273 {
6274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306275 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306276 }
6277
c_manjeecfd1efb2015-09-25 19:32:34 +05306278 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6280 vos_mem_free(pWdaParams->wdaMsgParam);
6281 vos_mem_free(pWdaParams);
6282
6283 return;
6284}
6285
6286/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05306287 * FUNCTION: WDA_SpoofMacAddrRspCallback
6288 * recieves spoof mac addr response from FW
6289 */
6290void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
6291{
6292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6293 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05306294
Siddharth Bhal171788a2014-09-29 21:02:40 +05306295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6296 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306297
Siddharth Bhal171788a2014-09-29 21:02:40 +05306298 if(NULL == pWdaParams)
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6301 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306302 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306303 return ;
6304 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05306305 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306306
Siddharth Bhal029d6732014-10-09 21:31:23 +05306307 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05306308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05306309 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306310 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05306311 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
6312 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05306313
Siddharth Bhal171788a2014-09-29 21:02:40 +05306314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306315 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306316 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306317
6318 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306319}
6320
Jeff Johnson295189b2012-06-20 16:38:30 -07006321/*
6322 * FUNCTION: WDA_ProcessRemoveBssKeyReq
6323 * Request to WDI to remove the BSS key( key for broadcast/multicast
6324 * frames Encryption)
6325 */
6326VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
6327 tRemoveBssKeyParams *removeBssKeyParams )
6328{
6329 WDI_Status status = WDI_STATUS_SUCCESS ;
6330 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
6331 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
6332 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
6333 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006335 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 if(NULL == wdiRemoveBssKeyParam)
6337 {
6338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 VOS_ASSERT(0);
6341 return VOS_STATUS_E_NOMEM;
6342 }
6343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6344 if(NULL == pWdaParams)
6345 {
6346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 VOS_ASSERT(0);
6349 vos_mem_free(wdiRemoveBssKeyParam);
6350 return VOS_STATUS_E_NOMEM;
6351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 /* copy Remove BSS key params to WDI structure*/
6353 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6354 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6355 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6356 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6357 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 /* Store remove key pointer, as this will be used for response */
6359 /* store Params pass it to WDI */
6360 pWdaParams->pWdaContext = pWDA;
6361 pWdaParams->wdaMsgParam = removeBssKeyParams;
6362 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006363 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6364 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 if(IS_WDI_STATUS_FAILURE(status))
6366 {
6367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6368 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6370 vos_mem_free(pWdaParams) ;
6371 removeBssKeyParams->status = eSIR_FAILURE ;
6372 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 return CONVERT_WDI2VOS_STATUS(status) ;
6375}
Jeff Johnson295189b2012-06-20 16:38:30 -07006376/*
6377 * FUNCTION: WDA_SetBssKeyReqCallback
6378 * send SET BSS key RSP back to PE
6379 */
6380void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6381{
6382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6383 tWDA_CbContext *pWDA;
6384 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006386 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 if(NULL == pWdaParams)
6388 {
6389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006390 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 VOS_ASSERT(0) ;
6392 return ;
6393 }
6394 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6395 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306396 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6397 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6399 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006400 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 return ;
6403}
Jeff Johnson295189b2012-06-20 16:38:30 -07006404/*
6405 * FUNCTION: WDA_ProcessSetStaKeyReq
6406 * Request to WDI for programming the STA key( key for Unicast frames
6407 * Encryption)
6408 */
6409VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6410 tSetStaKeyParams *setStaKeyParams )
6411{
6412 WDI_Status status = WDI_STATUS_SUCCESS ;
6413 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6414 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6415 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6416 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 if(NULL == wdiSetStaKeyParam)
6421 {
6422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006424 VOS_ASSERT(0);
6425 return VOS_STATUS_E_NOMEM;
6426 }
6427 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6428 if(NULL == pWdaParams)
6429 {
6430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 VOS_ASSERT(0);
6433 vos_mem_free(wdiSetStaKeyParam);
6434 return VOS_STATUS_E_NOMEM;
6435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 /* copy set STA key params to WDI structure */
6439 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6440 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6441 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6442 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 if(setStaKeyParams->encType != eSIR_ED_NONE)
6444 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006445 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6447 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6448 {
6449 WDA_GetWepKeysFromCfg( pWDA,
6450 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6451 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6452 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6453 }
6454 else
6455 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6457 keyIndex++)
6458 {
6459 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6460 setStaKeyParams->key[keyIndex].keyId;
6461 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6462 setStaKeyParams->key[keyIndex].unicast;
6463 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6464 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6466 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6467 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6468 setStaKeyParams->key[keyIndex].paeRole;
6469 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6470 setStaKeyParams->key[keyIndex].keyLength;
6471 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6472 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6473 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6474 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6475 {
6476 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6477 }
6478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6480 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006481 }
6482 }
6483 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6484 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006485 /* Store set key pointer, as this will be used for response */
6486 /* store Params pass it to WDI */
6487 pWdaParams->pWdaContext = pWDA;
6488 pWdaParams->wdaMsgParam = setStaKeyParams;
6489 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6491 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 if(IS_WDI_STATUS_FAILURE(status))
6493 {
6494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6495 "Failure in set STA Key Req WDI API, free all the memory " );
6496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6497 vos_mem_free(pWdaParams) ;
6498 setStaKeyParams->status = eSIR_FAILURE ;
6499 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 return CONVERT_WDI2VOS_STATUS(status) ;
6502}
Jeff Johnson295189b2012-06-20 16:38:30 -07006503/*
6504 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6505 * send SET Bcast STA key RSP back to PE
6506 */
6507void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6508{
6509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6510 tWDA_CbContext *pWDA;
6511 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 if(NULL == pWdaParams)
6515 {
6516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 VOS_ASSERT(0) ;
6519 return ;
6520 }
6521 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6522 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6524 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006525 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006526 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 return ;
6528}
6529
Jeff Johnson295189b2012-06-20 16:38:30 -07006530/*
6531 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6532 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6533 * Encryption)
6534 */
6535VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6536 tSetStaKeyParams *setStaKeyParams )
6537{
6538 WDI_Status status = WDI_STATUS_SUCCESS ;
6539 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6540 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6541 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6542 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006545 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 if(NULL == wdiSetStaKeyParam)
6547 {
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 VOS_ASSERT(0);
6551 return VOS_STATUS_E_NOMEM;
6552 }
6553 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6554 if(NULL == pWdaParams)
6555 {
6556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 VOS_ASSERT(0);
6559 vos_mem_free(wdiSetStaKeyParam);
6560 return VOS_STATUS_E_NOMEM;
6561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 /* copy set STA key params to WDI structure */
6565 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6566 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6567 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6568 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 if(setStaKeyParams->encType != eSIR_ED_NONE)
6570 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6572 keyIndex++)
6573 {
6574 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6575 setStaKeyParams->key[keyIndex].keyId;
6576 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6577 setStaKeyParams->key[keyIndex].unicast;
6578 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6579 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006580 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6581 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6582 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6583 setStaKeyParams->key[keyIndex].paeRole;
6584 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6585 setStaKeyParams->key[keyIndex].keyLength;
6586 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6587 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6590 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 }
6592 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 /* Store set key pointer, as this will be used for response */
6594 /* store Params pass it to WDI */
6595 pWdaParams->pWdaContext = pWDA;
6596 pWdaParams->wdaMsgParam = setStaKeyParams;
6597 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006598 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6599 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 if(IS_WDI_STATUS_FAILURE(status))
6601 {
6602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6603 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6605 vos_mem_free(pWdaParams) ;
6606 setStaKeyParams->status = eSIR_FAILURE ;
6607 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6608 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 return CONVERT_WDI2VOS_STATUS(status) ;
6610}
Jeff Johnson295189b2012-06-20 16:38:30 -07006611/*
6612 * FUNCTION: WDA_RemoveStaKeyReqCallback
6613 * send SET BSS key RSP back to PE
6614 */
6615void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6616{
6617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6618 tWDA_CbContext *pWDA;
6619 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 if(NULL == pWdaParams)
6623 {
6624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006626 VOS_ASSERT(0) ;
6627 return ;
6628 }
6629 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6630 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6632 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006633 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006635 return ;
6636}
6637
Jeff Johnson295189b2012-06-20 16:38:30 -07006638/*
6639 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6640 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6641 */
6642VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6643 tRemoveStaKeyParams *removeStaKeyParams )
6644{
6645 WDI_Status status = WDI_STATUS_SUCCESS ;
6646 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6647 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6648 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6649 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006652 if(NULL == wdiRemoveStaKeyParam)
6653 {
6654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 VOS_ASSERT(0);
6657 return VOS_STATUS_E_NOMEM;
6658 }
6659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6660 if(NULL == pWdaParams)
6661 {
6662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006664 VOS_ASSERT(0);
6665 vos_mem_free(wdiRemoveStaKeyParam);
6666 return VOS_STATUS_E_NOMEM;
6667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006668 /* copy remove STA key params to WDI structure*/
6669 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6670 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6671 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6672 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6673 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006674 /* Store remove key pointer, as this will be used for response */
6675 /* store Params pass it to WDI */
6676 pWdaParams->pWdaContext = pWDA;
6677 pWdaParams->wdaMsgParam = removeStaKeyParams;
6678 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6680 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 if(IS_WDI_STATUS_FAILURE(status))
6682 {
6683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6684 "Failure in remove STA Key Req WDI API, free all the memory " );
6685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6686 vos_mem_free(pWdaParams) ;
6687 removeStaKeyParams->status = eSIR_FAILURE ;
6688 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 return CONVERT_WDI2VOS_STATUS(status) ;
6691}
Jeff Johnson295189b2012-06-20 16:38:30 -07006692/*
6693 * FUNCTION: WDA_IsHandleSetLinkStateReq
6694 * Update the WDA state and return the status to handle this message or not
6695 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006696WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6697 tWDA_CbContext *pWDA,
6698 tLinkStateParams *linkStateParams)
6699{
6700 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006701 switch(linkStateParams->state)
6702 {
6703 case eSIR_LINK_PREASSOC_STATE:
6704 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6705 /*
6706 * set the WDA state to PRE ASSOC
6707 * copy the BSSID into pWDA to use it in join request and return,
6708 * No need to handle these messages.
6709 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006710 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6711 {
6712 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006714 }
6715 else
6716 {
6717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006718 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006719 VOS_ASSERT(0);
6720 }
6721
6722 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6723 {
6724 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006726 }
6727 else
6728 {
6729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006730 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006731 VOS_ASSERT(0);
6732 }
6733
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6735 *channel and after ) so reset the WDA state to ready when the second
6736 * time UMAC issue the link state with PREASSOC
6737 */
6738 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6739 {
6740 /* RESET WDA state back to WDA_READY_STATE */
6741 pWDA->wdaState = WDA_READY_STATE;
6742 }
6743 else
6744 {
6745 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6746 }
6747 //populate linkState info in WDACbCtxt
6748 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006749 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 default:
6751 if(pWDA->wdaState != WDA_READY_STATE)
6752 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006753 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6754 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6755 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6756 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6757 *the ASSERT in WDA_Stop during module unload.*/
6758 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6759 {
6760 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006761 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006762 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006763 else
6764 {
6765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006766 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006767 status = WDA_IGNORE_SET_LINK_STATE;
6768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 }
6770 break;
6771 }
6772
6773 return status;
6774}
Jeff Johnson295189b2012-06-20 16:38:30 -07006775/*
6776 * FUNCTION: WDA_SetLinkStateCallback
6777 * call back function for set link state from WDI
6778 */
6779void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6780{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306781 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 tLinkStateParams *linkStateParams;
6783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006785 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306786 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 {
6788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006789 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 VOS_ASSERT(0) ;
6791 return ;
6792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306794 if (NULL == pWDA)
6795 {
6796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6797 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6799 vos_mem_free(pWdaParams->wdaMsgParam);
6800 vos_mem_free(pWdaParams);
6801
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306802 VOS_ASSERT(0);
6803 return ;
6804 }
6805
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 /*
6808 * In STA mode start the BA activity check timer after association
6809 * and in AP mode start BA activity check timer after BSS start */
6810 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6811 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006812 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6813 ((status == WDI_STATUS_SUCCESS) &&
6814 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 {
6816 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 /*
6820 * No respone required for WDA_SET_LINK_STATE so free the request
6821 * param here
6822 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6824 vos_mem_free(pWdaParams);
6825
Jeff Johnson295189b2012-06-20 16:38:30 -07006826 return ;
6827}
Jeff Johnson295189b2012-06-20 16:38:30 -07006828/*
6829 * FUNCTION: WDA_ProcessSetLinkState
6830 * Request to WDI to set the link status.
6831 */
6832VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6833 tLinkStateParams *linkStateParams)
6834{
6835 WDI_Status status = WDI_STATUS_SUCCESS ;
6836 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6837 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6838 sizeof(WDI_SetLinkReqParamsType)) ;
6839 tWDA_ReqParams *pWdaParams ;
6840 tpAniSirGlobal pMac;
6841 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6842
6843 if(NULL == pMac)
6844 {
6845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006846 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006848 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 return VOS_STATUS_E_FAILURE;
6850 }
6851
6852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006853 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 if(NULL == wdiSetLinkStateParam)
6855 {
6856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006857 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 VOS_ASSERT(0);
6859 return VOS_STATUS_E_NOMEM;
6860 }
6861 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6862 if(NULL == pWdaParams)
6863 {
6864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 VOS_ASSERT(0);
6867 vos_mem_free(wdiSetLinkStateParam);
6868 return VOS_STATUS_E_NOMEM;
6869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 if(WDA_IGNORE_SET_LINK_STATE ==
6871 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6872 {
6873 status = WDI_STATUS_E_FAILURE;
6874 }
6875 else
6876 {
6877 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6878 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006879 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6880 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6882 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 pWdaParams->pWdaContext = pWDA;
6884 /* Store remove key pointer, as this will be used for response */
6885 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 /* store Params pass it to WDI */
6887 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6888 /* Stop Timer only other than GO role and concurrent session */
6889 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006890 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6892 {
6893 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6896 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 if(IS_WDI_STATUS_FAILURE(status))
6898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6900 "Failure in set link state Req WDI API, free all the memory " );
6901 }
6902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 if(IS_WDI_STATUS_FAILURE(status))
6904 {
6905 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006906 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 vos_mem_free(pWdaParams);
6908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 return CONVERT_WDI2VOS_STATUS(status) ;
6910}
Jeff Johnson295189b2012-06-20 16:38:30 -07006911/*
6912 * FUNCTION: WDA_GetStatsReqParamsCallback
6913 * send the response to PE with Stats received from WDI
6914 */
6915void WDA_GetStatsReqParamsCallback(
6916 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6917 void* pUserData)
6918{
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306920 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006921
6922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006923 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 pGetPEStatsRspParams =
6925 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6926 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6927
6928 if(NULL == pGetPEStatsRspParams)
6929 {
6930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 VOS_ASSERT(0);
6933 return;
6934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306936 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6938 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006939
6940 //Fill the Session Id Properly in PE
6941 pGetPEStatsRspParams->sessionId = 0;
6942 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006943 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6945 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 vos_mem_copy( pGetPEStatsRspParams + 1,
6947 wdiGetStatsRsp + 1,
6948 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306949
6950 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6951 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6952 vosMsg.bodyval = 0;
6953 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6954 (vos_msg_t*)&vosMsg))
6955 {
6956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6957 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6958 vos_mem_free(pGetPEStatsRspParams);
6959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006960
6961 return;
6962}
6963
Jeff Johnson295189b2012-06-20 16:38:30 -07006964/*
6965 * FUNCTION: WDA_ProcessGetStatsReq
6966 * Request to WDI to get the statistics
6967 */
6968VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6969 tAniGetPEStatsReq *pGetStatsParams)
6970{
6971 WDI_Status status = WDI_STATUS_SUCCESS ;
6972 WDI_GetStatsReqParamsType wdiGetStatsParam;
6973 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306974 vos_msg_t vosMsg;
6975
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006977 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6979 pGetStatsParams->staId;
6980 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6981 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006982 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 status = WDI_GetStatsReq(&wdiGetStatsParam,
6984 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 if(IS_WDI_STATUS_FAILURE(status))
6986 {
6987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6988 "Failure in Get Stats Req WDI API, free all the memory " );
6989 pGetPEStatsRspParams =
6990 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6991 if(NULL == pGetPEStatsRspParams)
6992 {
6993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006996 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 return VOS_STATUS_E_NOMEM;
6998 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306999 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
7001 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
7002 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307003
7004 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7005 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7006 vosMsg.bodyval = 0;
7007 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7008 (vos_msg_t*)&vosMsg))
7009 {
7010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7011 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7012 vos_mem_free(pGetPEStatsRspParams);
7013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 /* Free the request message */
7016 vos_mem_free(pGetStatsParams);
7017 return CONVERT_WDI2VOS_STATUS(status);
7018}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007019
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007020#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007021/*
7022 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
7023 * send the response to PE with roam Rssi received from WDI
7024 */
7025void WDA_GetRoamRssiReqParamsCallback(
7026 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
7027 void* pUserData)
7028{
7029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7030 tWDA_CbContext *pWDA = NULL;
7031 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7032 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
7033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7034 "<------ %s " ,__func__);
7035 if(NULL == pWdaParams)
7036 {
7037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7038 "%s: pWdaParams received NULL", __func__);
7039 VOS_ASSERT(0) ;
7040 return ;
7041 }
7042 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7043 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
7044
7045 if(NULL == pGetRoamRssiReqParams)
7046 {
7047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7048 "%s: pGetRoamRssiReqParams received NULL", __func__);
7049 VOS_ASSERT(0);
7050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7051 vos_mem_free(pWdaParams);
7052 return ;
7053 }
7054 pGetRoamRssiRspParams =
7055 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7056
7057 if(NULL == pGetRoamRssiRspParams)
7058 {
7059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7060 "%s: VOS MEM Alloc Failure", __func__);
7061 VOS_ASSERT(0);
7062 return;
7063 }
7064 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
7065 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007066 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007067 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
7068 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
7069
7070 /* Assign get roam rssi req (backup) in to the response */
7071 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
7072
7073 /* free WDI command buffer */
7074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7075 vos_mem_free(pWdaParams) ;
7076
7077 /* send response to UMAC*/
7078 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
7079
7080 return;
7081}
7082
7083
7084
7085/*
7086 * FUNCTION: WDA_ProcessGetRoamRssiReq
7087 * Request to WDI to get the statistics
7088 */
7089VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
7090 tAniGetRssiReq *pGetRoamRssiParams)
7091{
7092 WDI_Status status = WDI_STATUS_SUCCESS ;
7093 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
7094 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7095 tWDA_ReqParams *pWdaParams = NULL;
7096
7097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7098 "------> %s " ,__func__);
7099 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
7100 pGetRoamRssiParams->staId;
7101 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
7102
7103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7104 if(NULL == pWdaParams)
7105 {
7106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7107 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307108 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007109 VOS_ASSERT(0);
7110 return VOS_STATUS_E_NOMEM;
7111 }
7112
7113 /* Store Init Req pointer, as this will be used for response */
7114 pWdaParams->pWdaContext = pWDA;
7115
7116 /* Take Get roam Rssi req backup as it stores the callback to be called after
7117 receiving the response */
7118 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
7119 pWdaParams->wdaWdiApiMsgParam = NULL;
7120
7121 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
7122 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
7123 if(IS_WDI_STATUS_FAILURE(status))
7124 {
7125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7126 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
7127 pGetRoamRssiRspParams =
7128 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7129 if(NULL == pGetRoamRssiRspParams)
7130 {
7131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7132 "%s: VOS MEM Alloc Failure", __func__);
7133 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05307134 vos_mem_free(pGetRoamRssiParams);
7135 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007136 return VOS_STATUS_E_NOMEM;
7137 }
7138 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
7139 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
7140 pGetRoamRssiRspParams->rssi = 0;
7141 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
7142 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
7143 (void *)pGetRoamRssiRspParams, 0) ;
7144 }
7145 return CONVERT_WDI2VOS_STATUS(status);
7146}
7147#endif
7148
7149
Jeff Johnson295189b2012-06-20 16:38:30 -07007150/*
7151 * FUNCTION: WDA_UpdateEDCAParamCallback
7152 * call back function for Update EDCA params from WDI
7153 */
7154void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
7155{
7156 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7157 tEdcaParams *pEdcaParams;
7158
7159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007160 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 if(NULL == pWdaParams)
7162 {
7163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007164 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 VOS_ASSERT(0) ;
7166 return ;
7167 }
7168 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7170 vos_mem_free(pWdaParams);
7171 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 return ;
7173}
Jeff Johnson295189b2012-06-20 16:38:30 -07007174/*
7175 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
7176 * Request to WDI to Update the EDCA params.
7177 */
7178VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
7179 tEdcaParams *pEdcaParams)
7180{
7181 WDI_Status status = WDI_STATUS_SUCCESS ;
7182 WDI_UpdateEDCAParamsType *wdiEdcaParam =
7183 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
7184 sizeof(WDI_UpdateEDCAParamsType)) ;
7185 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007187 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 if(NULL == wdiEdcaParam)
7189 {
7190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007193 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 return VOS_STATUS_E_NOMEM;
7195 }
7196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7197 if(NULL == pWdaParams)
7198 {
7199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 VOS_ASSERT(0);
7202 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007203 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 return VOS_STATUS_E_NOMEM;
7205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07007207 /*
7208 Since firmware is not using highperformance flag, we have removed
7209 this flag from wdiEDCAInfo structure to match sizeof the structure
7210 between host and firmware.In future if we are planning to use
7211 highperformance flag then Please define this flag in wdiEDCAInfo
7212 structure, update it here and send it to firmware. i.e.
7213 Following is the original line which we removed as part of the fix
7214 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
7215 pEdcaParams->highPerformance;
7216 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
7218 &pEdcaParams->acbe);
7219 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
7220 &pEdcaParams->acbk);
7221 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
7222 &pEdcaParams->acvi);
7223 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
7224 &pEdcaParams->acvo);
7225 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 pWdaParams->pWdaContext = pWDA;
7227 /* Store remove key pointer, as this will be used for response */
7228 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 /* store Params pass it to WDI */
7230 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 status = WDI_UpdateEDCAParams(wdiEdcaParam,
7232 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007233 if(IS_WDI_STATUS_FAILURE(status))
7234 {
7235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7236 "Failure in Update EDCA Params WDI API, free all the memory " );
7237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7238 vos_mem_free(pWdaParams);
7239 vos_mem_free(pEdcaParams);
7240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 return CONVERT_WDI2VOS_STATUS(status) ;
7242}
Jeff Johnson295189b2012-06-20 16:38:30 -07007243/*
7244 * FUNCTION: WDA_AddBAReqCallback
7245 * send ADD BA RSP back to PE
7246 */
7247void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
7248 void* pUserData)
7249{
7250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7251 tWDA_CbContext *pWDA;
7252 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007254 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307255 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 {
7257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007258 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 VOS_ASSERT(0) ;
7260 return ;
7261 }
7262 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307263 if (NULL == pWDA)
7264 {
7265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7266 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7268 vos_mem_free(pWdaParams->wdaMsgParam);
7269 vos_mem_free(pWdaParams);
7270
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307271 VOS_ASSERT(0);
7272 return ;
7273 }
7274
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7277 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007278 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 return ;
7281}
7282
Jeff Johnson295189b2012-06-20 16:38:30 -07007283/*
7284 * FUNCTION: WDA_ProcessAddBAReq
7285 * Request to WDI to Update the ADDBA REQ params.
7286 */
7287VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307288 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007289{
Jeff Johnson43971f52012-07-17 12:26:56 -07007290 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007291 WDI_AddBAReqParamsType *wdiAddBAReqParam =
7292 (WDI_AddBAReqParamsType *)vos_mem_malloc(
7293 sizeof(WDI_AddBAReqParamsType)) ;
7294 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007296 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 if(NULL == wdiAddBAReqParam)
7298 {
7299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007301 VOS_ASSERT(0);
7302 return VOS_STATUS_E_NOMEM;
7303 }
7304 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7305 if(NULL == pWdaParams)
7306 {
7307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007308 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 VOS_ASSERT(0);
7310 vos_mem_free(wdiAddBAReqParam);
7311 return VOS_STATUS_E_NOMEM;
7312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007313 do
7314 {
7315 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 wdiAddBaInfo->ucSTAIdx = staIdx ;
7317 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05307318 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 } while(0) ;
7320 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007321 pWdaParams->pWdaContext = pWDA;
7322 /* store Params pass it to WDI */
7323 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
7324 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007325 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
7326 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007327
Jeff Johnson43971f52012-07-17 12:26:56 -07007328 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 {
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07007331 "Failure in ADD BA REQ Params WDI API, free all the memory" );
7332 status = CONVERT_WDI2VOS_STATUS(wstatus);
7333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 vos_mem_free(pWdaParams);
7335 pAddBAReqParams->status = eSIR_FAILURE;
7336 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7337 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007338 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007339}
Jeff Johnson295189b2012-06-20 16:38:30 -07007340/*
7341 * FUNCTION: WDA_AddBASessionReqCallback
7342 * send ADD BA SESSION RSP back to PE/(or TL)
7343 */
7344void WDA_AddBASessionReqCallback(
7345 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
7346{
7347 VOS_STATUS status = VOS_STATUS_SUCCESS ;
7348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307349 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007352 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007353 if(NULL == pWdaParams)
7354 {
7355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007356 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 VOS_ASSERT(0) ;
7358 return ;
7359 }
7360 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307361 if (NULL == pWDA)
7362 {
7363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7364 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7366 vos_mem_free(pWdaParams->wdaMsgParam);
7367 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307368 VOS_ASSERT(0);
7369 return ;
7370 }
7371
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 if( NULL == pAddBAReqParams )
7374 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007376 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7379 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 return ;
7381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7383 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307385 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 * another request to HAL(/WDI) (ADD_BA_REQ)
7387 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007388 if((VOS_STATUS_SUCCESS ==
7389 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307390 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 {
7392 /* Update TL with BA info received from HAL/WDI */
7393 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7394 wdiAddBaSession->usBaSessionID,
7395 wdiAddBaSession->ucSTAIdx,
7396 wdiAddBaSession->ucBaTID,
7397 wdiAddBaSession->ucBaBufferSize,
7398 wdiAddBaSession->ucWinSize,
7399 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307401 wdiAddBaSession->ucSTAIdx,
7402 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 }
7404 else
7405 {
7406 pAddBAReqParams->status =
7407 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7408
7409 /* Setting Flag to indicate that Set BA is success */
7410 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7411 {
7412 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7413 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7414 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 /*Reset the WDA state to READY */
7419 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 return ;
7421}
7422
Jeff Johnson295189b2012-06-20 16:38:30 -07007423/*
7424 * FUNCTION: WDA_ProcessAddBASessionReq
7425 * Request to WDI to Update the ADDBA REQ params.
7426 */
7427VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7428 tAddBAParams *pAddBAReqParams)
7429{
7430 WDI_Status status = WDI_STATUS_SUCCESS ;
7431 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7432 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7433 sizeof(WDI_AddBASessionReqParamsType)) ;
7434 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007435 WLANTL_STAStateType tlSTAState = 0;
7436
Jeff Johnson295189b2012-06-20 16:38:30 -07007437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007438 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 if(NULL == wdiAddBASessionReqParam)
7440 {
7441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 VOS_ASSERT(0);
7444 return VOS_STATUS_E_NOMEM;
7445 }
7446 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7447 if(NULL == pWdaParams)
7448 {
7449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 VOS_ASSERT(0);
7452 vos_mem_free(wdiAddBASessionReqParam);
7453 return VOS_STATUS_E_NOMEM;
7454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007455 /*
7456 * Populate ADD BA parameters and pass these paarmeters to WDI.
7457 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7458 * the state to track if these is BA recipient case or BA initiator
7459 * case.
7460 */
7461 do
7462 {
7463 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7464 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7465 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7466 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7467 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7468 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7469 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7472 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7473 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7474 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7475 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307476
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 }while(0) ;
7478 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 pWdaParams->pWdaContext = pWDA;
7480 /* Store ADD BA pointer, as this will be used for response */
7481 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7482 /* store Params pass it to WDI */
7483 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007484
7485 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7486 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7487 */
7488 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7489 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7490 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007492 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007493 status = WDI_STATUS_E_NOT_ALLOWED;
7494 pAddBAReqParams->status =
7495 CONVERT_WDI2SIR_STATUS(status) ;
7496 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7497 /*Reset the WDA state to READY */
7498 pWDA->wdaState = WDA_READY_STATE;
7499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7500 vos_mem_free(pWdaParams);
7501
7502 return CONVERT_WDI2VOS_STATUS(status) ;
7503 }
7504
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7506 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 if(IS_WDI_STATUS_FAILURE(status))
7508 {
7509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007510 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007512 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007513 pAddBAReqParams->status =
7514 CONVERT_WDI2SIR_STATUS(status) ;
7515 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007516 /*Reset the WDA state to READY */
7517 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 vos_mem_free(pWdaParams);
7520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007522}
Jeff Johnson295189b2012-06-20 16:38:30 -07007523/*
7524 * FUNCTION: WDA_DelBANotifyTL
7525 * send DEL BA IND to TL
7526 */
7527void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7528 tDelBAParams *pDelBAReqParams)
7529{
7530 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7531 //tSirMsgQ msg;
7532 vos_msg_t vosMsg;
7533 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 if(NULL == pDelBAInd)
7535 {
7536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 VOS_ASSERT(0) ;
7539 return;
7540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7542 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7543 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7544 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007545
Jeff Johnson295189b2012-06-20 16:38:30 -07007546
7547 vosMsg.type = WDA_DELETEBA_IND;
7548 vosMsg.bodyptr = pDelBAInd;
7549 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7550 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7551 {
7552 vosStatus = VOS_STATUS_E_BADMSG;
7553 }
7554}
Jeff Johnson295189b2012-06-20 16:38:30 -07007555/*
7556 * FUNCTION: WDA_DelBAReqCallback
7557 * send DEL BA RSP back to PE
7558 */
7559void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7560{
7561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7562 tWDA_CbContext *pWDA;
7563 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007565 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 if(NULL == pWdaParams)
7567 {
7568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007569 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 VOS_ASSERT(0) ;
7571 return ;
7572 }
7573 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307574
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 /* Notify TL about DEL BA in case of recipinet */
7577 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7578 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7579 {
7580 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 /*
7583 * No respone required for WDA_DELBA_IND so just free the request
7584 * param here
7585 */
7586 vos_mem_free(pDelBAReqParams);
7587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7588 vos_mem_free(pWdaParams);
7589 return ;
7590}
7591
Jeff Johnson295189b2012-06-20 16:38:30 -07007592/*
7593 * FUNCTION: WDA_ProcessDelBAReq
7594 * Request to WDI to Update the DELBA REQ params.
7595 */
7596VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7597 tDelBAParams *pDelBAReqParams)
7598{
7599 WDI_Status status = WDI_STATUS_SUCCESS ;
7600 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7601 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7602 sizeof(WDI_DelBAReqParamsType)) ;
7603 tWDA_ReqParams *pWdaParams ;
7604 tANI_U16 staIdx = 0;
7605 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007607 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 if(NULL == wdiDelBAReqParam)
7609 {
7610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 VOS_ASSERT(0);
7613 return VOS_STATUS_E_NOMEM;
7614 }
7615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7616 if(NULL == pWdaParams)
7617 {
7618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 VOS_ASSERT(0);
7621 vos_mem_free(wdiDelBAReqParam);
7622 return VOS_STATUS_E_NOMEM;
7623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7625 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7626 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7627 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 pWdaParams->pWdaContext = pWDA;
7629 /* Store DEL BA pointer, as this will be used for response */
7630 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 /* store Params pass it to WDI */
7632 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007633 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7634 * maintained in WDA, so that WDA can retry for another BA session
7635 */
7636 staIdx = pDelBAReqParams->staIdx;
7637 tid = pDelBAReqParams->baTID;
7638 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 status = WDI_DelBAReq(wdiDelBAReqParam,
7640 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 if(IS_WDI_STATUS_FAILURE(status))
7642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7644 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7646 vos_mem_free(pWdaParams->wdaMsgParam);
7647 vos_mem_free(pWdaParams);
7648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007649 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007650}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007651
7652/*
7653 * FUNCTION: WDA_UpdateChReqCallback
7654 *
7655 */
7656void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7657{
Siddharth Bhala006c122014-05-03 12:13:27 +05307658 tWDA_ReqParams *pWdaParams;
7659 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7660 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7661 WDI_UpdateChannelReqinfoType *pChanInfoType;
7662 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007663
7664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7665 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307666 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007667 {
7668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307669 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007670 VOS_ASSERT(0);
7671 return;
7672 }
7673
Siddharth Bhala006c122014-05-03 12:13:27 +05307674 pWdaParams = (tWDA_ReqParams *)pUserData;
7675 pwdiUpdateChReqParam =
7676 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7677 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7678 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7679 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007680 /*
7681 * currently there is no response message is expected between PE and
7682 * WDA, Failure return from WDI is a ASSERT condition
7683 */
7684 vos_mem_free(pChanInfoType);
7685 vos_mem_free(pChanList);
7686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7687 vos_mem_free(pWdaParams);
7688
7689 return;
7690}
7691
7692/*
7693 * FUNCTION: WDA_ProcessUpdateChannelList
7694 * Request to WDI to Update the ChannelList params.
7695 */
7696VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7697 tSirUpdateChanList *pChanList)
7698{
7699 WDI_Status status = WDI_STATUS_SUCCESS;
7700 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7701 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7702 WDI_UpdateChannelReqinfoType *pChanInfoType;
7703 tWDA_ReqParams *pWdaParams;
7704 wpt_uint8 i;
7705
7706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7707 "------> %s " ,__func__);
7708 if(NULL == pChanList)
7709 {
7710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7711 "%s: NULL pChanList", __func__);
7712 VOS_ASSERT(0);
7713 return VOS_STATUS_E_INVAL;
7714 }
7715
7716 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7717 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307718 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007719 "Update channel list capability Not Supported");
7720 vos_mem_free(pChanList);
7721 return VOS_STATUS_E_INVAL;
7722 }
7723
7724 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7725 sizeof(WDI_UpdateChReqParamsType));
7726 if(NULL == pwdiUpdateChReqParam)
7727 {
7728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7729 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7730 __func__);
7731 VOS_ASSERT(0);
7732 vos_mem_free(pChanList);
7733 return VOS_STATUS_E_NOMEM;
7734 }
7735 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7736 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7737 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7738 pChanList->numChan);
7739 if(NULL == pChanInfoType)
7740 {
7741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7742 "%s: VOS MEM Alloc Failure", __func__);
7743 VOS_ASSERT(0);
7744 vos_mem_free(pChanList);
7745 vos_mem_free(pwdiUpdateChReqParam);
7746 return VOS_STATUS_E_NOMEM;
7747 }
7748 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7749 * pChanList->numChan);
7750 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7751
7752 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7753 if(NULL == pWdaParams)
7754 {
7755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7756 "%s: VOS MEM Alloc Failure", __func__);
7757 VOS_ASSERT(0);
7758 vos_mem_free(pChanList);
7759 vos_mem_free(pChanInfoType);
7760 vos_mem_free(pwdiUpdateChReqParam);
7761 return VOS_STATUS_E_NOMEM;
7762 }
7763 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7764
7765 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7766 {
7767 pChanInfoType->mhz =
7768 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7769
7770 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7771 pChanInfoType->band_center_freq2 = 0;
7772
7773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7774 "chan[%d] = %u", i, pChanInfoType->mhz);
7775 if (pChanList->chanParam[i].dfsSet)
7776 {
7777 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7779 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7780 pChanList->chanParam[i].dfsSet);
7781 }
7782
7783 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7784 {
7785 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7786 }
7787 else
7788 {
7789 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7790 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7791 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7792 }
7793
7794 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7795 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307796 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007797 pChanInfoType++;
7798 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007799 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7800 pWdaParams->pWdaContext = pWDA;
7801 pWdaParams->wdaMsgParam = (void *)pChanList;
7802 /* store Params pass it to WDI */
7803 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7804 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7805 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7806 if(IS_WDI_STATUS_FAILURE(status))
7807 {
7808 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7809 "Failure in Update Channel REQ Params WDI API, free all the memory");
7810 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7811 vos_mem_free(pwdiUpdateChReqParam);
7812 vos_mem_free(pWdaParams->wdaMsgParam);
7813 vos_mem_free(pWdaParams);
7814 }
7815 return CONVERT_WDI2VOS_STATUS(status);
7816}
7817
Jeff Johnson295189b2012-06-20 16:38:30 -07007818/*
7819 * FUNCTION: WDA_AddTSReqCallback
7820 * send ADD TS RSP back to PE
7821 */
7822void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7823{
7824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307825 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 tAddTsParams *pAddTsReqParams;
7827
7828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007829 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007830 if(NULL == pWdaParams)
7831 {
7832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007833 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 VOS_ASSERT(0) ;
7835 return ;
7836 }
7837 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307838 if (NULL == pWDA)
7839 {
7840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7841 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7843 vos_mem_free(pWdaParams->wdaMsgParam);
7844 vos_mem_free(pWdaParams);
7845
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307846 VOS_ASSERT(0);
7847 return ;
7848 }
7849
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7852 vos_mem_free(pWdaParams);
7853
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007854 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 return ;
7857}
7858
Jeff Johnson295189b2012-06-20 16:38:30 -07007859/*
7860 * FUNCTION: WDA_ProcessAddTSReq
7861 * Request to WDI to Update the ADD TS REQ params.
7862 */
7863VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7864 tAddTsParams *pAddTsReqParams)
7865{
7866 WDI_Status status = WDI_STATUS_SUCCESS ;
7867 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7868 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7869 sizeof(WDI_AddTSReqParamsType)) ;
7870 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007872 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 if(NULL == wdiAddTSReqParam)
7874 {
7875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 VOS_ASSERT(0);
7878 return VOS_STATUS_E_NOMEM;
7879 }
7880 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7881 if(NULL == pWdaParams)
7882 {
7883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 VOS_ASSERT(0);
7886 vos_mem_free(wdiAddTSReqParam);
7887 return VOS_STATUS_E_NOMEM;
7888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007889 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7890 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 //TS IE
7892 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7893 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7894 pAddTsReqParams->tspec.length;
7895
7896 //TS IE : TS INFO : TRAFFIC
7897 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7898 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7899 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7900 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7901 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7902 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7903 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7904 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7905 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7906 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7907 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7908 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7909 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7910 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7911 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7912 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7913
7914 //TS IE : TS INFO : SCHEDULE
7915 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7916 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7917 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7918 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 //TS IE
7920 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7921 pAddTsReqParams->tspec.nomMsduSz;
7922 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7923 pAddTsReqParams->tspec.maxMsduSz;
7924 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7925 pAddTsReqParams->tspec.minSvcInterval;
7926 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7927 pAddTsReqParams->tspec.maxSvcInterval;
7928 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7929 pAddTsReqParams->tspec.inactInterval;
7930 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7931 pAddTsReqParams->tspec.suspendInterval;
7932 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7933 pAddTsReqParams->tspec.svcStartTime;
7934 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7935 pAddTsReqParams->tspec.minDataRate;
7936 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7937 pAddTsReqParams->tspec.meanDataRate;
7938 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7939 pAddTsReqParams->tspec.peakDataRate;
7940 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7941 pAddTsReqParams->tspec.maxBurstSz;
7942 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7943 pAddTsReqParams->tspec.delayBound;
7944 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7945 pAddTsReqParams->tspec.minPhyRate;
7946 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7947 pAddTsReqParams->tspec.surplusBw;
7948 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7949 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 /* TODO: tAddTsParams doesn't have the following fields */
7951#if 0
7952 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7953 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7954 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7955 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7956#endif
7957 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7958
7959 pWdaParams->pWdaContext = pWDA;
7960 /* Store ADD TS pointer, as this will be used for response */
7961 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 /* store Params pass it to WDI */
7963 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007964 status = WDI_AddTSReq(wdiAddTSReqParam,
7965 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 if(IS_WDI_STATUS_FAILURE(status))
7967 {
7968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7969 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7971 vos_mem_free(pWdaParams);
7972 pAddTsReqParams->status = eSIR_FAILURE ;
7973 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007976}
7977
Jeff Johnson295189b2012-06-20 16:38:30 -07007978/*
7979 * FUNCTION: WDA_DelTSReqCallback
7980 * send DEL TS RSP back to PE
7981 */
7982void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7983{
7984 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007986 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7988 vos_mem_free(pWdaParams->wdaMsgParam) ;
7989 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007990 /*
7991 * No respone required for WDA_DEL_TS_REQ so just free the request
7992 * param here
7993 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 return ;
7995}
7996
Jeff Johnson295189b2012-06-20 16:38:30 -07007997/*
7998 * FUNCTION: WDA_ProcessDelTSReq
7999 * Request to WDI to Update the DELTS REQ params.
8000 */
8001VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
8002 tDelTsParams *pDelTSReqParams)
8003{
8004 WDI_Status status = WDI_STATUS_SUCCESS ;
8005 WDI_DelTSReqParamsType *wdiDelTSReqParam =
8006 (WDI_DelTSReqParamsType *)vos_mem_malloc(
8007 sizeof(WDI_DelTSReqParamsType)) ;
8008 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008010 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008011 if(NULL == wdiDelTSReqParam)
8012 {
8013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 VOS_ASSERT(0);
8016 return VOS_STATUS_E_NOMEM;
8017 }
8018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8019 if(NULL == pWdaParams)
8020 {
8021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 VOS_ASSERT(0);
8024 vos_mem_free(wdiDelTSReqParam);
8025 return VOS_STATUS_E_NOMEM;
8026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
8028 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
8029 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
8030 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
8031 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 pWdaParams->pWdaContext = pWDA;
8033 /* Store DEL TS pointer, as this will be used for response */
8034 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 /* store Params pass it to WDI */
8036 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 status = WDI_DelTSReq(wdiDelTSReqParam,
8038 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 if(IS_WDI_STATUS_FAILURE(status))
8040 {
8041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8042 "Failure in DEL TS REQ Params WDI API, free all the memory " );
8043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8044 vos_mem_free(pWdaParams->wdaMsgParam);
8045 vos_mem_free(pWdaParams);
8046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008048}
Jeff Johnson295189b2012-06-20 16:38:30 -07008049/*
8050 * FUNCTION: WDA_UpdateBeaconParamsCallback
8051 * Free the memory. No need to send any response to PE in this case
8052 */
8053void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
8054{
8055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008057 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 if(NULL == pWdaParams)
8059 {
8060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008061 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_ASSERT(0) ;
8063 return ;
8064 }
8065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8066 vos_mem_free(pWdaParams->wdaMsgParam) ;
8067 vos_mem_free(pWdaParams);
8068 /*
8069 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
8070 * param here
8071 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 return ;
8073}
Jeff Johnson295189b2012-06-20 16:38:30 -07008074/*
8075 * FUNCTION: WDA_ProcessUpdateBeaconParams
8076 * Request to WDI to send the beacon parameters to HAL to update the Hardware
8077 */
8078VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
8079 tUpdateBeaconParams *pUpdateBeaconParams)
8080{
8081 WDI_Status status = WDI_STATUS_SUCCESS ;
8082 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
8083 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
8084 sizeof(WDI_UpdateBeaconParamsType)) ;
8085 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008087 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 if(NULL == wdiUpdateBeaconParams)
8089 {
8090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 VOS_ASSERT(0);
8093 return VOS_STATUS_E_NOMEM;
8094 }
8095 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8096 if(NULL == pWdaParams)
8097 {
8098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008100 VOS_ASSERT(0);
8101 vos_mem_free(wdiUpdateBeaconParams);
8102 return VOS_STATUS_E_NOMEM;
8103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008104 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
8105 pUpdateBeaconParams->bssIdx;
8106 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
8107 pUpdateBeaconParams->fShortPreamble;
8108 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
8109 pUpdateBeaconParams->fShortSlotTime;
8110 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
8111 pUpdateBeaconParams->beaconInterval;
8112 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
8113 pUpdateBeaconParams->llaCoexist;
8114 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
8115 pUpdateBeaconParams->llbCoexist;
8116 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
8117 pUpdateBeaconParams->llgCoexist;
8118 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
8119 pUpdateBeaconParams->ht20MhzCoexist;
8120 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
8121 pUpdateBeaconParams->llnNonGFCoexist;
8122 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
8123 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
8124 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
8125 pUpdateBeaconParams->fRIFSMode;
8126 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
8127 pUpdateBeaconParams->paramChangeBitmap;
8128 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
8129
8130 pWdaParams->pWdaContext = pWDA;
8131 /* Store UpdateBeacon Req pointer, as this will be used for response */
8132 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 /* store Params pass it to WDI */
8134 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008135 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
8136 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
8137 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008138 if(IS_WDI_STATUS_FAILURE(status))
8139 {
8140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8141 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
8142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8143 vos_mem_free(pWdaParams->wdaMsgParam);
8144 vos_mem_free(pWdaParams);
8145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008147}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008148#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07008149/*
8150 * FUNCTION: WDA_TSMStatsReqCallback
8151 * send TSM Stats RSP back to PE
8152 */
8153void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
8154{
8155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8156 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008157 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
8158 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008159
8160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008161 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 if(NULL == pWdaParams)
8163 {
8164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008165 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 VOS_ASSERT(0) ;
8167 return ;
8168 }
8169 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308170 if (NULL == pWDA)
8171 {
8172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8173 "%s:pWDA is NULL", __func__);
8174 VOS_ASSERT(0);
8175 return ;
8176 }
8177
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008178 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
8179
8180 if(NULL == pGetTsmStatsReqParams)
8181 {
8182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8183 "%s: pGetTsmStatsReqParams received NULL", __func__);
8184 VOS_ASSERT(0);
8185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8186 vos_mem_free(pWdaParams);
8187 return;
8188 }
8189
8190 pTsmRspParams =
8191 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 if( NULL == pTsmRspParams )
8193 {
8194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008195 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008196 VOS_ASSERT( 0 );
8197 return ;
8198 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008199 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
8200 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
8201 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
8202
Jeff Johnson295189b2012-06-20 16:38:30 -07008203 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
8204 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
8205 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
8206 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
8207 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
8208 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
8209 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
8210 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
8211 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
8212 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008213
8214 /* Assign get tsm stats req req (backup) in to the response */
8215 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
8216
8217 /* free WDI command buffer */
8218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8219 vos_mem_free(pWdaParams);
8220
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008222 return ;
8223}
8224
8225
Jeff Johnson295189b2012-06-20 16:38:30 -07008226/*
8227 * FUNCTION: WDA_ProcessTsmStatsReq
8228 * Request to WDI to get the TSM Stats params.
8229 */
8230VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008231 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07008232{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008233 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008235 tWDA_ReqParams *pWdaParams = NULL;
8236 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
8237
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008239 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008240 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
8241 sizeof(WDI_TSMStatsReqParamsType));
8242 if(NULL == wdiTSMReqParam)
8243 {
8244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 VOS_ASSERT(0);
8247 return VOS_STATUS_E_NOMEM;
8248 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8250 if(NULL == pWdaParams)
8251 {
8252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008254 VOS_ASSERT(0);
8255 vos_mem_free(wdiTSMReqParam);
8256 return VOS_STATUS_E_NOMEM;
8257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
8259 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
8260 pTsmStats->bssId,
8261 sizeof(wpt_macAddr));
8262 wdiTSMReqParam->wdiReqStatusCB = NULL ;
8263
8264 pWdaParams->pWdaContext = pWDA;
8265 /* Store TSM Stats pointer, as this will be used for response */
8266 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008267 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008268 status = WDI_TSMStatsReq(wdiTSMReqParam,
8269 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 if(IS_WDI_STATUS_FAILURE(status))
8271 {
8272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8273 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008274 vos_mem_free(pWdaParams);
8275
8276 pGetTsmStatsRspParams =
8277 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
8278 if(NULL == pGetTsmStatsRspParams)
8279 {
8280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8281 "%s: VOS MEM Alloc Failure", __func__);
8282 VOS_ASSERT(0);
8283 vos_mem_free(pTsmStats);
8284 return VOS_STATUS_E_NOMEM;
8285 }
8286 pGetTsmStatsRspParams->staId = pTsmStats->staId;
8287 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
8288 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
8289
8290 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 return CONVERT_WDI2VOS_STATUS(status) ;
8293}
8294#endif
8295/*
8296 * FUNCTION: WDA_SendBeaconParamsCallback
8297 * No need to send any response to PE in this case
8298 */
8299void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
8300{
8301
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008303 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 return ;
8305}
Jeff Johnson295189b2012-06-20 16:38:30 -07008306/*
8307 * FUNCTION: WDA_ProcessSendBeacon
8308 * Request to WDI to send the beacon template to HAL to update the TPE memory and
8309 * start beacon trasmission
8310 */
8311VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
8312 tSendbeaconParams *pSendbeaconParams)
8313{
8314 WDI_Status status = WDI_STATUS_SUCCESS ;
8315 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008317 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
8319 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
8320 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
8321 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
8323 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308324 /* p2pIeOffset should be atleast greater than timIeOffset */
8325 if ((pSendbeaconParams->p2pIeOffset != 0) &&
8326 (pSendbeaconParams->p2pIeOffset <
8327 pSendbeaconParams->timIeOffset))
8328 {
8329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8330 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308331 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308332 VOS_ASSERT( 0 );
8333 return WDI_STATUS_E_FAILURE;
8334 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
8336 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 /* Copy the beacon template to local buffer */
8338 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
8339 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
8340 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
8341
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
8343 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 if(IS_WDI_STATUS_FAILURE(status))
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8347 "Failure in SEND BEACON REQ Params WDI API" );
8348 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 vos_mem_free(pSendbeaconParams);
8350 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008351}
Jeff Johnson295189b2012-06-20 16:38:30 -07008352/*
8353 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8354 * No need to send any response to PE in this case
8355 */
8356void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8357{
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008359 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 return ;
8361}
8362
Jeff Johnson295189b2012-06-20 16:38:30 -07008363/*
8364 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8365 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8366 * send probe response
8367 */
8368VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8369 tSendProbeRespParams *pSendProbeRspParams)
8370{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008371 WDI_Status status = WDI_STATUS_SUCCESS;
8372 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8373 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008375 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008376
8377 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308378 {
8379 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008380 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308381 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008382
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008384 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008386 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 /* Copy the Probe Response template to local buffer */
8389 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008390 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07008391 pSendProbeRspParams->pProbeRespTemplate,
8392 pSendProbeRspParams->probeRespTemplateLen);
8393 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008394 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8396 WDI_PROBE_REQ_BITMAP_IE_LEN);
8397
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008398 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008399
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008400 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 if(IS_WDI_STATUS_FAILURE(status))
8403 {
8404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8405 "Failure in SEND Probe RSP Params WDI API" );
8406 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008408 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008410}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008411#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008412/*
8413 * FUNCTION: WDA_SetMaxTxPowerCallBack
8414 * send the response to PE with power value received from WDI
8415 */
8416void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8417 void* pUserData)
8418{
8419 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8420 tWDA_CbContext *pWDA = NULL;
8421 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8422
8423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008424 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 if(NULL == pWdaParams)
8426 {
8427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008428 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 VOS_ASSERT(0) ;
8430 return ;
8431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308433 if (NULL == pWDA)
8434 {
8435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8436 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8438 vos_mem_free(pWdaParams->wdaMsgParam);
8439 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308440 VOS_ASSERT(0);
8441 return ;
8442 }
8443
Jeff Johnson295189b2012-06-20 16:38:30 -07008444 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 if( NULL == pMaxTxPowerParams )
8446 {
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008448 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008449 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8451 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 return ;
8453 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008454
Jeff Johnson295189b2012-06-20 16:38:30 -07008455
8456 /*need to free memory for the pointers used in the
8457 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8459 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008460 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008461
Jeff Johnson295189b2012-06-20 16:38:30 -07008462
8463 /* send response to UMAC*/
8464 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8465
8466 return;
8467}
Jeff Johnson295189b2012-06-20 16:38:30 -07008468/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008469 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 * Request to WDI to send set Max Tx Power Request
8471 */
8472 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8473 tMaxTxPowerParams *MaxTxPowerParams)
8474{
8475 WDI_Status status = WDI_STATUS_SUCCESS;
8476 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8477 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008478
Jeff Johnson295189b2012-06-20 16:38:30 -07008479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008480 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008481
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8483 sizeof(WDI_SetMaxTxPowerParamsType));
8484 if(NULL == wdiSetMaxTxPowerParams)
8485 {
8486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 VOS_ASSERT(0);
8489 return VOS_STATUS_E_NOMEM;
8490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8492 if(NULL == pWdaParams)
8493 {
8494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008496 vos_mem_free(wdiSetMaxTxPowerParams);
8497 VOS_ASSERT(0);
8498 return VOS_STATUS_E_NOMEM;
8499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 /* Copy.Max.Tx.Power Params to WDI structure */
8501 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8502 MaxTxPowerParams->bssId,
8503 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8505 MaxTxPowerParams->selfStaMacAddr,
8506 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8508 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008510 pWdaParams->pWdaContext = pWDA;
8511 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008512 /* store Params pass it to WDI */
8513 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008514 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8515 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 if(IS_WDI_STATUS_FAILURE(status))
8517 {
8518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8519 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8521 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008522 /* send response to UMAC*/
8523 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008524 }
8525 return CONVERT_WDI2VOS_STATUS(status);
8526
8527}
Jeff Johnson295189b2012-06-20 16:38:30 -07008528#endif
schang86c22c42013-03-13 18:41:24 -07008529
8530/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008531 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8532 * send the response to PE with power value received from WDI
8533 */
8534void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8535 *pwdiSetMaxTxPowerPerBandRsp,
8536 void* pUserData)
8537{
8538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8539 tWDA_CbContext *pWDA = NULL;
8540 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8541
8542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8543 "<------ %s ", __func__);
8544 if (NULL == pWdaParams)
8545 {
8546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8547 "%s: pWdaParams received NULL", __func__);
8548 VOS_ASSERT(0);
8549 return ;
8550 }
8551 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308552 if (NULL == pWDA)
8553 {
8554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8555 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8557 vos_mem_free(pWdaParams->wdaMsgParam);
8558 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308559 VOS_ASSERT(0);
8560 return ;
8561 }
8562
Arif Hussaina5ebce02013-08-09 15:09:58 -07008563 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8564 if ( NULL == pMxTxPwrPerBandParams )
8565 {
8566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8567 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8568 VOS_ASSERT(0);
8569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8570 vos_mem_free(pWdaParams);
8571 return;
8572 }
8573
8574 /*need to free memory for the pointers used in the
8575 WDA Process.Set Max Tx Power Req function*/
8576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8577 vos_mem_free(pWdaParams);
8578 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8579
8580 /* send response to UMAC*/
8581 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8582 pMxTxPwrPerBandParams, 0);
8583
8584 return;
8585}
8586
8587/*
8588 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8589 * Request to WDI to send set Max Tx Power Per band Request
8590 */
8591 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8592 tMaxTxPowerPerBandParams
8593 *MaxTxPowerPerBandParams)
8594{
8595 WDI_Status status = WDI_STATUS_SUCCESS;
8596 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8597 tWDA_ReqParams *pWdaParams = NULL;
8598
8599 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8600 "------> %s ", __func__);
8601
8602 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8603 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8604
8605 if (NULL == wdiSetMxTxPwrPerBandParams)
8606 {
8607 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8608 "%s: VOS MEM Alloc Failure", __func__);
8609 VOS_ASSERT(0);
8610 return VOS_STATUS_E_NOMEM;
8611 }
8612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8613 if (NULL == pWdaParams)
8614 {
8615 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8616 "%s: VOS MEM Alloc Failure", __func__);
8617 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8618 VOS_ASSERT(0);
8619 return VOS_STATUS_E_NOMEM;
8620 }
8621 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8622 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8623 MaxTxPowerPerBandParams->bandInfo;
8624 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8625 MaxTxPowerPerBandParams->power;
8626 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8627 pWdaParams->pWdaContext = pWDA;
8628 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8629 /* store Params pass it to WDI */
8630 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8631 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8632 WDA_SetMaxTxPowerPerBandCallBack,
8633 pWdaParams);
8634 if (IS_WDI_STATUS_FAILURE(status))
8635 {
8636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8637 "Failure in SET MAX TX Power REQ Params WDI API,"
8638 " free all the memory");
8639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8640 vos_mem_free(pWdaParams);
8641 /* send response to UMAC*/
8642 WDA_SendMsg(pWDA,
8643 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8644 MaxTxPowerPerBandParams, 0);
8645 }
8646 return CONVERT_WDI2VOS_STATUS(status);
8647}
8648
8649/*
schang86c22c42013-03-13 18:41:24 -07008650 * FUNCTION: WDA_SetTxPowerCallBack
8651 * send the response to PE with power value received from WDI
8652 */
8653void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8654 void* pUserData)
8655{
8656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8657 tWDA_CbContext *pWDA = NULL;
8658 tSirSetTxPowerReq *pTxPowerParams = NULL;
8659
8660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8661 "<------ %s ", __func__);
8662 if(NULL == pWdaParams)
8663 {
8664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8665 "%s: pWdaParams received NULL", __func__);
8666 VOS_ASSERT(0) ;
8667 return ;
8668 }
8669 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308670 if (NULL == pWDA)
8671 {
8672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8673 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8675 vos_mem_free(pWdaParams->wdaMsgParam);
8676 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308677 VOS_ASSERT(0);
8678 return ;
8679 }
8680
schang86c22c42013-03-13 18:41:24 -07008681 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8682 if(NULL == pTxPowerParams)
8683 {
8684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8685 "%s: pTxPowerParams received NULL " ,__func__);
8686 VOS_ASSERT(0);
8687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8688 vos_mem_free(pWdaParams);
8689 return ;
8690 }
8691
8692 /*need to free memory for the pointers used in the
8693 WDA Process.Set Max Tx Power Req function*/
8694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8695 vos_mem_free(pWdaParams);
8696
8697 /* send response to UMAC*/
8698 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8699 return;
8700}
8701
8702/*
8703 * FUNCTION: WDA_ProcessSetTxPowerReq
8704 * Request to WDI to send set Tx Power Request
8705 */
8706 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8707 tSirSetTxPowerReq *txPowerParams)
8708{
8709 WDI_Status status = WDI_STATUS_SUCCESS;
8710 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8711 tWDA_ReqParams *pWdaParams = NULL;
8712
8713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8714 "------> %s ", __func__);
8715
8716 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8717 sizeof(WDI_SetTxPowerParamsType));
8718 if(NULL == wdiSetTxPowerParams)
8719 {
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8721 "%s: VOS MEM Alloc Failure", __func__);
8722 VOS_ASSERT(0);
8723 return VOS_STATUS_E_NOMEM;
8724 }
8725 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8726 if(NULL == pWdaParams)
8727 {
8728 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8729 "%s: VOS MEM Alloc Failure", __func__);
8730 vos_mem_free(wdiSetTxPowerParams);
8731 VOS_ASSERT(0);
8732 return VOS_STATUS_E_NOMEM;
8733 }
8734 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8735 txPowerParams->bssIdx;
8736 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8737 txPowerParams->mwPower;
8738 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8739 pWdaParams->pWdaContext = pWDA;
8740 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8741 /* store Params pass it to WDI */
8742 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8743 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8744 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8745 if(IS_WDI_STATUS_FAILURE(status))
8746 {
8747 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8748 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8750 vos_mem_free(pWdaParams);
8751 /* send response to UMAC*/
8752 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8753 }
8754 return CONVERT_WDI2VOS_STATUS(status);
8755}
8756
Jeff Johnson295189b2012-06-20 16:38:30 -07008757/*
8758 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8759 * Free the memory. No need to send any response to PE in this case
8760 */
8761void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8762{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8764
Jeff Johnson295189b2012-06-20 16:38:30 -07008765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008766 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008767
8768 if(NULL == pWdaParams)
8769 {
8770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008771 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008772 VOS_ASSERT(0) ;
8773 return ;
8774 }
8775
8776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8777 vos_mem_free(pWdaParams->wdaMsgParam) ;
8778 vos_mem_free(pWdaParams);
8779
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 /*
8781 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8782 * so just free the request param here
8783 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 return ;
8785}
8786
Jeff Johnson295189b2012-06-20 16:38:30 -07008787/*
8788 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8789 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8790 */
8791VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8792 tP2pPsParams *pP2pPsConfigParams)
8793{
8794 WDI_Status status = WDI_STATUS_SUCCESS ;
8795 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8796 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8797 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008798 tWDA_ReqParams *pWdaParams = NULL;
8799
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008801 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 if(NULL == wdiSetP2PGONOAReqParam)
8803 {
8804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008805 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308806 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 VOS_ASSERT(0);
8808 return VOS_STATUS_E_NOMEM;
8809 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008810
8811 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8812 if(NULL == pWdaParams)
8813 {
8814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008815 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008816 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008817 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008818 VOS_ASSERT(0);
8819 return VOS_STATUS_E_NOMEM;
8820 }
8821
Jeff Johnson295189b2012-06-20 16:38:30 -07008822 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8823 pP2pPsConfigParams->opp_ps;
8824 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8825 pP2pPsConfigParams->ctWindow;
8826 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8827 pP2pPsConfigParams->count;
8828 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8829 pP2pPsConfigParams->duration;
8830 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8831 pP2pPsConfigParams->interval;
8832 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8833 pP2pPsConfigParams->single_noa_duration;
8834 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8835 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008836
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8838 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008839 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8840
Jeff Johnson295189b2012-06-20 16:38:30 -07008841 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008842 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8843 pWdaParams->pWdaContext = pWDA;
8844
Jeff Johnson295189b2012-06-20 16:38:30 -07008845 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008846 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8847
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 if(IS_WDI_STATUS_FAILURE(status))
8849 {
8850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8851 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8853 vos_mem_free(pWdaParams->wdaMsgParam);
8854 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 return CONVERT_WDI2VOS_STATUS(status);
8857
Jeff Johnson295189b2012-06-20 16:38:30 -07008858}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308859
8860#ifdef FEATURE_WLAN_TDLS
8861/*
8862 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8863 * Free the memory. No need to send any response to PE in this case
8864 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308865void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8866 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308867{
8868 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8869 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308870 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308871
8872
8873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8874 "<------ %s " ,__func__);
8875 if(NULL == pWdaParams)
8876 {
8877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8878 "%s: pWdaParams received NULL", __func__);
8879 VOS_ASSERT(0) ;
8880 return ;
8881 }
8882 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8883
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308884 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308885 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8887 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8889 vos_mem_free(pWdaParams->wdaMsgParam);
8890 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308891 VOS_ASSERT(0);
8892 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308893 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308894
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308895 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8896 if( NULL == pTdlsLinkEstablishParams )
8897 {
8898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8899 "%s: pTdlsLinkEstablishParams "
8900 "received NULL " ,__func__);
8901 VOS_ASSERT(0);
8902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8903 vos_mem_free(pWdaParams);
8904 return ;
8905 }
8906 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8907 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308909 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308910 /* send response to UMAC*/
8911 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8912
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308913 return ;
8914}
8915
8916VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8917 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8918{
8919 WDI_Status status = WDI_STATUS_SUCCESS ;
8920 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8921 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8922 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8923 tWDA_ReqParams *pWdaParams = NULL;
8924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8925 "------> %s " ,__func__);
8926 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8927 {
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8929 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308930 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308931 VOS_ASSERT(0);
8932 return VOS_STATUS_E_NOMEM;
8933 }
8934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8935 if(NULL == pWdaParams)
8936 {
8937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8938 "%s: VOS MEM Alloc Failure", __func__);
8939 vos_mem_free(pTdlsLinkEstablishParams);
8940 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8941 VOS_ASSERT(0);
8942 return VOS_STATUS_E_NOMEM;
8943 }
8944 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308945 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308946 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308947 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308948 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308949 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308950 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308951 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308952 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308953 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308954 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8955 pTdlsLinkEstablishParams->isOffChannelSupported;
8956
8957 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8958 pTdlsLinkEstablishParams->validChannels,
8959 pTdlsLinkEstablishParams->validChannelsLen);
8960
8961 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8962 pTdlsLinkEstablishParams->validChannelsLen;
8963
8964 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8965 pTdlsLinkEstablishParams->validOperClasses,
8966 pTdlsLinkEstablishParams->validOperClassesLen);
8967 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8968 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308969
8970 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8971 /* Store msg pointer from PE, as this will be used for response */
8972 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8973 /* store Params pass it to WDI */
8974 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8975 pWdaParams->pWdaContext = pWDA;
8976
8977 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8978 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8979 WDA_SetTDLSLinkEstablishReqParamsCallback,
8980 pWdaParams);
8981 if(IS_WDI_STATUS_FAILURE(status))
8982 {
8983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8984 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8986 vos_mem_free(pWdaParams->wdaMsgParam);
8987 vos_mem_free(pWdaParams);
8988 }
8989 return CONVERT_WDI2VOS_STATUS(status);
8990}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308991
8992// tdlsoffchan
8993void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8994 void* pUserData)
8995{
8996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8997 tWDA_CbContext *pWDA = NULL;
8998 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8999
9000
9001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9002 "<------ %s " ,__func__);
9003 if(NULL == pWdaParams)
9004 {
9005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9006 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309007 VOS_ASSERT(0) ;
9008 return ;
9009 }
9010 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9011
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309012 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05309013 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9015 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9017 vos_mem_free(pWdaParams->wdaMsgParam);
9018 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309019 VOS_ASSERT(0);
9020 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309021 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309022
Atul Mittalc0f739f2014-07-31 13:47:47 +05309023 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309024 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05309025 {
9026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9027 "%s: pTdlsChanSwitchParams "
9028 "received NULL " ,__func__);
9029 VOS_ASSERT(0);
9030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9031 vos_mem_free(pWdaParams);
9032 return ;
9033 }
9034 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
9035 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9037 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05309038 /* send response to UMAC*/
9039 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05309040
9041 return ;
9042}
9043VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
9044 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
9045{
9046 WDI_Status status = WDI_STATUS_SUCCESS ;
9047 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
9048 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
9049 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
9050 tWDA_ReqParams *pWdaParams = NULL;
9051
9052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9053 "Enter: %s ",__func__);
9054 if(NULL == wdiSetTDLSChanSwitchReqParam)
9055 {
9056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9057 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309058 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309059 VOS_ASSERT(0);
9060 return VOS_STATUS_E_NOMEM;
9061 }
9062
9063 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9064 if(NULL == pWdaParams)
9065 {
9066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9067 "%s: VOS MEM Alloc Failure", __func__);
9068 vos_mem_free(pTdlsChanSwitchParams);
9069 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
9070 VOS_ASSERT(0);
9071 return VOS_STATUS_E_NOMEM;
9072 }
9073 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
9074 pTdlsChanSwitchParams->staIdx;
9075 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
9076 pTdlsChanSwitchParams->tdlsSwMode;
9077 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
9078 pTdlsChanSwitchParams->operClass;
9079 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
9080 pTdlsChanSwitchParams->tdlsOffCh;
9081 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
9082 pTdlsChanSwitchParams->tdlsOffChBwOffset;
9083
9084
9085 /* Store msg pointer from PE, as this will be used for response */
9086 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
9087 /* store Params pass it to WDI */
9088 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
9089 pWdaParams->pWdaContext = pWDA;
9090 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
9091 (WDI_SetTDLSChanSwitchReqParamsRspCb)
9092 WDA_SetTDLSChanSwitchReqParamsCallback,
9093 pWdaParams);
9094 if(IS_WDI_STATUS_FAILURE(status))
9095 {
9096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9097 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
9098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9099 vos_mem_free(pWdaParams->wdaMsgParam);
9100 vos_mem_free(pWdaParams);
9101 }
9102 return CONVERT_WDI2VOS_STATUS(status);
9103}
9104#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309105
9106
Jeff Johnson295189b2012-06-20 16:38:30 -07009107#ifdef WLAN_FEATURE_VOWIFI_11R
9108/*
9109 * FUNCTION: WDA_AggrAddTSReqCallback
9110 * send ADD AGGREGATED TS RSP back to PE
9111 */
9112void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
9113{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309115 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009116 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009119 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009120 if(NULL == pWdaParams)
9121 {
9122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009123 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009124 VOS_ASSERT(0) ;
9125 return ;
9126 }
9127
9128 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309129 if (NULL == pWDA)
9130 {
9131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9132 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9134 vos_mem_free(pWdaParams->wdaMsgParam);
9135 vos_mem_free(pWdaParams);
9136
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309137 VOS_ASSERT(0);
9138 return ;
9139 }
9140
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009141 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009142
9143 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9144 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009145 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009148
9149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9150 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 return ;
9152}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009153/*
9154 * FUNCTION: WDA_ProcessAddTSReq
9155 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
9156 */
9157VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
9158 tAggrAddTsParams *pAggrAddTsReqParams)
9159{
9160 WDI_Status status = WDI_STATUS_SUCCESS ;
9161 int i;
9162 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009163 tWDA_ReqParams *pWdaParams = NULL;
9164
9165
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009167 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
9169 sizeof(WDI_AggrAddTSReqParamsType)) ;
9170 if(NULL == wdiAggrAddTSReqParam)
9171 {
9172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009173 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309174 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 VOS_ASSERT(0);
9176 return VOS_STATUS_E_NOMEM;
9177 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009178
9179
9180 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9181 if(NULL == pWdaParams)
9182 {
9183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009184 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009185 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009186 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009187 VOS_ASSERT(0);
9188 return VOS_STATUS_E_NOMEM;
9189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
9191 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
9192 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 for( i = 0; i < WDI_MAX_NO_AC; i++ )
9194 {
9195 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
9196 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
9197 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
9199 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
9200 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
9201 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
9202 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
9203 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
9204 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
9205 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
9206 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
9207 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
9208 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
9209 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
9210 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
9211 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
9212 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
9213 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
9215 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
9217 pAggrAddTsReqParams->tspec[i].nomMsduSz;
9218 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
9219 pAggrAddTsReqParams->tspec[i].maxMsduSz;
9220 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
9221 pAggrAddTsReqParams->tspec[i].minSvcInterval;
9222 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
9223 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
9224 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
9225 pAggrAddTsReqParams->tspec[i].inactInterval;
9226 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
9227 pAggrAddTsReqParams->tspec[i].suspendInterval;
9228 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
9229 pAggrAddTsReqParams->tspec[i].svcStartTime;
9230 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
9231 pAggrAddTsReqParams->tspec[i].minDataRate;
9232 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
9233 pAggrAddTsReqParams->tspec[i].meanDataRate;
9234 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
9235 pAggrAddTsReqParams->tspec[i].peakDataRate;
9236 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
9237 pAggrAddTsReqParams->tspec[i].maxBurstSz;
9238 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
9239 pAggrAddTsReqParams->tspec[i].delayBound;
9240 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
9241 pAggrAddTsReqParams->tspec[i].minPhyRate;
9242 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
9243 pAggrAddTsReqParams->tspec[i].surplusBw;
9244 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
9245 pAggrAddTsReqParams->tspec[i].mediumTime;
9246 }
9247
9248 /* TODO: tAggrAddTsParams doesn't have the following fields */
9249#if 0
9250 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
9251 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
9252 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
9253 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
9254#endif
9255 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
9256
9257 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009258 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009260 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
9261
9262 pWdaParams->pWdaContext = pWDA;
9263
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009265 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
9266
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 if(IS_WDI_STATUS_FAILURE(status))
9268 {
9269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9270 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009271
9272 /* send the failure response back to PE*/
9273 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9274 {
9275 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
9276 }
9277
9278 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
9279 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05309280
9281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9282 vos_mem_free(pWdaParams);
9283
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 return CONVERT_WDI2VOS_STATUS(status) ;
9286}
9287#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009288/*
Mihir Shetea4306052014-03-25 00:02:54 +05309289 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 * send Enter IMPS RSP back to PE
9291 */
Mihir Shetea4306052014-03-25 00:02:54 +05309292void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009293{
Mihir Shetea4306052014-03-25 00:02:54 +05309294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309295 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309296
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05309298 "<------ %s status=%d" ,__func__,status);
9299 if(NULL == pWdaParams)
9300 {
9301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9302 "%s: pWdaParams received NULL", __func__);
9303 VOS_ASSERT(0);
9304 return;
9305 }
9306
9307 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309308 if (NULL == pWDA)
9309 {
9310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9311 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9313 vos_mem_free(pWdaParams->wdaMsgParam);
9314 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309315 VOS_ASSERT(0);
9316 return ;
9317 }
Mihir Shetea4306052014-03-25 00:02:54 +05309318
9319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9320 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309321 if (WDI_STATUS_SUCCESS != status)
9322 {
9323 pWDA->failureCounts.enterImpsFailureCount++;
9324 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9325 pWDA->failureCounts.enterImpsFailureCount)
9326 {
9327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9328 "%s: Status %d fail count %d", __func__, status,
9329 pWDA->failureCounts.enterImpsFailureCount);
9330 pWDA->failureCounts.enterImpsFailureCount = 0;
9331 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9332 WLAN_LOG_INDICATOR_HOST_DRIVER,
9333 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9334 FALSE, TRUE);
9335 }
9336 }
9337 else
9338 {
9339 pWDA->failureCounts.enterImpsFailureCount = 0;
9340 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009341 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 return ;
9343}
Mihir Shetea4306052014-03-25 00:02:54 +05309344
9345
9346/*
9347 * FUNCTION: WDA_EnterImpsReqCallback
9348 * Free memory and send Enter IMPS RSP back to PE.
9349 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9350 */
9351void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9352{
9353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309354 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309355
9356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9357 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9358
9359 if(NULL == pWdaParams)
9360 {
9361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9362 "%s: pWdaParams received NULL", __func__);
9363 VOS_ASSERT(0);
9364 return;
9365 }
9366
9367 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309368 if (NULL == pWDA)
9369 {
9370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9371 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9373 vos_mem_free(pWdaParams->wdaMsgParam);
9374 vos_mem_free(pWdaParams);
9375
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309376 VOS_ASSERT(0);
9377 return ;
9378 }
9379
Mihir Shetea4306052014-03-25 00:02:54 +05309380
9381 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9382 {
9383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9384 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309385 pWDA->failureCounts.enterImpsFailureCount++;
9386 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9387 pWDA->failureCounts.enterImpsFailureCount)
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9390 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9391 pWDA->failureCounts.enterImpsFailureCount);
9392 pWDA->failureCounts.enterImpsFailureCount = 0;
9393 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9394 WLAN_LOG_INDICATOR_HOST_DRIVER,
9395 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9396 FALSE, TRUE);
9397 }
Mihir Shetea4306052014-03-25 00:02:54 +05309398 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9399 CONVERT_WDI2SIR_STATUS(wdiStatus));
9400 }
9401
9402 return;
9403}
Jeff Johnson295189b2012-06-20 16:38:30 -07009404/*
9405 * FUNCTION: WDA_ProcessEnterImpsReq
9406 * Request to WDI to Enter IMPS power state.
9407 */
9408VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9409{
9410 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309411 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9412 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309413 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009415 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309416
9417
9418 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9419 if (NULL == wdiEnterImpsReqParams)
9420 {
9421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9422 "%s: VOS MEM Alloc Failure", __func__);
9423 VOS_ASSERT(0);
9424 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9425 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9426 return VOS_STATUS_E_NOMEM;
9427 }
9428
9429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9430 if (NULL == pWdaParams)
9431 {
9432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9433 "%s: VOS MEM Alloc Failure", __func__);
9434 VOS_ASSERT(0);
9435 vos_mem_free(wdiEnterImpsReqParams);
9436 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9437 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9438 return VOS_STATUS_E_NOMEM;
9439 }
9440
9441 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9442 wdiEnterImpsReqParams->pUserData = pWdaParams;
9443
9444 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9445 pWdaParams->wdaMsgParam = NULL;
9446 pWdaParams->pWdaContext = pWDA;
9447
9448 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9449 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9450 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 if(IS_WDI_STATUS_FAILURE(status))
9452 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309453 if (! (failcnt & 0xF))
9454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9455 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9456 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309457 vos_mem_free(wdiEnterImpsReqParams);
9458 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009459 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 return CONVERT_WDI2VOS_STATUS(status) ;
9462}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309463
9464/*
9465 * FUNCTION: WDA_ExitImpsRespCallback
9466 * send Exit IMPS RSP back to PE
9467 */
9468void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9469{
9470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9471 tWDA_CbContext *pWDA;
9472
9473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9474 "<------ %s " ,__func__);
9475
9476 if (NULL == pWdaParams)
9477 {
9478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9479 "%s: pWdaParams received NULL", __func__);
9480 VOS_ASSERT(0);
9481 return;
9482 }
9483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9484
9485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9486 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309487 if (WDI_STATUS_SUCCESS != status)
9488 {
9489 pWDA->failureCounts.exitImpsFailureCount++;
9490 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9491 pWDA->failureCounts.exitImpsFailureCount)
9492 {
9493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9494 "%s: Status %d fail count %d", __func__,
9495 status,
9496 pWDA->failureCounts.exitImpsFailureCount);
9497 pWDA->failureCounts.exitImpsFailureCount = 0;
9498 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9499 WLAN_LOG_INDICATOR_HOST_DRIVER,
9500 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9501 FALSE, TRUE);
9502 }
9503 }
9504 else
9505 {
9506 pWDA->failureCounts.exitImpsFailureCount = 0;
9507 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309508
9509 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9510 return;
9511}
9512
Jeff Johnson295189b2012-06-20 16:38:30 -07009513/*
9514 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 */
9516void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9517{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309519 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009521 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309522 if(NULL == pWdaParams)
9523 {
9524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9525 "%s: pWdaParams received NULL", __func__);
9526 VOS_ASSERT(0);
9527 return;
9528 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309529 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309530 if (IS_WDI_STATUS_FAILURE(status))
9531 {
9532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9533 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309534
9535 pWDA->failureCounts.exitImpsFailureCount++;
9536 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9537 pWDA->failureCounts.exitImpsFailureCount)
9538 {
9539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9540 "%s: wdiStatus %d fail count %d", __func__,
9541 status,
9542 pWDA->failureCounts.exitImpsFailureCount);
9543 pWDA->failureCounts.exitImpsFailureCount = 0;
9544 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9545 WLAN_LOG_INDICATOR_HOST_DRIVER,
9546 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9547 FALSE, TRUE);
9548 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309549 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9550 {
9551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9552 FL("reload wlan driver"));
9553 wpalWlanReload();
9554 }
9555 }
9556 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009557}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309558
Jeff Johnson295189b2012-06-20 16:38:30 -07009559/*
9560 * FUNCTION: WDA_ProcessExitImpsReq
9561 * Request to WDI to Exit IMPS power state.
9562 */
9563VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9564{
9565 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309566 tWDA_ReqParams *pWdaParams;
9567 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9568
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009570 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309571 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9572 sizeof(WDI_ExitImpsReqParamsType));
9573 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9576 "%s: VOS MEM Alloc Failure", __func__);
9577 VOS_ASSERT(0);
9578 return VOS_STATUS_E_NOMEM;
9579 }
9580 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9581 if(NULL == pWdaParams)
9582 {
9583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9584 "%s: VOS MEM Alloc Failure", __func__);
9585 VOS_ASSERT(0);
9586 vos_mem_free(wdiExitImpsReqParams);
9587 return VOS_STATUS_E_NOMEM;
9588 }
9589 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9590 wdiExitImpsReqParams->pUserData = pWdaParams;
9591
9592 /* Store param pointer as passed in by caller */
9593 /* store Params pass it to WDI */
9594 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9595 pWdaParams->pWdaContext = pWDA;
9596 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9597 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9598 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9599 pWdaParams);
9600 if (IS_WDI_STATUS_FAILURE(status))
9601 {
9602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9603 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9605 vos_mem_free(pWdaParams);
9606 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 return CONVERT_WDI2VOS_STATUS(status) ;
9609}
Jeff Johnson295189b2012-06-20 16:38:30 -07009610/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009611 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 * send Enter BMPS RSP back to PE
9613 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009614void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009615{
9616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309617 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009618 tEnterBmpsParams *pEnterBmpsRspParams;
9619
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 if(NULL == pWdaParams)
9623 {
9624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009626 VOS_ASSERT(0) ;
9627 return ;
9628 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009629
9630 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309631 if (NULL == pWDA)
9632 {
9633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9634 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309635
9636 if(pWdaParams->wdaWdiApiMsgParam)
9637 {
9638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9639 }
9640 vos_mem_free(pWdaParams);
9641
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309642 VOS_ASSERT(0);
9643 return ;
9644 }
9645
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009646 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9647
9648 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009649 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009650
9651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009652 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309653 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9654 {
9655 pWDA->failureCounts.enterBmpsFailureCount++;
9656 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9657 pWDA->failureCounts.enterBmpsFailureCount)
9658 {
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9660 "%s: wdiStatus %d fail count %d", __func__,
9661 pwdiEnterBmpsRsp->wdiStatus,
9662 pWDA->failureCounts.enterBmpsFailureCount);
9663 pWDA->failureCounts.enterBmpsFailureCount = 0;
9664 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9665 WLAN_LOG_INDICATOR_HOST_DRIVER,
9666 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9667 FALSE, TRUE);
9668 }
9669 }
9670 else
9671 {
9672 pWDA->failureCounts.enterBmpsFailureCount = 0;
9673 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009674 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9675
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 return ;
9677}
Jeff Johnson295189b2012-06-20 16:38:30 -07009678/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009679 * FUNCTION: WDA_EnterBmpsReqCallback
9680 * Free memory and send Enter BMPS RSP back to PE.
9681 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9682 */
9683void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9684{
9685 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309686 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009687 tEnterBmpsParams *pEnterBmpsRspParams;
9688
9689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9690 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9691
9692 if(NULL == pWdaParams)
9693 {
9694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9695 "%s: pWdaParams received NULL", __func__);
9696 VOS_ASSERT(0);
9697 return;
9698 }
9699
9700 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309701 if (NULL == pWDA)
9702 {
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9704 "%s:pWDA is NULL", __func__);
9705 VOS_ASSERT(0);
9706 return ;
9707 }
9708
Yue Ma7f44bbe2013-04-12 11:47:39 -07009709 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9710 pEnterBmpsRspParams->status = wdiStatus;
9711
9712 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9713 {
9714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9715 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309716 pWDA->failureCounts.enterBmpsFailureCount++;
9717 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9718 pWDA->failureCounts.enterBmpsFailureCount)
9719 {
9720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9721 "%s: wdiStatus %d fail count %d", __func__,
9722 wdiStatus,
9723 pWDA->failureCounts.enterBmpsFailureCount);
9724 pWDA->failureCounts.enterBmpsFailureCount = 0;
9725 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9726 WLAN_LOG_INDICATOR_HOST_DRIVER,
9727 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9728 FALSE, TRUE);
9729 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009730 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9731 }
9732
9733 return;
9734}
9735/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 * FUNCTION: WDA_ProcessEnterBmpsReq
9737 * Request to WDI to Enter BMPS power state.
9738 */
9739VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9740 tEnterBmpsParams *pEnterBmpsReqParams)
9741{
9742 WDI_Status status = WDI_STATUS_SUCCESS;
9743 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9744 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009746 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9748 {
9749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009750 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009751 VOS_ASSERT(0);
9752 return VOS_STATUS_E_FAILURE;
9753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009754 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9755 if (NULL == wdiEnterBmpsReqParams)
9756 {
9757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009759 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009760 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9761 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 return VOS_STATUS_E_NOMEM;
9763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9765 if (NULL == pWdaParams)
9766 {
9767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009769 VOS_ASSERT(0);
9770 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009771 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9772 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009773 return VOS_STATUS_E_NOMEM;
9774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009775 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9776 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9777 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9778 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009779 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009780 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9781 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9782 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009783 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9784 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -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 = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009789 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009790 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009792 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, 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 BMPS REQ WDI API, free all the memory" );
9797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009798 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009800 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009802 return CONVERT_WDI2VOS_STATUS(status);
9803}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009804
9805
9806static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9807 WDI_Status wdiStatus,
9808 tExitBmpsParams *pExitBmpsReqParams)
9809{
9810 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9811
9812 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9813}
9814
9815
Jeff Johnson295189b2012-06-20 16:38:30 -07009816/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009817 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 * send Exit BMPS RSP back to PE
9819 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009820void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009821{
9822 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309823 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009824 tExitBmpsParams *pExitBmpsRspParams;
9825
Jeff Johnson295189b2012-06-20 16:38:30 -07009826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009828 if(NULL == pWdaParams)
9829 {
9830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009831 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009832 VOS_ASSERT(0) ;
9833 return ;
9834 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009835
9836 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309837 if (NULL == pWDA)
9838 {
9839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9840 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309841
9842 if(pWdaParams->wdaWdiApiMsgParam)
9843 {
9844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9845 }
9846 vos_mem_free(pWdaParams);
9847
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309848 VOS_ASSERT(0);
9849 return ;
9850 }
9851
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009852 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9853
9854 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009855 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009856
Jeff Johnson295189b2012-06-20 16:38:30 -07009857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309858 vos_mem_free(pWdaParams);
9859
9860 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9861 {
9862 pWDA->failureCounts.exitBmpsFailureCount++;
9863 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9864 pWDA->failureCounts.exitBmpsFailureCount)
9865 {
9866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9867 "%s: Status %d fail count %d", __func__,
9868 pExitBmpsRspParams->status,
9869 pWDA->failureCounts.exitBmpsFailureCount);
9870 pWDA->failureCounts.exitBmpsFailureCount = 0;
9871 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9872 WLAN_LOG_INDICATOR_HOST_DRIVER,
9873 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9874 FALSE, TRUE);
9875 }
9876 }
9877 else
9878 {
9879 pWDA->failureCounts.exitBmpsFailureCount = 0;
9880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009881
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009882 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 return ;
9884}
Jeff Johnson295189b2012-06-20 16:38:30 -07009885/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009886 * FUNCTION: WDA_ExitBmpsReqCallback
9887 * Free memory and send Exit BMPS RSP back to PE.
9888 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9889 */
9890void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9891{
9892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309893 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009894 tExitBmpsParams *pExitBmpsRspParams;
9895
9896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9897 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9898
9899 if(NULL == pWdaParams)
9900 {
9901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9902 "%s: pWdaParams received NULL", __func__);
9903 VOS_ASSERT(0);
9904 return;
9905 }
9906
9907 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309908 if (NULL == pWDA)
9909 {
9910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9911 "%s:pWDA is NULL", __func__);
9912 VOS_ASSERT(0);
9913 return ;
9914 }
9915
Yue Ma7f44bbe2013-04-12 11:47:39 -07009916 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9917 pExitBmpsRspParams->status = wdiStatus;
9918
9919 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9920 {
9921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9922 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309923 pWDA->failureCounts.exitBmpsFailureCount++;
9924 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9925 pWDA->failureCounts.exitBmpsFailureCount)
9926 {
9927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9928 "%s: wdiStatus %d fail count %d", __func__,
9929 wdiStatus,
9930 pWDA->failureCounts.exitBmpsFailureCount);
9931 pWDA->failureCounts.exitBmpsFailureCount = 0;
9932 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9933 WLAN_LOG_INDICATOR_HOST_DRIVER,
9934 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9935 FALSE, TRUE);
9936 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009937 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9938 }
9939
9940 return;
9941}
9942/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 * FUNCTION: WDA_ProcessExitBmpsReq
9944 * Request to WDI to Exit BMPS power state.
9945 */
9946VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9947 tExitBmpsParams *pExitBmpsReqParams)
9948{
9949 WDI_Status status = WDI_STATUS_SUCCESS ;
9950 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9951 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9952 sizeof(WDI_ExitBmpsReqParamsType)) ;
9953 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009955 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 if(NULL == wdiExitBmpsReqParams)
9957 {
9958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009961 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009962 return VOS_STATUS_E_NOMEM;
9963 }
9964 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9965 if(NULL == pWdaParams)
9966 {
9967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009969 VOS_ASSERT(0);
9970 vos_mem_free(wdiExitBmpsReqParams);
9971 return VOS_STATUS_E_NOMEM;
9972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009974
9975 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9976
Yue Ma7f44bbe2013-04-12 11:47:39 -07009977 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9978 wdiExitBmpsReqParams->pUserData = pWdaParams;
9979
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 /* Store param pointer as passed in by caller */
9981 /* store Params pass it to WDI */
9982 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9983 pWdaParams->pWdaContext = pWDA;
9984 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009985 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009986 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 if(IS_WDI_STATUS_FAILURE(status))
9988 {
9989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9990 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9992 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009993 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 return CONVERT_WDI2VOS_STATUS(status) ;
9996}
Jeff Johnson295189b2012-06-20 16:38:30 -07009997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009998 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009999 * send Enter UAPSD RSP back to PE
10000 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010001void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010002{
10003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010004 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010005 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010008 if(NULL == pWdaParams)
10009 {
10010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 VOS_ASSERT(0) ;
10013 return ;
10014 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010015
10016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010017 if (NULL == pWDA)
10018 {
10019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10020 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010021
10022 if(pWdaParams->wdaWdiApiMsgParam)
10023 {
10024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10025 }
10026 vos_mem_free(pWdaParams);
10027
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010028 VOS_ASSERT(0);
10029 return ;
10030 }
10031
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010032 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10033
10034 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010035 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010036
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10038 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010039 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 return ;
10041}
Jeff Johnson295189b2012-06-20 16:38:30 -070010042/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010043 * FUNCTION: WDA_EnterUapsdReqCallback
10044 * Free memory and send Enter UAPSD RSP back to PE.
10045 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
10046 */
10047void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10048{
10049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10050 tWDA_CbContext *pWDA;
10051 tUapsdParams *pEnterUapsdRsqParams;
10052
10053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10054 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10055
10056 if(NULL == pWdaParams)
10057 {
10058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10059 "%s: pWdaParams received NULL", __func__);
10060 VOS_ASSERT(0);
10061 return;
10062 }
10063
10064 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010065 if (NULL == pWDA)
10066 {
10067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10068 "%s:pWDA is NULL", __func__);
10069 VOS_ASSERT(0);
10070 return ;
10071 }
10072
Yue Ma7f44bbe2013-04-12 11:47:39 -070010073 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10074 pEnterUapsdRsqParams->status = wdiStatus;
10075
10076 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10077 {
10078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10079 vos_mem_free(pWdaParams);
10080 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
10081 }
10082
10083 return;
10084}
10085/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010086 * FUNCTION: WDA_ProcessEnterUapsdReq
10087 * Request to WDI to Enter UAPSD power state.
10088 */
10089VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
10090 tUapsdParams *pEnterUapsdReqParams)
10091{
10092 WDI_Status status = WDI_STATUS_SUCCESS ;
10093 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
10094 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
10095 sizeof(WDI_EnterUapsdReqParamsType)) ;
10096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 if(NULL == wdiEnterUapsdReqParams)
10100 {
10101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 VOS_ASSERT(0);
10104 return VOS_STATUS_E_NOMEM;
10105 }
10106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10107 if(NULL == pWdaParams)
10108 {
10109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010111 VOS_ASSERT(0);
10112 vos_mem_free(wdiEnterUapsdReqParams);
10113 return VOS_STATUS_E_NOMEM;
10114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
10116 pEnterUapsdReqParams->beDeliveryEnabled;
10117 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
10118 pEnterUapsdReqParams->beTriggerEnabled;
10119 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
10120 pEnterUapsdReqParams->bkDeliveryEnabled;
10121 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
10122 pEnterUapsdReqParams->bkTriggerEnabled;
10123 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
10124 pEnterUapsdReqParams->viDeliveryEnabled;
10125 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
10126 pEnterUapsdReqParams->viTriggerEnabled;
10127 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
10128 pEnterUapsdReqParams->voDeliveryEnabled;
10129 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
10130 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070010131 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010132
Yue Ma7f44bbe2013-04-12 11:47:39 -070010133 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
10134 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010135
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 /* Store param pointer as passed in by caller */
10137 /* store Params pass it to WDI */
10138 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
10139 pWdaParams->pWdaContext = pWDA;
10140 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010142 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 if(IS_WDI_STATUS_FAILURE(status))
10144 {
10145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10146 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
10147 vos_mem_free(pWdaParams->wdaMsgParam) ;
10148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10149 vos_mem_free(pWdaParams) ;
10150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 return CONVERT_WDI2VOS_STATUS(status) ;
10152}
Jeff Johnson295189b2012-06-20 16:38:30 -070010153/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010154 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 * send Exit UAPSD RSP back to PE
10156 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010157void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010158{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010159
10160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10161 tWDA_CbContext *pWDA;
10162 tExitUapsdParams *pExitUapsdRspParams;
10163
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010165 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010166 if(NULL == pWdaParams)
10167 {
10168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010169 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010170 VOS_ASSERT(0);
10171 return;
10172 }
10173
10174 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10175 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10176
10177 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010178 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010179
10180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10181 vos_mem_free(pWdaParams) ;
10182
10183 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 return ;
10185}
Jeff Johnson295189b2012-06-20 16:38:30 -070010186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010187 * FUNCTION: WDA_ExitUapsdReqCallback
10188 * Free memory and send Exit UAPSD RSP back to PE.
10189 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
10190 */
10191void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10192{
10193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010194 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010195 tExitUapsdParams *pExitUapsdRspParams;
10196
10197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10198 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10199
10200 if(NULL == pWdaParams)
10201 {
10202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10203 "%s: pWdaParams received NULL", __func__);
10204 VOS_ASSERT(0);
10205 return;
10206 }
10207
10208 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010209 if (NULL == pWDA)
10210 {
10211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10212 "%s:pWDA is NULL", __func__);
10213 VOS_ASSERT(0);
10214 return ;
10215 }
10216
Yue Ma7f44bbe2013-04-12 11:47:39 -070010217 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10218 pExitUapsdRspParams->status = wdiStatus;
10219
10220 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10221 {
10222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10223 vos_mem_free(pWdaParams);
10224 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
10225 }
10226
10227 return;
10228}
10229/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010230 * FUNCTION: WDA_ProcessExitUapsdReq
10231 * Request to WDI to Exit UAPSD power state.
10232 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010233VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
10234 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010235{
10236 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010237 tWDA_ReqParams *pWdaParams ;
10238 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
10239 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
10240 sizeof(WDI_ExitUapsdReqParamsType)) ;
10241
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010243 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010244
10245 if(NULL == wdiExitUapsdReqParams)
10246 {
10247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010248 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010249 VOS_ASSERT(0);
10250 return VOS_STATUS_E_NOMEM;
10251 }
10252 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10253 if(NULL == pWdaParams)
10254 {
10255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010256 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010257 VOS_ASSERT(0);
10258 vos_mem_free(wdiExitUapsdReqParams);
10259 return VOS_STATUS_E_NOMEM;
10260 }
10261
10262 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010263 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
10264 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010265
10266 /* Store param pointer as passed in by caller */
10267 /* store Params pass it to WDI */
10268 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
10269 pWdaParams->pWdaContext = pWDA;
10270 pWdaParams->wdaMsgParam = pExitUapsdParams;
10271
Yue Ma7f44bbe2013-04-12 11:47:39 -070010272 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 if(IS_WDI_STATUS_FAILURE(status))
10274 {
10275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10276 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010277 vos_mem_free(pWdaParams->wdaMsgParam) ;
10278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10279 vos_mem_free(pWdaParams) ;
10280
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 return CONVERT_WDI2VOS_STATUS(status) ;
10283}
10284
Jeff Johnson295189b2012-06-20 16:38:30 -070010285/*
10286 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
10287 *
10288 */
10289void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
10290{
10291 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010293 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 if(NULL == pWdaParams)
10295 {
10296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010297 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 VOS_ASSERT(0) ;
10299 return ;
10300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 if( pWdaParams != NULL )
10302 {
10303 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10304 {
10305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10306 }
10307 if( pWdaParams->wdaMsgParam != NULL )
10308 {
10309 vos_mem_free(pWdaParams->wdaMsgParam) ;
10310 }
10311 vos_mem_free(pWdaParams) ;
10312 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 return ;
10314}
Jeff Johnson295189b2012-06-20 16:38:30 -070010315/*
10316 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
10317 * Request to WDI to set the power save params at start.
10318 */
10319VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
10320 tSirPowerSaveCfg *pPowerSaveCfg)
10321{
10322 WDI_Status status = WDI_STATUS_SUCCESS ;
10323 tHalCfg *tlvStruct = NULL ;
10324 tANI_U8 *tlvStructStart = NULL ;
10325 v_PVOID_t *configParam;
10326 tANI_U32 configParamSize;
10327 tANI_U32 *configDataValue;
10328 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
10329 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010331 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010332 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
10333 {
10334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010335 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010337 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 return VOS_STATUS_E_FAILURE;
10339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
10341 if (NULL == wdiPowerSaveCfg)
10342 {
10343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010346 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 return VOS_STATUS_E_NOMEM;
10348 }
10349 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10350 if(NULL == pWdaParams)
10351 {
10352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 VOS_ASSERT(0);
10355 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010356 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 return VOS_STATUS_E_NOMEM;
10358 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10360 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 if(NULL == configParam)
10362 {
10363 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010364 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010365 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 vos_mem_free(pWdaParams);
10367 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010368 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 return VOS_STATUS_E_NOMEM;
10370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 vos_mem_set(configParam, configParamSize, 0);
10372 wdiPowerSaveCfg->pConfigBuffer = configParam;
10373 tlvStruct = (tHalCfg *)configParam;
10374 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10376 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10377 tlvStruct->length = sizeof(tANI_U32);
10378 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10379 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10381 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10383 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10384 tlvStruct->length = sizeof(tANI_U32);
10385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10386 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10388 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010389 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10390 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10391 tlvStruct->length = sizeof(tANI_U32);
10392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10393 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10395 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10397 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10398 tlvStruct->length = sizeof(tANI_U32);
10399 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10400 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10402 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10404 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10405 tlvStruct->length = sizeof(tANI_U32);
10406 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10407 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10409 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010410 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10411 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10412 tlvStruct->length = sizeof(tANI_U32);
10413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10414 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10416 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10418 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10419 tlvStruct->length = sizeof(tANI_U32);
10420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10421 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10423 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010424 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10425 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10426 tlvStruct->length = sizeof(tANI_U32);
10427 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10428 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10429 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10430 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010431 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10432 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10433 tlvStruct->length = sizeof(tANI_U32);
10434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10435 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10436 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10437 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010438 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10439 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10440 tlvStruct->length = sizeof(tANI_U32);
10441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10442 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10444 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10446 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10447 tlvStruct->length = sizeof(tANI_U32);
10448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10449 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010450 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10451 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010452 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010454 /* store Params pass it to WDI */
10455 pWdaParams->wdaMsgParam = configParam;
10456 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10457 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010458 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10459 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010460 if(IS_WDI_STATUS_FAILURE(status))
10461 {
10462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10463 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10464 vos_mem_free(pWdaParams->wdaMsgParam);
10465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10466 vos_mem_free(pWdaParams);
10467 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010468 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010469 return CONVERT_WDI2VOS_STATUS(status);
10470}
Jeff Johnson295189b2012-06-20 16:38:30 -070010471/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010472 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 *
10474 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010475void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010476{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010477 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10478
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010480 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010481
10482 if(NULL == pWdaParams)
10483 {
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10485 "%s: pWdaParams received NULL", __func__);
10486 VOS_ASSERT(0);
10487 return ;
10488 }
10489
10490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010491 vos_mem_free(pWdaParams);
10492
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 return ;
10494}
Jeff Johnson295189b2012-06-20 16:38:30 -070010495/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010496 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10497 * Free memory.
10498 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10499 */
10500void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10501{
10502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10503
10504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10505 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10506
10507 if(NULL == pWdaParams)
10508 {
10509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10510 "%s: pWdaParams received NULL", __func__);
10511 VOS_ASSERT(0);
10512 return;
10513 }
10514
10515 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10516 {
10517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10518 vos_mem_free(pWdaParams);
10519 }
10520
10521 return;
10522}
10523/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 * FUNCTION: WDA_SetUapsdAcParamsReq
10525 * Request to WDI to set the UAPSD params for an ac (sta mode).
10526 */
10527VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10528 tUapsdInfo *pUapsdInfo)
10529{
10530 WDI_Status status = WDI_STATUS_SUCCESS;
10531 tWDA_CbContext *pWDA = NULL ;
10532 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10533 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10534 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10535 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 if(NULL == wdiUapsdParams)
10539 {
10540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 VOS_ASSERT(0);
10543 return VOS_STATUS_E_NOMEM;
10544 }
10545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10546 if(NULL == pWdaParams)
10547 {
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010550 VOS_ASSERT(0);
10551 vos_mem_free(wdiUapsdParams);
10552 return VOS_STATUS_E_NOMEM;
10553 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010554 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10555 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10556 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10557 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10558 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10559 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010560 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10561 wdiUapsdParams->pUserData = pWdaParams;
10562
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010564 pWdaParams->pWdaContext = pWDA;
10565 /* Store param pointer as passed in by caller */
10566 pWdaParams->wdaMsgParam = pUapsdInfo;
10567 /* store Params pass it to WDI */
10568 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010569 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010570 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010571 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010572 if(IS_WDI_STATUS_FAILURE(status))
10573 {
10574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10575 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10577 vos_mem_free(pWdaParams);
10578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10580 return VOS_STATUS_SUCCESS;
10581 else
10582 return VOS_STATUS_E_FAILURE;
10583
Jeff Johnson295189b2012-06-20 16:38:30 -070010584}
10585/*
10586 * FUNCTION: WDA_ClearUapsdAcParamsReq
10587 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10588 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10589 * and again enter the UPASD with the modified params. Hence the disable
10590 * function was kept empty.
10591 *
10592 */
10593VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10594{
10595 /* do nothing */
10596 return VOS_STATUS_SUCCESS;
10597}
Jeff Johnson295189b2012-06-20 16:38:30 -070010598/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010599 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 *
10601 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010602void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010603{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10605
Jeff Johnson295189b2012-06-20 16:38:30 -070010606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010607 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010608
10609 if(NULL == pWdaParams)
10610 {
10611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010612 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010613 VOS_ASSERT(0) ;
10614 return ;
10615 }
10616
10617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10618 vos_mem_free(pWdaParams->wdaMsgParam);
10619 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010620
Jeff Johnson295189b2012-06-20 16:38:30 -070010621 //print a msg, nothing else to do
10622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010623 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010624 return ;
10625}
Jeff Johnson295189b2012-06-20 16:38:30 -070010626/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010627 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10628 * Free memory.
10629 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10630 */
10631void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10632{
10633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10634
10635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10636 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10637
10638 if(NULL == pWdaParams)
10639 {
10640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10641 "%s: pWdaParams received NULL", __func__);
10642 VOS_ASSERT(0);
10643 return;
10644 }
10645
10646 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10647 {
10648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10649 vos_mem_free(pWdaParams->wdaMsgParam);
10650 vos_mem_free(pWdaParams);
10651 }
10652
10653 return;
10654}
10655/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010656 * FUNCTION: WDA_UpdateUapsdParamsReq
10657 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10658 */
10659VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10660 tUpdateUapsdParams* pUpdateUapsdInfo)
10661{
10662 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010663 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10665 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10666 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010667 tWDA_ReqParams *pWdaParams = NULL;
10668
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010670 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010671 if(NULL == wdiUpdateUapsdParams)
10672 {
10673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010675 VOS_ASSERT(0);
10676 return VOS_STATUS_E_NOMEM;
10677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010678 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10679 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10680 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010681 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10682 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010683
10684 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10685 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 {
10687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010689 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010690 vos_mem_free(pUpdateUapsdInfo);
10691 vos_mem_free(wdiUpdateUapsdParams);
10692 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010693 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010694 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010695 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010696 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010697 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10698 pWdaParams->pWdaContext = pWDA;
10699
Jeff Johnson43971f52012-07-17 12:26:56 -070010700 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010701 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010702 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010703
Jeff Johnson43971f52012-07-17 12:26:56 -070010704 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 {
10706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10707 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010708 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10710 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010711 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010712 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010713 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010714}
Jeff Johnson295189b2012-06-20 16:38:30 -070010715/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010716 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 *
10718 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010719void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010720{
10721 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010723 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 if(WDI_STATUS_SUCCESS != wdiStatus)
10725 {
10726 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010727 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 if(NULL == pWdaParams)
10730 {
10731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010732 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010733 VOS_ASSERT(0) ;
10734 return ;
10735 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10737 vos_mem_free(pWdaParams->wdaMsgParam);
10738 vos_mem_free(pWdaParams);
10739 return ;
10740}
Jeff Johnson295189b2012-06-20 16:38:30 -070010741/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010742 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10743 * Free memory.
10744 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10745 */
10746void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10747{
10748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10749
10750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10751 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10752
10753 if(NULL == pWdaParams)
10754 {
10755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10756 "%s: pWdaParams received NULL", __func__);
10757 VOS_ASSERT(0);
10758 return;
10759 }
10760
10761 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10762 {
10763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10764 vos_mem_free(pWdaParams->wdaMsgParam);
10765 vos_mem_free(pWdaParams);
10766 }
10767
10768 return;
10769}
10770/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010771 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10772 *
10773 */
10774VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10775 tSirWlanSetRxpFilters *pWlanSuspendParam)
10776{
Jeff Johnson295189b2012-06-20 16:38:30 -070010777 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010778 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010779 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010780 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010781 /* Sanity Check
10782 * This is very unlikely and add assert to collect more info next time */
10783 if(NULL == pWlanSuspendParam)
10784 {
10785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10786 "%s: pWlanSuspendParam received NULL", __func__);
10787 VOS_ASSERT(0) ;
10788 return VOS_STATUS_E_FAULT;
10789 }
10790 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10791 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010793 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 if(NULL == wdiRxpFilterParams)
10795 {
10796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 VOS_ASSERT(0);
10799 vos_mem_free(pWlanSuspendParam);
10800 return VOS_STATUS_E_NOMEM;
10801 }
10802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10803 if(NULL == pWdaParams)
10804 {
10805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010807 VOS_ASSERT(0);
10808 vos_mem_free(wdiRxpFilterParams);
10809 vos_mem_free(pWlanSuspendParam);
10810 return VOS_STATUS_E_NOMEM;
10811 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10813 pWlanSuspendParam->setMcstBcstFilter;
10814 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10815 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10816
Yue Ma7f44bbe2013-04-12 11:47:39 -070010817 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10818 wdiRxpFilterParams->pUserData = pWdaParams;
10819
Jeff Johnson295189b2012-06-20 16:38:30 -070010820 pWdaParams->pWdaContext = pWDA;
10821 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10822 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010823 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010824 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010825 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010826 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 {
10828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10829 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010830 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10832 vos_mem_free(pWdaParams->wdaMsgParam);
10833 vos_mem_free(pWdaParams);
10834 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010835 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010836}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010837
10838/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010839 * FUNCTION: WDA_ProcessGetFrameLogReq
10840 * Request to WDI to get the Frame Log.
10841 */
10842VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10843 tAniGetFrameLogReq *pGetFrameLog)
10844{
10845 VOS_STATUS status = VOS_STATUS_SUCCESS;
10846 WDI_Status wstatus;
10847 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10848 tWDA_ReqParams *pWdaParams ;
10849
10850 /* Sanity Check*/
10851 if(NULL == pGetFrameLog)
10852 {
10853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010854 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010855 VOS_ASSERT(0) ;
10856 return VOS_STATUS_E_FAULT;
10857 }
10858
10859 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10860 sizeof(WDI_GetFrameLogReqInfoType));
10861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10862 "------> %s " ,__func__);
10863
10864 if(NULL == wdiGetFrameLogInfo)
10865 {
10866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10867 "%s: VOS MEM Alloc Failure", __func__);
10868 VOS_ASSERT(0);
10869 vos_mem_free(pGetFrameLog);
10870 return VOS_STATUS_E_NOMEM;
10871 }
10872
10873 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10874 if(NULL == pWdaParams)
10875 {
10876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10877 "%s: VOS MEM Alloc Failure", __func__);
10878 VOS_ASSERT(0);
10879 vos_mem_free(wdiGetFrameLogInfo);
10880 vos_mem_free(pGetFrameLog);
10881 return VOS_STATUS_E_NOMEM;
10882 }
10883
10884 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10885
10886 pWdaParams->pWdaContext = pWDA;
10887 pWdaParams->wdaMsgParam = pGetFrameLog;
10888 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10889
10890 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10891 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10892 pWdaParams);
10893 if(IS_WDI_STATUS_FAILURE(wstatus))
10894 {
10895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10896 "Failure in get frame log REQ WDI API, free all the memory" );
10897 status = CONVERT_WDI2VOS_STATUS(wstatus);
10898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10899 vos_mem_free(pWdaParams->wdaMsgParam);
10900 vos_mem_free(pWdaParams);
10901 }
10902 return status;
10903}
10904
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010905
10906/*
10907 * FUNCTION: WDA_FatalEventLogsRspCallback
10908 * recieves Flush Logs response from FW
10909 */
10910
10911void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10912 void* pUserData)
10913{
10914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10915
10916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10917 "<------ %s,wdiStatus:%d " ,
10918 __func__, wdiRsp->wdiStatus);
10919 if(NULL == pWdaParams)
10920 {
10921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10922 "%s: pWdaParams received NULL", __func__);
10923 VOS_ASSERT(0);
10924 return ;
10925 }
10926
10927 if(NULL == pWdaParams->wdaMsgParam)
10928 {
10929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10930 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10931 VOS_ASSERT(0);
10932 vos_mem_free(pWdaParams);
10933 return ;
10934 }
10935
10936 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10937 {
10938 /*
10939 * If it is failure, it means JOb is already posted by FW
10940 * for logging, so for failure scenario also we will get the
10941 * done indication
10942 */
10943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10944 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10945 __func__, wdiRsp->wdiStatus);
10946 }
10947
10948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10949 vos_mem_free(pWdaParams->wdaMsgParam);
10950 vos_mem_free(pWdaParams);
10951
10952 return;
10953
10954}
10955
10956/*
10957 * FUNCTION: WDA_ProcessFatalEventLogsReq
10958 * Request to WDI to send the fatal Event Logs Req.
10959 */
10960
10961VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10962 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10963{
10964 VOS_STATUS status = VOS_STATUS_SUCCESS;
10965 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10966 tWDA_ReqParams *pWdaParams ;
10967 WDI_Status wstatus;
10968
10969
10970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10971 "------> %s " ,__func__);
10972 if (NULL == pFatalEventLogsReqParam)
10973 {
10974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10975 "%s: pMgmtLoggingInitParam received NULL", __func__);
10976 VOS_ASSERT(0) ;
10977 return VOS_STATUS_E_FAULT;
10978 }
10979 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10980 sizeof(WDI_FatalEventLogsReqInfoType));
10981 if(NULL == wdiFatalEventLogsReqInfo)
10982 {
10983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10984 "%s: VOS MEM Alloc Failure", __func__);
10985 VOS_ASSERT(0);
10986 vos_mem_free(pFatalEventLogsReqParam);
10987 return VOS_STATUS_E_NOMEM;
10988 }
10989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10990 if(NULL == pWdaParams)
10991 {
10992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10993 "%s: VOS MEM Alloc Failure", __func__);
10994 VOS_ASSERT(0);
10995 vos_mem_free(wdiFatalEventLogsReqInfo);
10996 vos_mem_free(pFatalEventLogsReqParam);
10997 return VOS_STATUS_E_NOMEM;
10998 }
10999 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
11000 pWdaParams->pWdaContext = pWDA;
11001 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
11002 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
11003
11004 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
11005 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
11006 pWdaParams);
11007 if(IS_WDI_STATUS_FAILURE(wstatus))
11008 {
11009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11010 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11011 status = CONVERT_WDI2VOS_STATUS(wstatus);
11012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11013 vos_mem_free(pWdaParams->wdaMsgParam);
11014 vos_mem_free(pWdaParams);
11015 }
11016
11017 return status;
11018
11019}
11020
Siddharth Bhal64246172015-02-27 01:04:37 +053011021/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011022 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011023 *
11024 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011025VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
11026 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011027{
11028 VOS_STATUS status = VOS_STATUS_SUCCESS;
11029 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011030 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011031 tWDA_ReqParams *pWdaParams ;
11032
11033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11034 "------> %s " ,__func__);
11035
11036 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011037 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011038 {
11039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011040 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011041 VOS_ASSERT(0) ;
11042 return VOS_STATUS_E_FAULT;
11043 }
11044
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011045 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
11046 sizeof(WDI_FWLoggingInitReqInfoType));
11047 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011048 {
11049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11050 "%s: VOS MEM Alloc Failure", __func__);
11051 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011052 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011053 return VOS_STATUS_E_NOMEM;
11054 }
11055
11056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11057 if(NULL == pWdaParams)
11058 {
11059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11060 "%s: VOS MEM Alloc Failure", __func__);
11061 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011062 vos_mem_free(wdiFWLoggingInitInfo);
11063 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011064 return VOS_STATUS_E_NOMEM;
11065 }
11066
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011067 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
11068 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
11069 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
11070 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
11071 wdiFWLoggingInitInfo->continuousFrameLogging =
11072 pFWLoggingInitParam->continuousFrameLogging;
11073 wdiFWLoggingInitInfo->minLogBufferSize=
11074 pFWLoggingInitParam->minLogBufferSize;
11075 wdiFWLoggingInitInfo->maxLogBufferSize=
11076 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011077
11078 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011079 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
11080 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011081
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011082 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
11083 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011084 pWdaParams);
11085 if(IS_WDI_STATUS_FAILURE(wstatus))
11086 {
11087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11088 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11089 status = CONVERT_WDI2VOS_STATUS(wstatus);
11090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11091 vos_mem_free(pWdaParams->wdaMsgParam);
11092 vos_mem_free(pWdaParams);
11093 }
11094
11095 return status;
11096}
11097
Jeff Johnson295189b2012-06-20 16:38:30 -070011098/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053011099 * FUNCTION: WDA_ProcessStartRssiMonitorReq
11100 *
11101 */
11102VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
11103 tSirRssiMonitorReq *pRssiMonitorReqParam)
11104{
11105 VOS_STATUS status = VOS_STATUS_SUCCESS;
11106 WDI_Status wstatus;
11107 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11108 tWDA_ReqParams *pWdaParams ;
11109
11110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11111 "------> %s " ,__func__);
11112
11113 /* Sanity Check*/
11114 if(NULL == pRssiMonitorReqParam)
11115 {
11116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11117 "%s: pRssiMonitorReqParam received NULL", __func__);
11118 VOS_ASSERT(0) ;
11119 return VOS_STATUS_E_FAULT;
11120 }
11121
11122 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11123 sizeof(WDI_RssiMonitorReqInfoType));
11124 if(NULL == wdiRssiMonitorInfo)
11125 {
11126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11127 "%s: VOS MEM Alloc Failure", __func__);
11128 VOS_ASSERT(0);
11129 vos_mem_free(pRssiMonitorReqParam);
11130 return VOS_STATUS_E_NOMEM;
11131 }
11132
11133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11134 if(NULL == pWdaParams)
11135 {
11136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11137 "%s: VOS MEM Alloc Failure", __func__);
11138 VOS_ASSERT(0);
11139 vos_mem_free(wdiRssiMonitorInfo);
11140 vos_mem_free(pRssiMonitorReqParam);
11141 return VOS_STATUS_E_NOMEM;
11142 }
11143
11144 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11145 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
11146 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
11147 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11148 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11149
11150 pWdaParams->pWdaContext = pWDA;
11151 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11152 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11153
11154 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
11155 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
11156 pWdaParams);
11157 if(IS_WDI_STATUS_FAILURE(wstatus))
11158 {
11159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11160 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11161 status = CONVERT_WDI2VOS_STATUS(wstatus);
11162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11163 vos_mem_free(pWdaParams->wdaMsgParam);
11164 vos_mem_free(pWdaParams);
11165 }
11166
11167 return status;
11168}
11169
11170/*
11171 * FUNCTION: WDA_ProcessStopRssiMonitorReq
11172 *
11173 */
11174VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
11175 tSirRssiMonitorReq *pRssiMonitorReqParam)
11176{
11177 VOS_STATUS status = VOS_STATUS_SUCCESS;
11178 WDI_Status wstatus;
11179 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11180 tWDA_ReqParams *pWdaParams ;
11181
11182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11183 "------> %s " ,__func__);
11184
11185 /* Sanity Check*/
11186 if(NULL == pRssiMonitorReqParam)
11187 {
11188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11189 "%s: pRssiMonitorReqParam received NULL", __func__);
11190 VOS_ASSERT(0) ;
11191 return VOS_STATUS_E_FAULT;
11192 }
11193
11194 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11195 sizeof(WDI_RssiMonitorReqInfoType));
11196 if(NULL == wdiRssiMonitorInfo)
11197 {
11198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11199 "%s: VOS MEM Alloc Failure", __func__);
11200 VOS_ASSERT(0);
11201 vos_mem_free(pRssiMonitorReqParam);
11202 return VOS_STATUS_E_NOMEM;
11203 }
11204
11205 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11206 if(NULL == pWdaParams)
11207 {
11208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11209 "%s: VOS MEM Alloc Failure", __func__);
11210 VOS_ASSERT(0);
11211 vos_mem_free(wdiRssiMonitorInfo);
11212 vos_mem_free(pRssiMonitorReqParam);
11213 return VOS_STATUS_E_NOMEM;
11214 }
11215
11216 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11217 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11218 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11219
11220 pWdaParams->pWdaContext = pWDA;
11221 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11222 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11223
11224 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
11225 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
11226 pWdaParams);
11227 if(IS_WDI_STATUS_FAILURE(wstatus))
11228 {
11229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11230 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11231 status = CONVERT_WDI2VOS_STATUS(wstatus);
11232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11233 vos_mem_free(pWdaParams->wdaMsgParam);
11234 vos_mem_free(pWdaParams);
11235 }
11236
11237 return status;
11238}
11239
11240
11241/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 * FUNCTION: WDA_WdiIndicationCallback
11243 *
11244 */
11245void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
11246 void* pUserData)
11247{
11248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011249 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011250}
Jeff Johnson295189b2012-06-20 16:38:30 -070011251/*
11252 * FUNCTION: WDA_ProcessWlanSuspendInd
11253 *
11254 */
11255VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
11256 tSirWlanSuspendParam *pWlanSuspendParam)
11257{
11258 WDI_Status wdiStatus;
11259 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011261 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
11263 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11264 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11265 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011267 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
11268 if(WDI_STATUS_PENDING == wdiStatus)
11269 {
11270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011271 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011272 }
11273 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11274 {
11275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011276 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 vos_mem_free(pWlanSuspendParam);
11279 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11280}
11281
Chet Lanctot186b5732013-03-18 10:26:30 -070011282#ifdef WLAN_FEATURE_11W
11283/*
11284 * FUNCTION: WDA_ProcessExcludeUnecryptInd
11285 *
11286 */
11287VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
11288 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
11289{
11290 WDI_Status wdiStatus;
11291 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
11292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11293 "------> %s ", __func__);
11294
11295 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
11296 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
11297 sizeof(tSirMacAddr));
11298
11299 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
11300 wdiExclUnencryptParams.pUserData = pWDA;
11301
11302 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
11303 if(WDI_STATUS_PENDING == wdiStatus)
11304 {
11305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11306 "Pending received for %s:%d ", __func__, __LINE__ );
11307 }
11308 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11309 {
11310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11311 "Failure in %s:%d ", __func__, __LINE__ );
11312 }
11313 vos_mem_free(pExclUnencryptParam);
11314 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11315}
11316#endif
11317
Jeff Johnson295189b2012-06-20 16:38:30 -070011318/*
11319 * FUNCTION: WDA_ProcessWlanResumeCallback
11320 *
11321 */
11322void WDA_ProcessWlanResumeCallback(
11323 WDI_SuspendResumeRspParamsType *resumeRspParams,
11324 void* pUserData)
11325{
11326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011328 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 if(NULL == pWdaParams)
11330 {
11331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011332 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 VOS_ASSERT(0) ;
11334 return ;
11335 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011336 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
11337 {
11338 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011339 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11342 vos_mem_free(pWdaParams->wdaMsgParam);
11343 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011344 return ;
11345}
Jeff Johnson295189b2012-06-20 16:38:30 -070011346/*
11347 * FUNCTION: WDA_ProcessWlanResumeReq
11348 *
11349 */
11350VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11351 tSirWlanResumeParam *pWlanResumeParam)
11352{
11353 WDI_Status wdiStatus;
11354 WDI_ResumeParamsType *wdiResumeParams =
11355 (WDI_ResumeParamsType *)vos_mem_malloc(
11356 sizeof(WDI_ResumeParamsType) ) ;
11357 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011359 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011360 if(NULL == wdiResumeParams)
11361 {
11362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011363 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 VOS_ASSERT(0);
11365 return VOS_STATUS_E_NOMEM;
11366 }
11367 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11368 if(NULL == pWdaParams)
11369 {
11370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011371 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 VOS_ASSERT(0);
11373 vos_mem_free(wdiResumeParams);
11374 return VOS_STATUS_E_NOMEM;
11375 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011376 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11377 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011379 wdiResumeParams->wdiReqStatusCB = NULL;
11380 pWdaParams->wdaMsgParam = pWlanResumeParam;
11381 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11382 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11384 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11385 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011386 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11387 {
11388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11389 "Failure in Host Resume REQ WDI API, free all the memory " );
11390 VOS_ASSERT(0);
11391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11392 vos_mem_free(pWdaParams->wdaMsgParam);
11393 vos_mem_free(pWdaParams);
11394 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11396}
11397
Jeff Johnson295189b2012-06-20 16:38:30 -070011398/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011399 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011400 *
11401 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011402void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011403{
11404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011406 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 if(NULL == pWdaParams)
11408 {
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011410 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011411 VOS_ASSERT(0) ;
11412 return ;
11413 }
11414
11415 vos_mem_free(pWdaParams->wdaMsgParam) ;
11416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11417 vos_mem_free(pWdaParams) ;
11418 /*
11419 * No respone required for SetBeaconFilter req so just free the request
11420 * param here
11421 */
11422
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 return ;
11424}
Jeff Johnson295189b2012-06-20 16:38:30 -070011425/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011426 * FUNCTION: WDA_SetBeaconFilterReqCallback
11427 * Free memory.
11428 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11429 */
11430void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11431{
11432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11433
11434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11435 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11436
11437 if(NULL == pWdaParams)
11438 {
11439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11440 "%s: pWdaParams received NULL", __func__);
11441 VOS_ASSERT(0);
11442 return;
11443 }
11444
11445 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11446 {
11447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11448 vos_mem_free(pWdaParams->wdaMsgParam);
11449 vos_mem_free(pWdaParams);
11450 }
11451
11452 return;
11453}
11454/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011455 * FUNCTION: WDA_SetBeaconFilterReq
11456 * Request to WDI to send the beacon filtering related information.
11457 */
11458VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11459 tBeaconFilterMsg* pBeaconFilterInfo)
11460{
11461 WDI_Status status = WDI_STATUS_SUCCESS;
11462 tANI_U8 *dstPtr, *srcPtr;
11463 tANI_U8 filterLength;
11464 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11465 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11466 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11467 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011469 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 if(NULL == wdiBeaconFilterInfo)
11471 {
11472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011473 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 VOS_ASSERT(0);
11475 return VOS_STATUS_E_NOMEM;
11476 }
11477 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11478 if(NULL == pWdaParams)
11479 {
11480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 VOS_ASSERT(0);
11483 vos_mem_free(wdiBeaconFilterInfo);
11484 return VOS_STATUS_E_NOMEM;
11485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011486 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11487 pBeaconFilterInfo->beaconInterval;
11488 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11489 pBeaconFilterInfo->capabilityInfo;
11490 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11491 pBeaconFilterInfo->capabilityMask;
11492 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011493
11494 //Fill the BssIdx
11495 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11496
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 //Fill structure with info contained in the beaconFilterTable
11498 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11499 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11500 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11501 if(WDI_BEACON_FILTER_LEN < filterLength)
11502 {
11503 filterLength = WDI_BEACON_FILTER_LEN;
11504 }
11505 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011506 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11507 wdiBeaconFilterInfo->pUserData = pWdaParams;
11508
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 /* Store param pointer as passed in by caller */
11510 /* store Params pass it to WDI */
11511 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11512 pWdaParams->pWdaContext = pWDA;
11513 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11514
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011516 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 if(IS_WDI_STATUS_FAILURE(status))
11518 {
11519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11520 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11521 vos_mem_free(pWdaParams->wdaMsgParam) ;
11522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11523 vos_mem_free(pWdaParams) ;
11524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 return CONVERT_WDI2VOS_STATUS(status) ;
11526}
Jeff Johnson295189b2012-06-20 16:38:30 -070011527/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011528 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 *
11530 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011531void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011532{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011533 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11534
Jeff Johnson295189b2012-06-20 16:38:30 -070011535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011536 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011537
11538 if(NULL == pWdaParams)
11539 {
11540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011541 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011542 VOS_ASSERT(0) ;
11543 return ;
11544 }
11545
11546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11547 vos_mem_free(pWdaParams->wdaMsgParam);
11548 vos_mem_free(pWdaParams);
11549
Jeff Johnson295189b2012-06-20 16:38:30 -070011550 //print a msg, nothing else to do
11551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011552 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011553 return ;
11554}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011555/*
11556 * FUNCTION: WDA_RemBeaconFilterReqCallback
11557 * Free memory.
11558 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11559 */
11560void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11561{
11562 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11563
11564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11565 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11566
11567 if(NULL == pWdaParams)
11568 {
11569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11570 "%s: pWdaParams received NULL", __func__);
11571 VOS_ASSERT(0);
11572 return;
11573 }
11574
11575 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11576 {
11577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11578 vos_mem_free(pWdaParams->wdaMsgParam);
11579 vos_mem_free(pWdaParams);
11580 }
11581
11582 return;
11583}
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 // TODO: PE does not have this feature for now implemented,
11585 // but the support for removing beacon filter exists between
11586 // HAL and FW. This function can be called whenever PE defines
11587 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011588/*
11589 * FUNCTION: WDA_RemBeaconFilterReq
11590 * Request to WDI to send the removal of beacon filtering related information.
11591 */
11592VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11593 tRemBeaconFilterMsg* pBeaconFilterInfo)
11594{
11595 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011596 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011597 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11598 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11599 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011600 tWDA_ReqParams *pWdaParams ;
11601
Jeff Johnson295189b2012-06-20 16:38:30 -070011602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011603 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 if(NULL == wdiBeaconFilterInfo)
11605 {
11606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 VOS_ASSERT(0);
11609 return VOS_STATUS_E_NOMEM;
11610 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011611 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11612 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011613 {
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011617 vos_mem_free(wdiBeaconFilterInfo);
11618 vos_mem_free(pBeaconFilterInfo);
11619 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011621
11622 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11623 pBeaconFilterInfo->ucIeCount;
11624 //Fill structure with info contained in the ucRemIeId
11625 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11626 pBeaconFilterInfo->ucRemIeId,
11627 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11628 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11629 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011630
11631 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011632 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011633 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011634 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11635
11636 pWdaParams->pWdaContext = pWDA;
11637
Jeff Johnson43971f52012-07-17 12:26:56 -070011638 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011639 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011640 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011641 {
11642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11643 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011644 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11646 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011647 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011648 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011649 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011650}
Jeff Johnson295189b2012-06-20 16:38:30 -070011651/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011652 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011653 *
11654 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011655void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011656{
11657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011659 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011660 if(NULL == pWdaParams)
11661 {
11662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011663 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 VOS_ASSERT(0) ;
11665 return ;
11666 }
11667
11668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11669 vos_mem_free(pWdaParams) ;
11670
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 return ;
11672}
Jeff Johnson295189b2012-06-20 16:38:30 -070011673/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011674 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11675 * Free memory.
11676 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11677 */
11678void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11679{
11680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11681
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11683 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11684
11685 if(NULL == pWdaParams)
11686 {
11687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11688 "%s: pWdaParams received NULL", __func__);
11689 VOS_ASSERT(0);
11690 return;
11691 }
11692
11693 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11694 {
11695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11696 vos_mem_free(pWdaParams);
11697 }
11698
11699 return;
11700}
11701/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 * FUNCTION: WDA_SetRSSIThresholdsReq
11703 * Request to WDI to set the RSSI thresholds (sta mode).
11704 */
11705VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11706{
11707 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011708 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011709 tWDA_CbContext *pWDA = NULL ;
11710 v_PVOID_t pVosContext = NULL;
11711 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11712 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11713 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11714 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011716 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 if(NULL == wdiRSSIThresholdsInfo)
11718 {
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 VOS_ASSERT(0);
11722 return VOS_STATUS_E_NOMEM;
11723 }
11724 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11725 if(NULL == pWdaParams)
11726 {
11727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011728 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011729 VOS_ASSERT(0);
11730 vos_mem_free(wdiRSSIThresholdsInfo);
11731 return VOS_STATUS_E_NOMEM;
11732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011733 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011734 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11735 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11736 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11738 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11739 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011740 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11741 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11742 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011743 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11744 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11746 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11747
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 /* Store param pointer as passed in by caller */
11749 /* store Params pass it to WDI */
11750 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11751 pWdaParams->pWdaContext = pWDA;
11752 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011753 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011754 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011755 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011756 {
11757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11758 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011759 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11761 vos_mem_free(pWdaParams) ;
11762 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011763 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011764
11765}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011766/*
Yue Madb90ac12013-04-04 13:39:13 -070011767 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011768 *
11769 */
Yue Madb90ac12013-04-04 13:39:13 -070011770void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011771{
11772 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11773
11774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011775 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011776 if(NULL == pWdaParams)
11777 {
11778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011779 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 VOS_ASSERT(0) ;
11781 return ;
11782 }
11783
11784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11785 vos_mem_free(pWdaParams->wdaMsgParam);
11786 vos_mem_free(pWdaParams) ;
11787
11788 //print a msg, nothing else to do
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011790 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011791 return ;
11792}
Jeff Johnson295189b2012-06-20 16:38:30 -070011793/*
Yue Madb90ac12013-04-04 13:39:13 -070011794 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011795 * Free memory.
11796 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011797 */
11798void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11799{
11800 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11801
11802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11803 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11804
11805 if(NULL == pWdaParams)
11806 {
11807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11808 "%s: Invalid pWdaParams pointer", __func__);
11809 VOS_ASSERT(0);
11810 return;
11811 }
11812
11813 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11814 {
11815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11816 vos_mem_free(pWdaParams->wdaMsgParam);
11817 vos_mem_free(pWdaParams);
11818 }
11819
11820 return;
11821}
11822/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011823 * FUNCTION: WDA_ProcessHostOffloadReq
11824 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11825 * to broadcast traffic (sta mode).
11826 */
11827VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11828 tSirHostOffloadReq *pHostOffloadParams)
11829{
11830 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011831 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011832 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11833 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11834 sizeof(WDI_HostOffloadReqParamsType)) ;
11835 tWDA_ReqParams *pWdaParams ;
11836
11837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011838 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011839
11840 if(NULL == wdiHostOffloadInfo)
11841 {
11842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 VOS_ASSERT(0);
11845 return VOS_STATUS_E_NOMEM;
11846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11848 if(NULL == pWdaParams)
11849 {
11850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011852 VOS_ASSERT(0);
11853 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011854 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011855 return VOS_STATUS_E_NOMEM;
11856 }
11857
11858 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11859 pHostOffloadParams->offloadType;
11860 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11861 pHostOffloadParams->enableOrDisable;
11862
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011863 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11864 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11865
Jeff Johnson295189b2012-06-20 16:38:30 -070011866 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11867 {
11868 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11869 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11870 pHostOffloadParams->params.hostIpv4Addr,
11871 4);
11872 break;
11873 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11874 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11875 pHostOffloadParams->params.hostIpv6Addr,
11876 16);
11877 break;
11878 case SIR_IPV6_NS_OFFLOAD:
11879 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11880 pHostOffloadParams->params.hostIpv6Addr,
11881 16);
11882
11883#ifdef WLAN_NS_OFFLOAD
11884 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11885 {
11886 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11887 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11888 16);
11889 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11890 }
11891 else
11892 {
11893 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11894 }
11895
11896 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11897 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11898 16);
11899 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11900 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11901 6);
11902
11903 //Only two are supported so let's go through them without a loop
11904 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11905 {
11906 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11907 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11908 16);
11909 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11910 }
11911 else
11912 {
11913 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11914 }
11915
11916 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11917 {
11918 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11919 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11920 16);
11921 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11922 }
11923 else
11924 {
11925 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11926 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011927 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11928 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 break;
11930#endif //WLAN_NS_OFFLOAD
11931 default:
11932 {
11933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11934 "No Handling for Offload Type %x in WDA "
11935 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11936 //WDA_VOS_ASSERT(0) ;
11937 }
11938 }
Yue Madb90ac12013-04-04 13:39:13 -070011939 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11940 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011941
Jeff Johnson295189b2012-06-20 16:38:30 -070011942 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011943 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011944 /* store Params pass it to WDI */
11945 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11946 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011947
Jeff Johnson295189b2012-06-20 16:38:30 -070011948
Jeff Johnson43971f52012-07-17 12:26:56 -070011949 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011950 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011951
Jeff Johnson43971f52012-07-17 12:26:56 -070011952 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011953 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053011954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053011955 "Failure in host offload REQ WDI API, free all the memory %d",
11956 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011957 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11959 vos_mem_free(pWdaParams->wdaMsgParam);
11960 vos_mem_free(pWdaParams) ;
11961 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011962 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011963
11964}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011965/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011966 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011967 *
11968 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011969void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011970{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011971 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11972
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011974 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011975
11976 if(NULL == pWdaParams)
11977 {
11978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011979 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011980 VOS_ASSERT(0) ;
11981 return ;
11982 }
11983
11984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11985 vos_mem_free(pWdaParams->wdaMsgParam);
11986 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011987
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 //print a msg, nothing else to do
11989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011990 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 return ;
11992}
Jeff Johnson295189b2012-06-20 16:38:30 -070011993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011994 * FUNCTION: WDA_KeepAliveReqCallback
11995 * Free memory.
11996 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11997 */
11998void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11999{
12000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12001
12002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12003 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12004
12005 if(NULL == pWdaParams)
12006 {
12007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12008 "%s: pWdaParams received NULL", __func__);
12009 VOS_ASSERT(0);
12010 return;
12011 }
12012
12013 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12014 {
12015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12016 vos_mem_free(pWdaParams->wdaMsgParam);
12017 vos_mem_free(pWdaParams);
12018 }
12019
12020 return;
12021}
12022/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012023 * FUNCTION: WDA_ProcessKeepAliveReq
12024 * Request to WDI to send Keep Alive packets to minimize unnecessary host
12025 * wakeup due to broadcast traffic (sta mode).
12026 */
12027VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
12028 tSirKeepAliveReq *pKeepAliveParams)
12029{
12030 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012031 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012032 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
12033 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
12034 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012035 tWDA_ReqParams *pWdaParams;
12036
Jeff Johnson295189b2012-06-20 16:38:30 -070012037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012038 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 if(NULL == wdiKeepAliveInfo)
12040 {
12041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012044 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012045 return VOS_STATUS_E_NOMEM;
12046 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012047
12048 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12049 if(NULL == pWdaParams)
12050 {
12051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012052 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012053 VOS_ASSERT(0);
12054 vos_mem_free(wdiKeepAliveInfo);
12055 vos_mem_free(pKeepAliveParams);
12056 return VOS_STATUS_E_NOMEM;
12057 }
12058
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
12060 pKeepAliveParams->packetType;
12061 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
12062 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012063
12064 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
12065 pKeepAliveParams->bssId,
12066 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012067
12068 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
12069 {
12070 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12071 pKeepAliveParams->hostIpv4Addr,
12072 SIR_IPV4_ADDR_LEN);
12073 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12074 pKeepAliveParams->destIpv4Addr,
12075 SIR_IPV4_ADDR_LEN);
12076 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12077 pKeepAliveParams->destMacAddr,
12078 SIR_MAC_ADDR_LEN);
12079 }
12080 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
12081 {
12082 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12083 SIR_IPV4_ADDR_LEN,
12084 0);
12085 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12086 SIR_IPV4_ADDR_LEN,
12087 0);
12088 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12089 SIR_MAC_ADDR_LEN,
12090 0);
12091 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012092 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
12093 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012094
Jeff Johnson295189b2012-06-20 16:38:30 -070012095 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012096 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012098 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
12099 pWdaParams->pWdaContext = pWDA;
12100
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
12102 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
12103 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
12104 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
12105 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
12107 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
12108 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
12109 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
12110 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
12111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12112 "WDA DMAC : %d:%d:%d:%d:%d:%d",
12113 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
12114 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
12115 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
12116 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
12117 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
12118 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
12119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12120 "TimePeriod %d PacketType %d",
12121 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
12122 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070012123 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012124 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012125
Jeff Johnson43971f52012-07-17 12:26:56 -070012126 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 {
12128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12129 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012130 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12132 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012133 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012134 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012135 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012136
12137}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012138/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012139 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012140 *
12141 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012142void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012143 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
12144 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012145{
12146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012148 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012149 if(NULL == pWdaParams)
12150 {
12151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012152 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012153 VOS_ASSERT(0) ;
12154 return ;
12155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12157 vos_mem_free(pWdaParams->wdaMsgParam);
12158 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 return ;
12160}
Jeff Johnson295189b2012-06-20 16:38:30 -070012161/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012162 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
12163 * Free memory.
12164 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
12165 */
12166void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12167{
12168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12169
12170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12171 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12172
12173 if(NULL == pWdaParams)
12174 {
12175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12176 "%s: pWdaParams received NULL", __func__);
12177 VOS_ASSERT(0);
12178 return;
12179 }
12180
12181 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12182 {
12183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12184 vos_mem_free(pWdaParams->wdaMsgParam);
12185 vos_mem_free(pWdaParams);
12186 }
12187
12188 return;
12189}
12190
12191/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012192 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
12193 * Request to WDI to add WOWL Bcast pattern
12194 */
12195VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
12196 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
12197{
12198 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012199 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012200 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
12201 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
12202 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
12203 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012205 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012206 if(NULL == wdiWowlAddBcPtrnInfo)
12207 {
12208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012210 VOS_ASSERT(0);
12211 return VOS_STATUS_E_NOMEM;
12212 }
12213 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12214 if(NULL == pWdaParams)
12215 {
12216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012218 VOS_ASSERT(0);
12219 vos_mem_free(wdiWowlAddBcPtrnInfo);
12220 return VOS_STATUS_E_NOMEM;
12221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012222 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
12223 pWowlAddBcPtrnParams->ucPatternId;
12224 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
12225 pWowlAddBcPtrnParams->ucPatternByteOffset;
12226 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
12227 pWowlAddBcPtrnParams->ucPatternMaskSize;
12228 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
12229 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070012230 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
12231 {
12232 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12233 pWowlAddBcPtrnParams->ucPattern,
12234 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
12235 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12236 pWowlAddBcPtrnParams->ucPatternMask,
12237 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12238 }
12239 else
12240 {
12241 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12242 pWowlAddBcPtrnParams->ucPattern,
12243 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12244 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12245 pWowlAddBcPtrnParams->ucPatternMask,
12246 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12247
12248 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
12249 pWowlAddBcPtrnParams->ucPatternExt,
12250 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12251 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
12252 pWowlAddBcPtrnParams->ucPatternMaskExt,
12253 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12254 }
12255
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012256 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
12257 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
12258
Yue Ma7f44bbe2013-04-12 11:47:39 -070012259 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
12260 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012261 /* Store param pointer as passed in by caller */
12262 /* store Params pass it to WDI */
12263 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
12264 pWdaParams->pWdaContext = pWDA;
12265 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012266 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012267 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012268 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012269 {
12270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12271 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012272 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 vos_mem_free(pWdaParams->wdaMsgParam) ;
12274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12275 vos_mem_free(pWdaParams) ;
12276 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012277 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012278
12279}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012280/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012281 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 *
12283 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012284void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012285 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
12286 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012287{
12288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012290 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012291 if(NULL == pWdaParams)
12292 {
12293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012294 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012295 VOS_ASSERT(0) ;
12296 return ;
12297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12299 vos_mem_free(pWdaParams->wdaMsgParam);
12300 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012301 return ;
12302}
Jeff Johnson295189b2012-06-20 16:38:30 -070012303/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012304 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
12305 * Free memory.
12306 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
12307 */
12308void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12309{
12310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12311
12312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12313 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12314
12315 if(NULL == pWdaParams)
12316 {
12317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12318 "%s: pWdaParams received NULL", __func__);
12319 VOS_ASSERT(0);
12320 return;
12321 }
12322
12323 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12324 {
12325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12326 vos_mem_free(pWdaParams->wdaMsgParam);
12327 vos_mem_free(pWdaParams);
12328 }
12329
12330 return;
12331}
12332/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012333 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
12334 * Request to WDI to delete WOWL Bcast pattern
12335 */
12336VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
12337 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
12338{
12339 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012340 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
12342 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
12343 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
12344 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012346 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 if(NULL == wdiWowlDelBcPtrnInfo)
12348 {
12349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012351 VOS_ASSERT(0);
12352 return VOS_STATUS_E_NOMEM;
12353 }
12354 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12355 if(NULL == pWdaParams)
12356 {
12357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012358 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012359 VOS_ASSERT(0);
12360 vos_mem_free(wdiWowlDelBcPtrnInfo);
12361 return VOS_STATUS_E_NOMEM;
12362 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012363 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12364 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012365
12366 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12367 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12368
Yue Ma7f44bbe2013-04-12 11:47:39 -070012369 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12370 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 /* Store param pointer as passed in by caller */
12372 /* store Params pass it to WDI */
12373 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12374 pWdaParams->pWdaContext = pWDA;
12375 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012376 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012377 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012378 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012379 {
12380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12381 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012382 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012383 vos_mem_free(pWdaParams->wdaMsgParam) ;
12384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12385 vos_mem_free(pWdaParams) ;
12386 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012387 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012388
12389}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012390/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012391 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012392 *
12393 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012394void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012395{
12396 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012397 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012398 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012400 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012401 if(NULL == pWdaParams)
12402 {
12403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012404 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012405 VOS_ASSERT(0) ;
12406 return ;
12407 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012409 if (NULL == pWDA)
12410 {
12411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12412 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012413
12414 if(pWdaParams->wdaWdiApiMsgParam)
12415 {
12416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12417 }
12418 vos_mem_free(pWdaParams);
12419
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012420 VOS_ASSERT(0);
12421 return ;
12422 }
12423
Jeff Johnson295189b2012-06-20 16:38:30 -070012424 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12425
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012426 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12427
Jeff Johnson295189b2012-06-20 16:38:30 -070012428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12429 vos_mem_free(pWdaParams) ;
12430
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012431 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012432 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012433 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012434 return ;
12435}
Jeff Johnson295189b2012-06-20 16:38:30 -070012436/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012437 * FUNCTION: WDA_WowlEnterReqCallback
12438 * Free memory and send WOWL Enter RSP back to PE.
12439 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12440 */
12441void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12442{
12443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012444 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012445 tSirHalWowlEnterParams *pWowlEnterParams;
12446
12447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12448 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12449
12450 if(NULL == pWdaParams)
12451 {
12452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12453 "%s: pWdaParams received NULL", __func__);
12454 VOS_ASSERT(0);
12455 return;
12456 }
12457
12458 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012459 if (NULL == pWDA)
12460 {
12461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12462 "%s:pWDA is NULL", __func__);
12463 VOS_ASSERT(0);
12464 return ;
12465 }
12466
Yue Ma7f44bbe2013-04-12 11:47:39 -070012467 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12468 pWowlEnterParams->status = wdiStatus;
12469
12470 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12471 {
12472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12473 vos_mem_free(pWdaParams);
12474 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12475 }
12476
12477 return;
12478}
12479/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012480 * FUNCTION: WDA_ProcessWowlEnterReq
12481 * Request to WDI to enter WOWL
12482 */
12483VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12484 tSirHalWowlEnterParams *pWowlEnterParams)
12485{
12486 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012487 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012488 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12489 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12490 sizeof(WDI_WowlEnterReqParamsType)) ;
12491 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012493 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012494 if(NULL == wdiWowlEnterInfo)
12495 {
12496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 VOS_ASSERT(0);
12499 return VOS_STATUS_E_NOMEM;
12500 }
12501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12502 if(NULL == pWdaParams)
12503 {
12504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012506 VOS_ASSERT(0);
12507 vos_mem_free(wdiWowlEnterInfo);
12508 return VOS_STATUS_E_NOMEM;
12509 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012510
12511 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12512
Jeff Johnson295189b2012-06-20 16:38:30 -070012513 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12514 pWowlEnterParams->magicPtrn,
12515 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12517 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012518 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12519 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012520 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12521 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12523 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012524 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12525 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012526 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12527 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012528 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12529 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12531 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012532#ifdef WLAN_WAKEUP_EVENTS
12533 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12534 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12535
12536 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12537 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12538
12539 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12540 pWowlEnterParams->ucWowNetScanOffloadMatch;
12541
12542 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12543 pWowlEnterParams->ucWowGTKRekeyError;
12544
12545 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12546 pWowlEnterParams->ucWoWBSSConnLoss;
12547#endif // WLAN_WAKEUP_EVENTS
12548
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012549 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12550 pWowlEnterParams->bssIdx;
12551
Yue Ma7f44bbe2013-04-12 11:47:39 -070012552 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12553 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 /* Store param pointer as passed in by caller */
12555 /* store Params pass it to WDI */
12556 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12557 pWdaParams->pWdaContext = pWDA;
12558 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012559 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012560 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012561 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 {
12563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12564 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012565 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012566 vos_mem_free(pWdaParams->wdaMsgParam) ;
12567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12568 vos_mem_free(pWdaParams) ;
12569 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012570 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012571
12572}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012573/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012574 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012575 *
12576 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012577void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012578{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012580 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012581 tSirHalWowlExitParams *pWowlExitParams;
12582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012583 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012584 if(NULL == pWdaParams)
12585 {
12586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012587 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012588 VOS_ASSERT(0) ;
12589 return ;
12590 }
12591 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012592 if (NULL == pWDA)
12593 {
12594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12595 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012596
12597 if(pWdaParams->wdaWdiApiMsgParam)
12598 {
12599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12600 }
12601 vos_mem_free(pWdaParams);
12602
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012603 VOS_ASSERT(0);
12604 return ;
12605 }
12606
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012607 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12608
12609 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012610 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012611
12612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12613 vos_mem_free(pWdaParams) ;
12614
Jeff Johnson295189b2012-06-20 16:38:30 -070012615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012616 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012617 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012618 return ;
12619}
Jeff Johnson295189b2012-06-20 16:38:30 -070012620/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012621 * FUNCTION: WDA_WowlExitReqCallback
12622 * Free memory and send WOWL Exit RSP back to PE.
12623 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12624 */
12625void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12626{
12627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012628 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012629 tSirHalWowlExitParams *pWowlExitParams;
12630
12631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12632 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12633
12634 if(NULL == pWdaParams)
12635 {
12636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12637 "%s: pWdaParams received NULL", __func__);
12638 VOS_ASSERT(0);
12639 return;
12640 }
12641
12642 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012643 if (NULL == pWDA)
12644 {
12645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12646 "%s:pWDA is NULL", __func__);
12647 VOS_ASSERT(0);
12648 return ;
12649 }
12650
Yue Ma7f44bbe2013-04-12 11:47:39 -070012651 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12652 pWowlExitParams->status = wdiStatus;
12653
12654 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12655 {
12656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12657 vos_mem_free(pWdaParams);
12658 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12659 }
12660
12661 return;
12662}
12663/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012664 * FUNCTION: WDA_ProcessWowlExitReq
12665 * Request to WDI to add WOWL Bcast pattern
12666 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012667VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12668 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012669{
12670 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012671 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012672 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12673 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12674 sizeof(WDI_WowlExitReqParamsType)) ;
12675 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012677 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012678 if(NULL == wdiWowlExitInfo)
12679 {
12680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012681 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012682 VOS_ASSERT(0);
12683 return VOS_STATUS_E_NOMEM;
12684 }
12685 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12686 if(NULL == pWdaParams)
12687 {
12688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012689 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012690 VOS_ASSERT(0);
12691 vos_mem_free(wdiWowlExitInfo);
12692 return VOS_STATUS_E_NOMEM;
12693 }
12694
12695 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12696 pWowlExitParams->bssIdx;
12697
Yue Ma7f44bbe2013-04-12 11:47:39 -070012698 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12699 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012700
12701 /* Store param pointer as passed in by caller */
12702 /* store Params pass it to WDI */
12703 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12704 pWdaParams->pWdaContext = pWDA;
12705 pWdaParams->wdaMsgParam = pWowlExitParams;
12706
12707 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012708 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012709
Jeff Johnson43971f52012-07-17 12:26:56 -070012710 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012711 {
12712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12713 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012714 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12716 vos_mem_free(pWdaParams->wdaMsgParam);
12717 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012718 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012719 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012720}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012721/*
12722 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12723 * Request to WDI to determine whether a given station is capable of
12724 * using HW-based frame translation
12725 */
12726v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12727 tANI_U8 staIdx)
12728{
12729 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12730}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012731
12732/*
12733 * FUNCTION: WDA_IsSelfSTA
12734 * Request to WDI to determine whether a given STAID is self station
12735 * index.
12736 */
12737v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12738{
12739
12740 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12741
Girish Gowli05cf44e2014-06-12 21:53:37 +053012742 if (NULL != pWDA)
12743 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12744 else
12745 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012746}
Jeff Johnson295189b2012-06-20 16:38:30 -070012747/*
12748 * FUNCTION: WDA_NvDownloadReqCallback
12749 * send NV Download RSP back to PE
12750 */
12751void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12752 void* pUserData)
12753{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012754
12755 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012756 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012757
Jeff Johnson295189b2012-06-20 16:38:30 -070012758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012759 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012760
12761 if(NULL == pWdaParams)
12762 {
12763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012764 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012765 VOS_ASSERT(0) ;
12766 return ;
12767 }
12768
12769 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012770 if (NULL == pWDA)
12771 {
12772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12773 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012774
12775 if(pWdaParams->wdaWdiApiMsgParam)
12776 {
12777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12778 }
12779 vos_mem_free(pWdaParams);
12780
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012781 VOS_ASSERT(0);
12782 return ;
12783 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012784
Jeff Johnson295189b2012-06-20 16:38:30 -070012785 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12787 vos_mem_free(pWdaParams);
12788
Jeff Johnson295189b2012-06-20 16:38:30 -070012789 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012790 return ;
12791}
Jeff Johnson295189b2012-06-20 16:38:30 -070012792/*
12793 * FUNCTION: WDA_ProcessNvDownloadReq
12794 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12795 */
12796VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12797{
12798 /* Initialize the local Variables*/
12799 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12800 v_VOID_t *pNvBuffer=NULL;
12801 v_SIZE_t bufferSize = 0;
12802 WDI_Status status = WDI_STATUS_E_FAILURE;
12803 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012804 tWDA_ReqParams *pWdaParams ;
12805
Jeff Johnson295189b2012-06-20 16:38:30 -070012806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012807 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012808 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012809 {
12810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012811 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012812 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012813 return VOS_STATUS_E_FAILURE;
12814 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012815
Jeff Johnson295189b2012-06-20 16:38:30 -070012816 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012817 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12818
Jeff Johnson295189b2012-06-20 16:38:30 -070012819 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12820 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012821 if(NULL == wdiNvDownloadReqParam)
12822 {
12823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012824 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012825 VOS_ASSERT(0);
12826 return VOS_STATUS_E_NOMEM;
12827 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012828 /* Copy Params to wdiNvDownloadReqParam*/
12829 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12830 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012831
12832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12833 if(NULL == pWdaParams)
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012836 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012837 VOS_ASSERT(0);
12838 vos_mem_free(wdiNvDownloadReqParam);
12839 return VOS_STATUS_E_NOMEM;
12840 }
12841
Jeff Johnson295189b2012-06-20 16:38:30 -070012842 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012843 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12844 pWdaParams->wdaMsgParam = NULL;
12845 pWdaParams->pWdaContext = pWDA;
12846
12847
Jeff Johnson295189b2012-06-20 16:38:30 -070012848 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012849
Jeff Johnson295189b2012-06-20 16:38:30 -070012850 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012851 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12852
Jeff Johnson295189b2012-06-20 16:38:30 -070012853 if(IS_WDI_STATUS_FAILURE(status))
12854 {
12855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12856 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12858 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012860 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012861}
12862/*
12863 * FUNCTION: WDA_FlushAcReqCallback
12864 * send Flush AC RSP back to TL
12865 */
12866void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12867{
12868 vos_msg_t wdaMsg = {0} ;
12869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12870 tFlushACReq *pFlushACReqParams;
12871 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012873 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 if(NULL == pWdaParams)
12875 {
12876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012877 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012878 VOS_ASSERT(0) ;
12879 return ;
12880 }
12881
12882 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12883 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12884 if(NULL == pFlushACRspParams)
12885 {
12886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012887 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012888 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012889 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 return ;
12891 }
12892 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12893 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12894 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12895 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12896 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012897 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 vos_mem_free(pWdaParams->wdaMsgParam) ;
12899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12900 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12902 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12903 // POST message to TL
12904 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12905
Jeff Johnson295189b2012-06-20 16:38:30 -070012906 return ;
12907}
Jeff Johnson295189b2012-06-20 16:38:30 -070012908/*
12909 * FUNCTION: WDA_ProcessFlushAcReq
12910 * Request to WDI to Update the DELBA REQ params.
12911 */
12912VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12913 tFlushACReq *pFlushAcReqParams)
12914{
12915 WDI_Status status = WDI_STATUS_SUCCESS ;
12916 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12917 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12918 sizeof(WDI_FlushAcReqParamsType)) ;
12919 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012920 if(NULL == wdiFlushAcReqParam)
12921 {
12922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012923 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012924 VOS_ASSERT(0);
12925 return VOS_STATUS_E_NOMEM;
12926 }
12927 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12928 if(NULL == pWdaParams)
12929 {
12930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 VOS_ASSERT(0);
12933 vos_mem_free(wdiFlushAcReqParam);
12934 return VOS_STATUS_E_NOMEM;
12935 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012938 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12939 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12940 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12941 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012942 /* Store Flush AC pointer, as this will be used for response */
12943 /* store Params pass it to WDI */
12944 pWdaParams->pWdaContext = pWDA;
12945 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12946 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012947 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12948 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012949 if(IS_WDI_STATUS_FAILURE(status))
12950 {
12951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12952 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12953 vos_mem_free(pWdaParams->wdaMsgParam) ;
12954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12955 vos_mem_free(pWdaParams) ;
12956 //TODO: respond to TL with failure
12957 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012958 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012959}
Jeff Johnson295189b2012-06-20 16:38:30 -070012960/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012961 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012962 *
12963 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012964void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012965{
12966 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012967 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012968 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012969
12970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012971 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012972 if(NULL == pWdaParams)
12973 {
12974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012975 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012976 VOS_ASSERT(0) ;
12977 return ;
12978 }
12979 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012980 if (NULL == pWDA)
12981 {
12982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12983 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012984 vos_mem_free(pWdaParams->wdaMsgParam) ;
12985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12986 vos_mem_free(pWdaParams) ;
12987
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012988 VOS_ASSERT(0);
12989 return ;
12990 }
12991
Jeff Johnson295189b2012-06-20 16:38:30 -070012992 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12993 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12994 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12995 {
12996 pWDA->wdaAmpSessionOn = VOS_FALSE;
12997 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 vos_mem_free(pWdaParams->wdaMsgParam) ;
12999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13000 vos_mem_free(pWdaParams) ;
13001 /*
13002 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
13003 * param here
13004 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013005 return ;
13006}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013007/*
13008 * FUNCTION: WDA_BtAmpEventReqCallback
13009 * Free memory.
13010 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
13011 */
13012void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
13013{
13014 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013015 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013016 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013017
Yue Ma7f44bbe2013-04-12 11:47:39 -070013018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13019 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13020
13021 if(NULL == pWdaParams)
13022 {
13023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13024 "%s: pWdaParams received NULL", __func__);
13025 VOS_ASSERT(0);
13026 return;
13027 }
13028
13029 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013030 if (NULL == pWDA)
13031 {
13032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13033 "%s:pWDA is NULL", __func__);
13034 VOS_ASSERT(0);
13035 return ;
13036 }
13037
Yue Ma7f44bbe2013-04-12 11:47:39 -070013038 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13039
13040 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13041 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13042 {
13043 pWDA->wdaAmpSessionOn = VOS_FALSE;
13044 }
13045
13046 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13047 {
13048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13049 vos_mem_free(pWdaParams->wdaMsgParam);
13050 vos_mem_free(pWdaParams);
13051 }
13052
13053 return;
13054}
Jeff Johnson295189b2012-06-20 16:38:30 -070013055/*
13056 * FUNCTION: WDA_ProcessBtAmpEventReq
13057 * Request to WDI to Update with BT AMP events.
13058 */
13059VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
13060 tSmeBtAmpEvent *pBtAmpEventParams)
13061{
13062 WDI_Status status = WDI_STATUS_SUCCESS ;
13063 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
13064 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
13065 sizeof(WDI_BtAmpEventParamsType)) ;
13066 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013068 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013069 if(NULL == wdiBtAmpEventParam)
13070 {
13071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013073 VOS_ASSERT(0);
13074 return VOS_STATUS_E_NOMEM;
13075 }
13076 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13077 if(NULL == pWdaParams)
13078 {
13079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013081 VOS_ASSERT(0);
13082 vos_mem_free(wdiBtAmpEventParam);
13083 return VOS_STATUS_E_NOMEM;
13084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013085 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
13086 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013087 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
13088 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 /* Store BT AMP event pointer, as this will be used for response */
13090 /* store Params pass it to WDI */
13091 pWdaParams->pWdaContext = pWDA;
13092 pWdaParams->wdaMsgParam = pBtAmpEventParams;
13093 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013094 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013095 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013096 if(IS_WDI_STATUS_FAILURE(status))
13097 {
13098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13099 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
13100 vos_mem_free(pWdaParams->wdaMsgParam) ;
13101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13102 vos_mem_free(pWdaParams) ;
13103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013104 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13105 {
13106 pWDA->wdaAmpSessionOn = VOS_TRUE;
13107 }
13108 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013109}
13110
Jeff Johnson295189b2012-06-20 16:38:30 -070013111/*
13112 * FUNCTION: WDA_FTMCommandReqCallback
13113 * Handle FTM CMD response came from HAL
13114 * Route responce to HDD FTM
13115 */
13116void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
13117 void *usrData)
13118{
13119 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013120 if((NULL == pWDA) || (NULL == ftmCmdRspData))
13121 {
13122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013123 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 return;
13125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013126 /* Release Current FTM Command Request */
13127 vos_mem_free(pWDA->wdaFTMCmdReq);
13128 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013129 /* Post FTM Responce to HDD FTM */
13130 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013131 return;
13132}
Jeff Johnson295189b2012-06-20 16:38:30 -070013133/*
13134 * FUNCTION: WDA_ProcessFTMCommand
13135 * Send FTM command to WDI
13136 */
13137VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
13138 tPttMsgbuffer *pPTTFtmCmd)
13139{
13140 WDI_Status status = WDI_STATUS_SUCCESS;
13141 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 ftmCMDReq = (WDI_FTMCommandReqType *)
13143 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
13144 if(NULL == ftmCMDReq)
13145 {
13146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13147 "WDA FTM Command buffer alloc fail");
13148 return VOS_STATUS_E_NOMEM;
13149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
13151 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 /* Send command to WDI */
13154 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013155 return status;
13156}
Jeff Johnsone7245742012-09-05 17:12:55 -070013157#ifdef FEATURE_OEM_DATA_SUPPORT
13158/*
13159 * FUNCTION: WDA_StartOemDataReqCallback
13160 *
13161 */
13162void WDA_StartOemDataReqCallback(
13163 WDI_oemDataRspParamsType *wdiOemDataRspParams,
13164 void* pUserData)
13165{
13166 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013168 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013169 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013170
Jeff Johnsone7245742012-09-05 17:12:55 -070013171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013172 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013173
13174 if(NULL == pWdaParams)
13175 {
13176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013177 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013178 VOS_ASSERT(0) ;
13179 return ;
13180 }
13181 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
13182
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013183 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070013184 {
13185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013186 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013187 VOS_ASSERT(0);
13188 return ;
13189 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013190
Jeff Johnsone7245742012-09-05 17:12:55 -070013191 /*
13192 * Allocate memory for response params sent to PE
13193 */
13194 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
13195
13196 // Check if memory is allocated for OemdataMeasRsp Params.
13197 if(NULL == pOemDataRspParams)
13198 {
13199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13200 "OEM DATA WDA callback alloc fail");
13201 VOS_ASSERT(0) ;
13202 return;
13203 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013204
Jeff Johnsone7245742012-09-05 17:12:55 -070013205 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13207 vos_mem_free(pWdaParams->wdaMsgParam);
13208 vos_mem_free(pWdaParams) ;
13209
Jeff Johnsone7245742012-09-05 17:12:55 -070013210 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013211 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070013212 * Also, here success always means that we have atleast one BSSID.
13213 */
13214 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
13215
13216 //enable Tx
13217 status = WDA_ResumeDataTx(pWDA);
13218 if(status != VOS_STATUS_SUCCESS)
13219 {
13220 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
13221 }
13222 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
13223 return ;
13224}
13225/*
13226 * FUNCTION: WDA_ProcessStartOemDataReq
13227 * Send Start Oem Data Req to WDI
13228 */
13229VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
13230 tStartOemDataReq *pOemDataReqParams)
13231{
13232 WDI_Status status = WDI_STATUS_SUCCESS;
13233 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013234 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070013235
13236 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
13237
13238 if(NULL == wdiOemDataReqParams)
13239 {
13240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013242 VOS_ASSERT(0);
13243 return VOS_STATUS_E_NOMEM;
13244 }
13245
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013246 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
13247 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
13248 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
13249 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070013250
13251 wdiOemDataReqParams->wdiReqStatusCB = NULL;
13252
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13254 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070013255 {
13256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013258 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013259 vos_mem_free(pOemDataReqParams);
13260 VOS_ASSERT(0);
13261 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070013262 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013263
Bernald44a1ae2013-01-09 08:30:39 -080013264 pWdaParams->pWdaContext = (void*)pWDA;
13265 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
13266 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013267
13268 status = WDI_StartOemDataReq(wdiOemDataReqParams,
13269 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013270
13271 if(IS_WDI_STATUS_FAILURE(status))
13272 {
13273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13274 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13276 vos_mem_free(pWdaParams->wdaMsgParam);
13277 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013278 }
13279 return CONVERT_WDI2VOS_STATUS(status) ;
13280}
13281#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013282/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013283 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013284 *
13285 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013286void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013287{
13288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013290 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013291 if(NULL == pWdaParams)
13292 {
13293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013294 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 VOS_ASSERT(0) ;
13296 return ;
13297 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013298
13299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13300 vos_mem_free(pWdaParams->wdaMsgParam);
13301 vos_mem_free(pWdaParams);
13302
13303 return ;
13304}
13305/*
13306 * FUNCTION: WDA_SetTxPerTrackingReqCallback
13307 * Free memory.
13308 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
13309 */
13310void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
13311{
13312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13313
13314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13315 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13316
13317 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13320 "%s: pWdaParams received NULL", __func__);
13321 VOS_ASSERT(0);
13322 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013323 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013324
13325 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013326 {
13327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013328 vos_mem_free(pWdaParams->wdaMsgParam);
13329 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013331
13332 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013333}
Jeff Johnson295189b2012-06-20 16:38:30 -070013334#ifdef WLAN_FEATURE_GTK_OFFLOAD
13335/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013336 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 *
13338 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013339void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013340 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013341{
13342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13343
13344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013345 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013346 if(NULL == pWdaParams)
13347 {
13348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13349 "%s: pWdaParams received NULL", __func__);
13350 VOS_ASSERT(0);
13351 return;
13352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013353
Jeff Johnson295189b2012-06-20 16:38:30 -070013354 vos_mem_free(pWdaParams->wdaMsgParam) ;
13355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13356 vos_mem_free(pWdaParams) ;
13357
13358 //print a msg, nothing else to do
13359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013360 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013361
13362 return ;
13363}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013364/*
13365 * FUNCTION: WDA_GTKOffloadReqCallback
13366 * Free memory.
13367 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13368 */
13369void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13370{
13371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013372
Yue Ma7f44bbe2013-04-12 11:47:39 -070013373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13374 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13375
13376 if(NULL == pWdaParams)
13377 {
13378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13379 "%s: pWdaParams received NULL", __func__);
13380 VOS_ASSERT(0);
13381 return;
13382 }
13383
13384 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13385 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013386 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13387 sizeof(WDI_GtkOffloadReqMsg));
13388 vos_mem_zero(pWdaParams->wdaMsgParam,
13389 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13391 vos_mem_free(pWdaParams->wdaMsgParam);
13392 vos_mem_free(pWdaParams);
13393 }
13394
13395 return;
13396}
Jeff Johnson295189b2012-06-20 16:38:30 -070013397/*
13398 * FUNCTION: WDA_ProcessGTKOffloadReq
13399 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13400 * to broadcast traffic (sta mode).
13401 */
13402VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13403 tpSirGtkOffloadParams pGtkOffloadParams)
13404{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013405 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013406 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13407 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13408 sizeof(WDI_GtkOffloadReqMsg)) ;
13409 tWDA_ReqParams *pWdaParams ;
13410
13411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013412 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013413
13414 if(NULL == wdiGtkOffloadReqMsg)
13415 {
13416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013417 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 VOS_ASSERT(0);
13419 return VOS_STATUS_E_NOMEM;
13420 }
13421
13422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13423 if(NULL == pWdaParams)
13424 {
13425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013427 VOS_ASSERT(0);
13428 vos_mem_free(wdiGtkOffloadReqMsg);
13429 return VOS_STATUS_E_NOMEM;
13430 }
13431
13432 //
13433 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13434 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013435
13436 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013437 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013438
Jeff Johnson295189b2012-06-20 16:38:30 -070013439 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13440 // Copy KCK
13441 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13442 // Copy KEK
13443 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13444 // Copy KeyReplayCounter
13445 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13446 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13447
Yue Ma7f44bbe2013-04-12 11:47:39 -070013448 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13449 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013450
Jeff Johnson295189b2012-06-20 16:38:30 -070013451
13452 /* Store Params pass it to WDI */
13453 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13454 pWdaParams->pWdaContext = pWDA;
13455 /* Store param pointer as passed in by caller */
13456 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13457
Yue Ma7f44bbe2013-04-12 11:47:39 -070013458 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013459
13460 if(IS_WDI_STATUS_FAILURE(status))
13461 {
13462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13463 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013464 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13465 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13467 vos_mem_free(pWdaParams->wdaMsgParam);
13468 vos_mem_free(pWdaParams);
13469 }
13470
13471 return CONVERT_WDI2VOS_STATUS(status) ;
13472}
13473
13474/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013475 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013476 *
13477 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013478void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013479 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013480{
13481 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13482 tWDA_CbContext *pWDA;
13483 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013484 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013485 vos_msg_t vosMsg;
13486
13487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013488 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013489
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013490 if(NULL == pWdaParams)
13491 {
13492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13493 "%s: pWdaParams received NULL", __func__);
13494 VOS_ASSERT(0);
13495 return;
13496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013497
Nirav Shah374de6e2014-02-13 16:40:01 +053013498 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13499 if(NULL == pGtkOffloadGetInfoRsp)
13500 {
13501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13502 "%s: vos_mem_malloc failed ", __func__);
13503 VOS_ASSERT(0);
13504 return;
13505 }
13506
Jeff Johnson295189b2012-06-20 16:38:30 -070013507 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13508 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13509
13510 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13511 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13512
13513 /* Message Header */
13514 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013515 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013516
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013517 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13518 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13519 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13520 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13521 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013522
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013523 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13524 pwdiGtkOffloadGetInfoRsparams->bssId,
13525 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013526 /* VOS message wrapper */
13527 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13528 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13529 vosMsg.bodyval = 0;
13530
13531 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13532 {
13533 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013534 vos_mem_zero(pGtkOffloadGetInfoRsp,
13535 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013536 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13537 }
13538
13539 vos_mem_free(pWdaParams->wdaMsgParam) ;
13540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13541 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013542
13543 return;
13544}
13545/*
13546 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13547 * Free memory and send RSP back to SME.
13548 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13549 */
13550void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13551{
13552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13553 vos_msg_t vosMsg;
13554
13555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13556 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13557
13558 if(NULL == pWdaParams)
13559 {
13560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13561 "%s: pWdaParams received NULL", __func__);
13562 VOS_ASSERT(0);
13563 return;
13564 }
13565
13566 /* VOS message wrapper */
13567 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13568 vosMsg.bodyptr = NULL;
13569 vosMsg.bodyval = 0;
13570
13571 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13572 {
13573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13574 vos_mem_free(pWdaParams->wdaMsgParam);
13575 vos_mem_free(pWdaParams);
13576 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13577 }
13578
13579 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013580}
13581#endif
13582
13583/*
13584 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13585 * Request to WDI to set Tx Per Tracking configurations
13586 */
13587VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13588{
13589 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013590 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013591 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13592 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13593 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13594 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013596 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013597 if(NULL == pwdiSetTxPerTrackingReqParams)
13598 {
13599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013601 vos_mem_free(pTxPerTrackingParams);
13602 VOS_ASSERT(0);
13603 return VOS_STATUS_E_NOMEM;
13604 }
13605 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13606 if(NULL == pWdaParams)
13607 {
13608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013610 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13611 vos_mem_free(pTxPerTrackingParams);
13612 VOS_ASSERT(0);
13613 return VOS_STATUS_E_NOMEM;
13614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013615 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13616 pTxPerTrackingParams->ucTxPerTrackingEnable;
13617 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13618 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13619 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13620 pTxPerTrackingParams->ucTxPerTrackingRatio;
13621 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13622 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013623 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13624 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013625 /* Store param pointer as passed in by caller */
13626 /* store Params pass it to WDI
13627 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13628 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13629 pWdaParams->pWdaContext = pWDA;
13630 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013631 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013632 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013633 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013634 {
13635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13636 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013637 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013638 vos_mem_free(pWdaParams->wdaMsgParam) ;
13639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13640 vos_mem_free(pWdaParams) ;
13641 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013642 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013643
13644}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013645/*
13646 * FUNCTION: WDA_HALDumpCmdCallback
13647 * Send the VOS complete .
13648 */
13649void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13650 void* pUserData)
13651{
13652 tANI_U8 *buffer = NULL;
13653 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013654 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013655 if(NULL == pWdaParams)
13656 {
13657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013658 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013659 VOS_ASSERT(0) ;
13660 return ;
13661 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013662
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13664 "%s: WDA HAL DUMP Resp Received",__func__);
13665
Jeff Johnson295189b2012-06-20 16:38:30 -070013666 pWDA = pWdaParams->pWdaContext;
13667 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013668 if(wdiRspParams->usBufferLen > 0)
13669 {
13670 /*Copy the Resp data to UMAC supplied buffer*/
13671 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13672 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013673
13674 if (!pWdaParams->wdaHALDumpAsync)
13675 {/* Indicate VOSS about the start complete */
13676 vos_WDAComplete_cback(pWDA->pVosContext);
13677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13679 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013680 return ;
13681}
13682
Jeff Johnson295189b2012-06-20 16:38:30 -070013683/*
13684 * FUNCTION: WDA_ProcessHALDumpCmdReq
13685 * Send Dump command to WDI
13686 */
13687VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13688 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013689 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013690{
13691 WDI_Status status = WDI_STATUS_SUCCESS;
13692 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13693 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013694 tWDA_HalDumpReqParams *pWdaParams ;
13695
Jeff Johnson295189b2012-06-20 16:38:30 -070013696 pVosContextType pVosContext = NULL;
13697 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13699 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013700 if(pVosContext)
13701 {
13702 if (pVosContext->isLogpInProgress)
13703 {
13704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13705 "%s:LOGP in Progress. Ignore!!!", __func__);
13706 return VOS_STATUS_E_BUSY;
13707 }
13708 }
13709 else
13710 {
13711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13712 "%s: VOS Context Null", __func__);
13713 return VOS_STATUS_E_RESOURCES;
13714 }
13715
Siddharth Bhal68115602015-01-18 20:44:55 +053013716 if (NULL == pVosContext->pWDAContext)
13717 {
13718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13719 "%s: WDA Context Null", __func__);
13720 return VOS_STATUS_E_RESOURCES;
13721 }
13722 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013723 if(NULL == pWdaParams)
13724 {
13725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013727 return VOS_STATUS_E_NOMEM;
13728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 /* Allocate memory WDI request structure*/
13730 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13731 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13732 if(NULL == wdiHALDumpCmdReqParam)
13733 {
13734 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13735 "WDA HAL DUMP Command buffer alloc fail");
13736 vos_mem_free(pWdaParams);
13737 return WDI_STATUS_E_FAILURE;
13738 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013739 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 /* Extract the arguments */
13741 wdiHalDumpCmdInfo->command = cmd;
13742 wdiHalDumpCmdInfo->argument1 = arg1;
13743 wdiHalDumpCmdInfo->argument2 = arg2;
13744 wdiHalDumpCmdInfo->argument3 = arg3;
13745 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013746 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013747 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013748 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013749
13750 /* Response message will be passed through the buffer */
13751 pWdaParams->wdaMsgParam = (void *)pBuffer;
13752
13753 /* store Params pass it to WDI */
13754 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013755
13756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13757 "%s: WDA HAL DUMP Command sent",__func__);
13758
Jeff Johnson295189b2012-06-20 16:38:30 -070013759 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013760 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13761 pWdaParams);
13762 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13763 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013764 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013765 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13766 WDA_DUMPCMD_WAIT_TIMEOUT );
13767 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013768 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013769 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13770 {
13771 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13772 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13773 }
13774 else
13775 {
13776 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13777 "%s: WDA_HALDUMP reporting other error",__func__);
13778 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053013779 if (!(vos_isLoadUnloadInProgress() ||
13780 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
13781 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013783 }
13784 return status;
13785}
Jeff Johnson295189b2012-06-20 16:38:30 -070013786#ifdef WLAN_FEATURE_GTK_OFFLOAD
13787/*
13788 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13789 * Request to WDI to get GTK Offload Information
13790 */
13791VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13792 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13793{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013794 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013795 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13796 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13797 tWDA_ReqParams *pWdaParams ;
13798
13799 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13800 {
13801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013803 VOS_ASSERT(0);
13804 return VOS_STATUS_E_NOMEM;
13805 }
13806
13807 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13808 if(NULL == pWdaParams)
13809 {
13810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013811 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013812 VOS_ASSERT(0);
13813 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13814 return VOS_STATUS_E_NOMEM;
13815 }
13816
Yue Ma7f44bbe2013-04-12 11:47:39 -070013817 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13818 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013819
Jeff Johnson295189b2012-06-20 16:38:30 -070013820 /* Store Params pass it to WDI */
13821 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13822 pWdaParams->pWdaContext = pWDA;
13823 /* Store param pointer as passed in by caller */
13824 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13825
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013826 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013827 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013828
Yue Ma7f44bbe2013-04-12 11:47:39 -070013829 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013830
13831 if(IS_WDI_STATUS_FAILURE(status))
13832 {
13833 /* failure returned by WDI API */
13834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13835 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13837 vos_mem_free(pWdaParams) ;
13838 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13839 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13840 }
13841
13842 return CONVERT_WDI2VOS_STATUS(status) ;
13843}
13844#endif // WLAN_FEATURE_GTK_OFFLOAD
13845
13846/*
Yue Mab9c86f42013-08-14 15:59:08 -070013847 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13848 *
13849 */
13850VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13851 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13852{
13853 WDI_Status wdiStatus;
13854 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13855
13856 addPeriodicTxPtrnParams =
13857 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13858
13859 if (NULL == addPeriodicTxPtrnParams)
13860 {
13861 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13862 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13863 __func__);
13864
13865 return VOS_STATUS_E_NOMEM;
13866 }
13867
13868 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13869 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13870
13871 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13872 addPeriodicTxPtrnParams->pUserData = pWDA;
13873
13874 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13875
13876 if (WDI_STATUS_PENDING == wdiStatus)
13877 {
13878 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13879 "Pending received for %s:%d", __func__, __LINE__ );
13880 }
13881 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13882 {
13883 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13884 "Failure in %s:%d", __func__, __LINE__ );
13885 }
13886
13887 vos_mem_free(addPeriodicTxPtrnParams);
13888
13889 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13890}
13891
13892/*
13893 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13894 *
13895 */
13896VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13897 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13898{
13899 WDI_Status wdiStatus;
13900 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13901
13902 delPeriodicTxPtrnParams =
13903 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13904
13905 if (NULL == delPeriodicTxPtrnParams)
13906 {
13907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13908 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13909 __func__);
13910
13911 return VOS_STATUS_E_NOMEM;
13912 }
13913
13914 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13915 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13916
13917 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13918 delPeriodicTxPtrnParams->pUserData = pWDA;
13919
13920 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13921
13922 if (WDI_STATUS_PENDING == wdiStatus)
13923 {
13924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13925 "Pending received for %s:%d", __func__, __LINE__ );
13926 }
13927 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13928 {
13929 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13930 "Failure in %s:%d", __func__, __LINE__ );
13931 }
13932
13933 vos_mem_free(delPeriodicTxPtrnParams);
13934
13935 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13936}
13937
Abhishek Singh00b71972016-01-07 10:51:04 +053013938/*
13939 * FUNCTION: WDA_ProcessRateUpdateInd
13940 *
13941 */
13942VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13943 tSirRateUpdateInd *pRateUpdateParams)
13944{
13945 WDI_Status wdiStatus;
13946 WDI_RateUpdateIndParams rateUpdateParams;
13947
13948 vos_mem_copy(rateUpdateParams.bssid,
13949 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13950
13951 rateUpdateParams.ucastDataRateTxFlag =
13952 pRateUpdateParams->ucastDataRateTxFlag;
13953 rateUpdateParams.rmcDataRateTxFlag =
13954 pRateUpdateParams->rmcDataRateTxFlag;
13955 rateUpdateParams.mcastDataRate24GHzTxFlag =
13956 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13957 rateUpdateParams.mcastDataRate5GHzTxFlag =
13958 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13959
13960 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13961 rateUpdateParams.rmcDataRate =
13962 pRateUpdateParams->rmcDataRate;
13963 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13964 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13965
13966 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13967 rateUpdateParams.pUserData = pWDA;
13968
13969 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13970
13971 if (WDI_STATUS_PENDING == wdiStatus)
13972 {
13973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13974 "Pending received for %s:%d", __func__, __LINE__ );
13975 }
13976 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13977 {
13978 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13979 "Failure in %s:%d", __func__, __LINE__ );
13980 }
13981
13982 vos_mem_free(pRateUpdateParams);
13983
13984 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13985}
13986
13987
Rajeev79dbe4c2013-10-05 11:03:42 +053013988#ifdef FEATURE_WLAN_BATCH_SCAN
13989/*
13990 * FUNCTION: WDA_ProcessStopBatchScanInd
13991 *
13992 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13993 *
13994 * PARAM:
13995 * pWDA: pointer to WDA context
13996 * pReq: pointer to stop batch scan request
13997 */
13998VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13999 tSirStopBatchScanInd *pReq)
14000{
14001 WDI_Status wdiStatus;
14002 WDI_StopBatchScanIndType wdiReq;
14003
14004 wdiReq.param = pReq->param;
14005
14006 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
14007
14008 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14009 {
14010 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14011 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
14012 }
14013
14014 vos_mem_free(pReq);
14015
14016 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14017}
14018/*==========================================================================
14019 FUNCTION WDA_ProcessTriggerBatchScanResultInd
14020
14021 DESCRIPTION
14022 API to pull batch scan result from FW
14023
14024 PARAMETERS
14025 pWDA: Pointer to WDA context
14026 pGetBatchScanReq: Pointer to get batch scan result indication
14027
14028 RETURN VALUE
14029 NONE
14030
14031===========================================================================*/
14032VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
14033 tSirTriggerBatchScanResultInd *pReq)
14034{
14035 WDI_Status wdiStatus;
14036 WDI_TriggerBatchScanResultIndType wdiReq;
14037
14038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14039 "------> %s " ,__func__);
14040
14041 wdiReq.param = pReq->param;
14042
14043 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
14044
14045 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14046 {
14047 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14048 "Trigger batch scan result ind failed %s:%d",
14049 __func__, wdiStatus);
14050 }
14051
14052 vos_mem_free(pReq);
14053
14054 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14055}
14056
14057/*==========================================================================
14058 FUNCTION WDA_SetBatchScanRespCallback
14059
14060 DESCRIPTION
14061 API to process set batch scan response from FW
14062
14063 PARAMETERS
14064 pRsp: Pointer to set batch scan response
14065 pUserData: Pointer to user data
14066
14067 RETURN VALUE
14068 NONE
14069
14070===========================================================================*/
14071void WDA_SetBatchScanRespCallback
14072(
14073 WDI_SetBatchScanRspType *pRsp,
14074 void* pUserData
14075)
14076{
14077 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
14078 tpAniSirGlobal pMac;
14079 void *pCallbackContext;
14080 tWDA_CbContext *pWDA = NULL ;
14081 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14082
14083
14084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14085 "<------ %s " ,__func__);
14086 if (NULL == pWdaParams)
14087 {
14088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14089 "%s: pWdaParams received NULL", __func__);
14090 VOS_ASSERT(0) ;
14091 return ;
14092 }
14093
14094 /*extract WDA context*/
14095 pWDA = pWdaParams->pWdaContext;
14096 if (NULL == pWDA)
14097 {
14098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14099 "%s:pWDA is NULL can't invole HDD callback",
14100 __func__);
14101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14102 vos_mem_free(pWdaParams->wdaMsgParam);
14103 vos_mem_free(pWdaParams);
14104 VOS_ASSERT(0);
14105 return;
14106 }
14107
14108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14109 vos_mem_free(pWdaParams->wdaMsgParam);
14110 vos_mem_free(pWdaParams);
14111
14112 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14113 if (NULL == pMac)
14114 {
14115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14116 "%s:pMac is NULL", __func__);
14117 VOS_ASSERT(0);
14118 return;
14119 }
14120
14121 pHddSetBatchScanRsp =
14122 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
14123 if (NULL == pHddSetBatchScanRsp)
14124 {
14125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14126 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
14127 VOS_ASSERT(0);
14128 return;
14129 }
14130
14131 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
14132
14133 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
14134 /*call hdd callback with set batch scan response data*/
14135 if(pMac->pmc.setBatchScanReqCallback)
14136 {
14137 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
14138 }
14139 else
14140 {
14141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14142 "%s:HDD callback is null", __func__);
14143 VOS_ASSERT(0);
14144 }
14145
14146 vos_mem_free(pHddSetBatchScanRsp);
14147 return ;
14148}
14149
14150/*==========================================================================
14151 FUNCTION WDA_ProcessSetBatchScanReq
14152
14153 DESCRIPTION
14154 API to send set batch scan request to WDI
14155
14156 PARAMETERS
14157 pWDA: Pointer to WDA context
14158 pSetBatchScanReq: Pointer to set batch scan req
14159
14160 RETURN VALUE
14161 NONE
14162
14163===========================================================================*/
14164VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
14165 tSirSetBatchScanReq *pSetBatchScanReq)
14166{
14167 WDI_Status status;
14168 tWDA_ReqParams *pWdaParams ;
14169 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
14170
14171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14172 "------> %s " ,__func__);
14173
14174 pWdiSetBatchScanReq =
14175 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
14176 if (NULL == pWdiSetBatchScanReq)
14177 {
14178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14179 "%s: VOS MEM Alloc Failure", __func__);
14180 vos_mem_free(pSetBatchScanReq);
14181 VOS_ASSERT(0);
14182 return VOS_STATUS_E_NOMEM;
14183 }
14184
14185 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14186 if (NULL == pWdaParams)
14187 {
14188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14189 "%s: VOS MEM Alloc Failure", __func__);
14190 VOS_ASSERT(0);
14191 vos_mem_free(pSetBatchScanReq);
14192 vos_mem_free(pWdiSetBatchScanReq);
14193 return VOS_STATUS_E_NOMEM;
14194 }
14195
14196 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
14197 pWdiSetBatchScanReq->numberOfScansToBatch =
14198 pSetBatchScanReq->numberOfScansToBatch;
14199 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
14200 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
14201 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
14202
14203 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
14204 pWdaParams->pWdaContext = pWDA;
14205 pWdaParams->wdaMsgParam = pSetBatchScanReq;
14206
14207 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
14208 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
14209 if (IS_WDI_STATUS_FAILURE(status))
14210 {
14211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14212 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
14213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14214 vos_mem_free(pWdaParams->wdaMsgParam);
14215 vos_mem_free(pWdaParams);
14216 }
14217 return CONVERT_WDI2VOS_STATUS(status);
14218}
14219
14220#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014221/*
14222 * FUNCTION: WDA_ProcessHT40OBSSScanInd
14223 *
14224 * DESCRIPTION: This function sends start/update OBSS scan
14225 * inidcation message to WDI
14226 *
14227 * PARAM:
14228 * pWDA: pointer to WDA context
14229 * pReq: pointer to start OBSS scan request
14230 */
14231VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
14232 tSirHT40OBSSScanInd *pReq)
14233{
14234 WDI_Status status;
14235 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
14236 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053014237
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14239 "------> %s " ,__func__);
14240 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14241 wdiOBSSScanParams.pUserData = pWDA;
14242
14243 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
14244 pWdiOBSSScanInd->cmdType = pReq->cmdType;
14245 pWdiOBSSScanInd->scanType = pReq->scanType;
14246 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
14247 pReq->OBSSScanActiveDwellTime;
14248 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
14249 pReq->OBSSScanPassiveDwellTime;
14250 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
14251 pReq->BSSChannelWidthTriggerScanInterval;
14252 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
14253 pReq->BSSWidthChannelTransitionDelayFactor;
14254 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
14255 pReq->OBSSScanActiveTotalPerChannel;
14256 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
14257 pReq->OBSSScanPassiveTotalPerChannel;
14258 pWdiOBSSScanInd->OBSSScanActivityThreshold =
14259 pReq->OBSSScanActivityThreshold;
14260 pWdiOBSSScanInd->channelCount = pReq->channelCount;
14261 vos_mem_copy(pWdiOBSSScanInd->channels,
14262 pReq->channels,
14263 pReq->channelCount);
14264 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
14265 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
14266 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
14267 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
14268 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
14269
14270 vos_mem_copy(pWdiOBSSScanInd->ieField,
14271 pReq->ieField,
14272 pReq->ieFieldLen);
14273
14274 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
14275 if (WDI_STATUS_PENDING == status)
14276 {
14277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14278 "Pending received for %s:%d ",__func__,__LINE__ );
14279 }
14280 else if (WDI_STATUS_SUCCESS_SYNC != status)
14281 {
14282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14283 "Failure in %s:%d ",__func__,__LINE__ );
14284 }
14285 return CONVERT_WDI2VOS_STATUS(status) ;
14286}
14287/*
14288 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
14289 *
14290 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
14291 *
14292 * PARAM:
14293 * pWDA: pointer to WDA context
14294 * pReq: pointer to stop batch scan request
14295 */
14296VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
14297 tANI_U8 *bssIdx)
14298{
14299 WDI_Status status;
14300
14301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14302 "------> %s " ,__func__);
14303
14304 status = WDI_HT40OBSSStopScanInd(*bssIdx);
14305 if (WDI_STATUS_PENDING == status)
14306 {
14307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14308 "Pending received for %s:%d ",__func__,__LINE__ );
14309 }
14310 else if (WDI_STATUS_SUCCESS_SYNC != status)
14311 {
14312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14313 "Failure in %s:%d ",__func__,__LINE__ );
14314 }
14315 return CONVERT_WDI2VOS_STATUS(status) ;
14316}
Yue Mab9c86f42013-08-14 15:59:08 -070014317/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014318 * -------------------------------------------------------------------------
14319 * DATA interface with WDI for Mgmt Frames
14320 * -------------------------------------------------------------------------
14321 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014322/*
14323 * FUNCTION: WDA_TxComplete
14324 * Callback function for the WDA_TxPacket
14325 */
14326VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
14327 VOS_STATUS status )
14328{
14329
14330 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
14331 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014332 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014333
Mihir Shete63341222015-03-24 15:39:18 +053014334 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
14335
Jeff Johnson295189b2012-06-20 16:38:30 -070014336 if(NULL == wdaContext)
14337 {
14338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14339 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014340 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014341 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014342 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014343 return VOS_STATUS_E_FAILURE;
14344 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014345
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014346 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014347 /*Check if frame was timed out or not*/
14348 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
14349 (v_PVOID_t)&uUserData);
14350
14351 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14352 {
14353 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14355 "%s: MGMT Frame Tx timed out",
14356 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014357 vos_pkt_return_packet(pData);
14358 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014359 return VOS_STATUS_SUCCESS;
14360 }
14361
Jeff Johnson295189b2012-06-20 16:38:30 -070014362 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14363 if( NULL!=wdaContext->pTxCbFunc)
14364 {
14365 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014366 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014367 {
14368 wdaContext->pTxCbFunc(pMac, pData);
14369 }
14370 else
14371 {
14372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014373 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014374 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014375 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014376 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014377 return status;
14378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014379 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014380 else {
14381 wdaContext->mgmt_pktfree_fail++;
14382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14383 "%s:packet (%p) userData (%lx) is not freed",
14384 __func__, pData, uUserData);
14385 }
14386 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014387
14388 /*
14389 * Trigger the event to bring the HAL TL Tx complete function to come
14390 * out of wait
14391 * Let the coe above to complete the packet first. When this event is set,
14392 * the thread waiting for the event may run and set Vospacket_freed causing the original
14393 * packet not being freed.
14394 */
14395 status = vos_event_set(&wdaContext->txFrameEvent);
14396 if(!VOS_IS_STATUS_SUCCESS(status))
14397 {
14398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014399 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014401 return status;
14402}
Jeff Johnson295189b2012-06-20 16:38:30 -070014403/*
14404 * FUNCTION: WDA_TxPacket
14405 * Forward TX management frame to WDI
14406 */
14407VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14408 void *pFrmBuf,
14409 tANI_U16 frmLen,
14410 eFrameType frmType,
14411 eFrameTxDir txDir,
14412 tANI_U8 tid,
14413 pWDATxRxCompFunc pCompFunc,
14414 void *pData,
14415 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014416 tANI_U32 txFlag,
14417 tANI_U32 txBdToken
14418 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014419{
14420 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14421 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14422 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14423 tANI_U8 eventIdx = 0;
14424 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14425 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014426 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014427 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014428
Jeff Johnson295189b2012-06-20 16:38:30 -070014429 if((NULL == pWDA)||(NULL == pFrmBuf))
14430 {
14431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014432 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014433 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014434 VOS_ASSERT(0);
14435 return VOS_STATUS_E_FAILURE;
14436 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014437
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014439 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14440 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014441 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14442 if(NULL == pMac)
14443 {
14444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014445 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014446 VOS_ASSERT(0);
14447 return VOS_STATUS_E_FAILURE;
14448 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014449
Jeff Johnson295189b2012-06-20 16:38:30 -070014450 /* store the call back function in WDA context */
14451 pWDA->pTxCbFunc = pCompFunc;
14452 /* store the call back for the function of ackTxComplete */
14453 if( pAckTxComp )
14454 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014455 if( NULL != pWDA->pAckTxCbFunc )
14456 {
14457 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014459 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014460 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014461 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014462
Jeff Johnsone7245742012-09-05 17:12:55 -070014463 if( VOS_STATUS_SUCCESS !=
14464 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14465 {
14466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14467 "Tx Complete timeout Timer Stop Failed ");
14468 }
14469 else
14470 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014472 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014473 }
14474 }
14475
14476 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14477 pWDA->pAckTxCbFunc = pAckTxComp;
14478 if( VOS_STATUS_SUCCESS !=
14479 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14480 {
14481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14482 "Tx Complete Timer Start Failed ");
14483 pWDA->pAckTxCbFunc = NULL;
14484 return eHAL_STATUS_FAILURE;
14485 }
14486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014487 /* Reset the event to be not signalled */
14488 status = vos_event_reset(&pWDA->txFrameEvent);
14489 if(!VOS_IS_STATUS_SUCCESS(status))
14490 {
14491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014492 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14494 if( pAckTxComp )
14495 {
14496 pWDA->pAckTxCbFunc = NULL;
14497 if( VOS_STATUS_SUCCESS !=
14498 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14499 {
14500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14501 "Tx Complete timeout Timer Stop Failed ");
14502 }
14503 }
14504 return VOS_STATUS_E_FAILURE;
14505 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014506
14507 /* If Peer Sta mask is set don't overwrite to self sta */
14508 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014509 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014510 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014511 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014512 else
14513 {
Ganesh K08bce952012-12-13 15:04:41 -080014514 /* Get system role, use the self station if in unknown role or STA role */
14515 systemRole = wdaGetGlobalSystemRole(pMac);
14516 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14517 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014518#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014519 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014520#endif
Ganesh K08bce952012-12-13 15:04:41 -080014521 ))
14522 {
14523 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14524 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014525 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014526
Jeff Johnsone7245742012-09-05 17:12:55 -070014527 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14528 disassoc frame reaches the HW, HAL has already deleted the peer station */
14529 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014530 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014531 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014532 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014533 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014534 /*Send Probe request frames on self sta idx*/
14535 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014537 /* Since we donot want probe responses to be retried, send probe responses
14538 through the NO_ACK queues */
14539 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14540 {
14541 //probe response is sent out using self station and no retries options.
14542 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14543 }
14544 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14545 {
14546 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14547 }
14548 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014549#ifdef FEATURE_WLAN_TDLS
14550 /* TDLS Management frames are sent using Peer Sta mask */
14551 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14552 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14553 {
14554 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14555
14556 }
14557#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014558 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014559
14560 /*Set frame tag to 0
14561 We will use the WDA user data in order to tag a frame as expired*/
14562 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14563 (v_PVOID_t)0);
14564
14565
14566 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014567 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14568 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014569 {
14570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014571 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014572 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014573 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 -070014574 if( pAckTxComp )
14575 {
14576 pWDA->pAckTxCbFunc = NULL;
14577 if( VOS_STATUS_SUCCESS !=
14578 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14579 {
14580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14581 "Tx Complete timeout Timer Stop Failed ");
14582 }
14583 }
14584 return VOS_STATUS_E_FAILURE;
14585 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014586 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014587 /*
14588 * Wait for the event to be set by the TL, to get the response of TX
14589 * complete, this event should be set by the Callback function called by TL
14590 */
14591 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14592 &eventIdx);
14593 if(!VOS_IS_STATUS_SUCCESS(status))
14594 {
14595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14596 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014597 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014598 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014599 /*Tag Frame as timed out for later deletion*/
14600 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14601 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014602 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14603 after the packet gets completed(packet freed once)*/
14604
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014605 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14606
14607 /*
14608 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14609 * TX completion call back
14610 */
14611 VOS_SMP_MB;
14612 vos_lock_release(&pWDA->mgmt_pkt_lock);
14613
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014614 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014615 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014616
Abhishek Singh837adf22015-10-01 17:37:37 +053014617 if (vos_isFatalEventEnabled())
14618 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14619 WLAN_LOG_INDICATOR_HOST_DRIVER,
14620 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14621 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014622
Jeff Johnson295189b2012-06-20 16:38:30 -070014623 if( pAckTxComp )
14624 {
14625 pWDA->pAckTxCbFunc = NULL;
14626 if( VOS_STATUS_SUCCESS !=
14627 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14628 {
14629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14630 "Tx Complete timeout Timer Stop Failed ");
14631 }
14632 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014633 pWDA->mgmtTxfailureCnt++;
14634
14635 /* SSR if timeout continously for
14636 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14637 */
14638 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14639 pWDA->mgmtTxfailureCnt)
14640 {
14641 vos_wlanRestart();
14642 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014643 status = VOS_STATUS_E_FAILURE;
14644 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014645
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014646#ifdef WLAN_DUMP_MGMTFRAMES
14647 if (VOS_IS_STATUS_SUCCESS(status))
14648 {
14649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14650 "%s() TX packet : SubType %d", __func__,pFc->subType);
14651 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14652 pData, frmLen);
14653 }
14654#endif
14655
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014656 if (VOS_IS_STATUS_SUCCESS(status))
14657 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014658 pWDA->mgmtTxfailureCnt = 0;
14659 if ((vos_timer_get_system_time() - time_snapshot) >=
14660 WDA_TX_TIME_THRESHOLD)
14661 {
14662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14663 "Tx Complete took %lu ms",
14664 vos_timer_get_system_time() - time_snapshot);
14665 }
14666
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014667 if (pMac->fEnableDebugLog & 0x1)
14668 {
14669 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14670 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14671 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14672 {
14673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14674 pFc->type, pFc->subType);
14675 }
14676 }
14677 }
14678
14679
Jeff Johnson295189b2012-06-20 16:38:30 -070014680 return status;
14681}
Jeff Johnson295189b2012-06-20 16:38:30 -070014682/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014683 * FUNCTION: WDA_ProcessDHCPStartInd
14684 * Forward DHCP Start to WDI
14685 */
14686static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14687 tAniDHCPInd *dhcpStartInd)
14688{
14689 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014690 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014691
c_hpothu0b0cab72014-02-13 21:52:40 +053014692 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14693 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014694 sizeof(tSirMacAddr));
14695
c_hpothu0b0cab72014-02-13 21:52:40 +053014696 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014697
c_hpothu0b0cab72014-02-13 21:52:40 +053014698 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014699 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14701 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014702 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014703 else if (WDI_STATUS_SUCCESS_SYNC != status)
14704 {
14705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14706 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14707 }
14708
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014709 vos_mem_free(dhcpStartInd);
14710 return CONVERT_WDI2VOS_STATUS(status) ;
14711}
14712
14713 /*
14714 * FUNCTION: WDA_ProcessDHCPStopInd
14715 * Forward DHCP Stop to WDI
14716 */
14717 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14718 tAniDHCPInd *dhcpStopInd)
14719 {
14720 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014721 WDI_DHCPInd wdiDHCPInd;
14722
14723 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14724 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14725
14726 status = WDI_dhcpStopInd(&wdiDHCPInd);
14727
14728 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014729 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14731 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014732 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014733 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014734 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14736 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014737 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014738
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014739 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014740
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014741 return CONVERT_WDI2VOS_STATUS(status) ;
14742 }
14743
Abhishek Singh00b71972016-01-07 10:51:04 +053014744#ifdef WLAN_FEATURE_RMC
14745
14746void
14747WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14748{
14749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14750 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14751
14752 switch (wdiRmcResponse->cmd)
14753 {
14754 case eWDI_BECOME_RULER_CMD :
14755 {
14756 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14757
14758 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14759 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14760
14761 if (NULL == pRmcBecomeRulerInd)
14762 {
14763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14764 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14765 break;
14766 }
14767
14768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14769 "Received eWDI_BECOME_RULER_CMD from WDI");
14770
14771 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14772
14773 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14774 wdiRmcResponse->mcastTransmitter,
14775 sizeof(tSirMacAddr));
14776 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14777 wdiRmcResponse->mcastGroup,
14778 sizeof(tSirMacAddr));
14779
14780 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14781 (void *)pRmcBecomeRulerInd, 0) ;
14782 break;
14783 }
14784 case eWDI_SUGGEST_RULER_CMD :
14785 {
14786 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14787
14788 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14789 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14790
14791 if (NULL == pRmcRulerSelectInd)
14792 {
14793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14794 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14795 break;
14796 }
14797
14798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14799 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14800
14801 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14802
14803 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14804 wdiRmcResponse->mcastTransmitter,
14805 sizeof(tSirMacAddr));
14806 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14807 wdiRmcResponse->mcastGroup,
14808 sizeof(tSirMacAddr));
14809 vos_mem_copy(pRmcRulerSelectInd->ruler,
14810 wdiRmcResponse->ruler,
14811 sizeof(pRmcRulerSelectInd->ruler));
14812
14813 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14814 (void *)pRmcRulerSelectInd, 0) ;
14815 break;
14816 }
14817 }
14818
14819 /* free the config structure */
14820 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14821 {
14822 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14823 }
14824 vos_mem_free(pWdaParams->wdaMsgParam);
14825 vos_mem_free(pWdaParams);
14826
14827}
14828
14829void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14830{
14831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14832
14833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14834 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14835
14836 if (NULL == pWdaParams)
14837 {
14838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14839 "%s: pWdaParams received NULL", __func__);
14840 VOS_ASSERT(0);
14841 return;
14842 }
14843
14844 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14845 {
14846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14847 vos_mem_free(pWdaParams->wdaMsgParam);
14848 vos_mem_free(pWdaParams);
14849 }
14850
14851 return;
14852}
14853
14854static VOS_STATUS
14855WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14856 tSirRmcRulerReq *rmcRulerReq)
14857{
14858 WDI_Status status;
14859 WDI_RmcRulerReqParams *wdiRulerReq;
14860 tWDA_ReqParams *pWdaParams;
14861
14862 wdiRulerReq = (WDI_RmcRulerReqParams *)
14863 vos_mem_malloc(sizeof(*wdiRulerReq));
14864
14865 if (NULL == wdiRulerReq)
14866 {
14867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14868 "%s: VOS MEM Alloc Failure", __func__);
14869 VOS_ASSERT(0);
14870 vos_mem_free(rmcRulerReq);
14871 return VOS_STATUS_E_NOMEM;
14872 }
14873
14874 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14875 if (NULL == pWdaParams)
14876 {
14877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14878 "%s: VOS MEM Alloc Failure", __func__);
14879 VOS_ASSERT(0);
14880 vos_mem_free(rmcRulerReq);
14881 vos_mem_free(wdiRulerReq);
14882 return VOS_STATUS_E_NOMEM;
14883 }
14884
14885 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14886 /* Store param pointer as passed in by caller */
14887 pWdaParams->wdaMsgParam = rmcRulerReq;
14888 pWdaParams->pWdaContext = pWDA;
14889
14890 wdiRulerReq->cmd = rmcRulerReq->cmd;
14891
14892 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14893 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14894 vos_mem_copy(wdiRulerReq->mcastGroup,
14895 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14896 vos_mem_copy(wdiRulerReq->blacklist,
14897 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14898
14899 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14900
14901 status = WDI_RmcRulerReq(wdiRulerReq,
14902 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14903 (void *)pWdaParams);
14904 if (IS_WDI_STATUS_FAILURE(status))
14905 {
14906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14907 vos_mem_free(pWdaParams->wdaMsgParam);
14908 vos_mem_free(pWdaParams) ;
14909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14910 "Ruler Request failed");
14911 }
14912 return CONVERT_WDI2VOS_STATUS(status) ;
14913}
14914
14915/*
14916 * FUNCTION: WDA_ProcessRMCUpdateInd
14917 * Forward Update Indication to WDI
14918*/
14919static VOS_STATUS
14920WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14921 tSirRmcUpdateInd *rmcUpdateInd)
14922{
14923 WDI_Status status;
14924 WDI_RmcUpdateIndParams wdiUpdateInd;
14925
14926 /* Copy the paramters for Update_Ind */
14927
14928 wdiUpdateInd.indication = rmcUpdateInd->indication;
14929 wdiUpdateInd.role = rmcUpdateInd->role;
14930
14931 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14932 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14933
14934 vos_mem_copy(wdiUpdateInd.mcastGroup,
14935 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14936
14937 vos_mem_copy(wdiUpdateInd.mcastRuler,
14938 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14939
14940 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14941 wdiUpdateInd.pUserData = pWDA;
14942 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14943
14944 if (WDI_STATUS_PENDING == status)
14945 {
14946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14947 "Pending received for %s:%d ",__func__,__LINE__ );
14948 }
14949 else if (WDI_STATUS_SUCCESS_SYNC != status)
14950 {
14951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14952 "Failure in %s:%d ",__func__,__LINE__ );
14953 }
14954
14955 vos_mem_free(rmcUpdateInd);
14956
14957 return CONVERT_WDI2VOS_STATUS(status) ;
14958}
14959
14960void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14961 ,void* pUserData)
14962{
14963
14964 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14965 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14966 tWDA_CbContext *pWDA;
14967 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14968 vos_msg_t vosMsg;
14969 v_U32_t wdaCnt = 0;
14970
14971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14972 "<------ %s " ,__func__);
14973 if (NULL == pWdaParams)
14974 {
14975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14976 "%s: pWdaParams received NULL", __func__);
14977 VOS_ASSERT(0);
14978 return;
14979 }
14980
14981 if (NULL == peerInfoRspParams)
14982 {
14983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14984 "%s: peerInfoRspParams received NULL", __func__);
14985 if(pWdaParams->wdaMsgParam)
14986 vos_mem_free(pWdaParams->wdaMsgParam);
14987 if(pWdaParams->wdaWdiApiMsgParam)
14988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14989 vos_mem_free(pWdaParams);
14990
14991 VOS_ASSERT(0);
14992 return;
14993 }
14994
14995 pIbssPeerInfoParams =
14996 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14997
14998 pIbssGetPeerInfoRsp =
14999 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
15000
15001 if(NULL == pIbssGetPeerInfoRsp)
15002 {
15003 if(pWdaParams->wdaMsgParam)
15004 vos_mem_free(pWdaParams->wdaMsgParam);
15005 if(pWdaParams->wdaWdiApiMsgParam)
15006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15007 vos_mem_free(pWdaParams);
15008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15009 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
15010 __func__);
15011 VOS_ASSERT(0);
15012 return;
15013
15014 }
15015
15016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15017
15018
15019 if (peerInfoRspParams->wdiNumPeers > 32)
15020 {
15021 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
15022 /* free the mem and return */
15023 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15024 if(pWdaParams->wdaMsgParam)
15025 vos_mem_free(pWdaParams->wdaMsgParam);
15026 if(pWdaParams->wdaWdiApiMsgParam)
15027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15028 vos_mem_free(pWdaParams);
15029
15030 return;
15031 }
15032
15033 /* Message Header */
15034 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
15035 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
15036 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
15037 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
15038
15039 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
15040 {
15041 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
15042 tSirIbssPeerInfoParams *pSmeTmp =
15043 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
15044
15045 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
15046 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
15047 pSmeTmp->rssi = pWdiTmp->wdiRssi;
15048 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
15049 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
15050 }
15051
15052 /* VOS message wrapper */
15053 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
15054 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
15055 vosMsg.bodyval = 0;
15056
15057 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15058 {
15059 /* free the mem and return */
15060 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15061 }
15062
15063 if(NULL != pWdaParams)
15064 {
15065 if(pWdaParams->wdaMsgParam)
15066 vos_mem_free(pWdaParams->wdaMsgParam);
15067 if(pWdaParams->wdaWdiApiMsgParam)
15068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15069 vos_mem_free(pWdaParams);
15070 }
15071
15072 return;
15073}
15074
15075static VOS_STATUS
15076WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
15077 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
15078{
15079 WDI_Status status;
15080 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
15081 tWDA_ReqParams *pWdaParams;
15082
15083 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
15084 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
15085 if (NULL == wdiPeerInfoReq)
15086 {
15087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15088 "%s: VOS MEM Alloc Failure", __func__);
15089 VOS_ASSERT(0);
15090 vos_mem_free(ibssPeerInfoReqParams);
15091 return VOS_STATUS_E_NOMEM;
15092 }
15093
15094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15095 if (NULL == pWdaParams)
15096 {
15097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15098 "%s: VOS MEM Alloc Failure", __func__);
15099 VOS_ASSERT(0);
15100 vos_mem_free(wdiPeerInfoReq);
15101 vos_mem_free(ibssPeerInfoReqParams);
15102 return VOS_STATUS_E_NOMEM;
15103 }
15104
15105 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
15106 /* Store param pointer as passed in by caller */
15107 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
15108 pWdaParams->pWdaContext = pWDA;
15109
15110 wdiPeerInfoReq->wdiAllPeerInfoReqd =
15111 ibssPeerInfoReqParams->allPeerInfoReqd;
15112 wdiPeerInfoReq->wdiStaIdx =
15113 ibssPeerInfoReqParams->staIdx;
15114
15115 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
15116 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
15117 (void *)pWdaParams);
15118 if (IS_WDI_STATUS_FAILURE(status))
15119 {
15120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15121 vos_mem_free(pWdaParams->wdaMsgParam);
15122 vos_mem_free(pWdaParams) ;
15123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15124 "IBSS Peer Info Request failed");
15125 }
15126 return CONVERT_WDI2VOS_STATUS(status) ;
15127
15128}
15129
15130/*
15131 * FUNCTION: WDA_ProcessTXFailMonitorInd
15132 * Forward TX Fail Monitor to WDI
15133 */
15134static VOS_STATUS WDA_ProcessTXFailMonitorInd(
15135 tWDA_CbContext *pWDA,
15136 tAniTXFailMonitorInd *txFailMonitorInd)
15137{
15138 WDI_Status status;
15139 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
15140 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
15141
15142 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15143 "<------ %s " ,__func__);
15144
15145 if (NULL == wdiTXFailMonitorInd)
15146 {
15147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15148 "%s: VOS MEM Alloc Failure", __func__);
15149 VOS_ASSERT(0);
15150 vos_mem_free(txFailMonitorInd);
15151 return VOS_STATUS_E_NOMEM;
15152 }
15153
15154 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
15155
15156 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
15157 wdiTXFailMonitorInd->pUserData = pWDA;
15158
15159 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
15160
15161 if (WDI_STATUS_PENDING == status)
15162 {
15163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15164 "TX Fail Monitor Indication Pending");
15165 }
15166 else if (WDI_STATUS_SUCCESS_SYNC == status)
15167 {
15168 if (0 == txFailMonitorInd->tx_fail_count)
15169 pWDA->txFailIndCallback = NULL;
15170 else
15171 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
15172 }
15173 else
15174 {
15175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15176 "TX Fail Monitor Indication Failed");
15177 }
15178
15179 vos_mem_free(wdiTXFailMonitorInd);
15180 vos_mem_free(txFailMonitorInd);
15181
15182 return CONVERT_WDI2VOS_STATUS(status) ;
15183}
15184#endif /* WLAN_FEATURE_RMC */
15185
Kapil Gupta04ab1992016-06-26 13:36:51 +053015186#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15187VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15188 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15189{
15190 WDI_Status status;
15191 tWDA_ReqParams *pWdaParams ;
15192 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15193 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15194 sizeof(WDI_PERRoamTriggerScanInfo));
15195
15196 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15197 "------> %s " ,__func__);
15198
15199 if (NULL == pwdiPERRoamTriggerScanInfo)
15200 {
15201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15202 "%s: VOS MEM Alloc Failure", __func__);
15203 VOS_ASSERT(0);
15204 return VOS_STATUS_E_NOMEM;
15205 }
15206
15207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15208 if (NULL == pWdaParams)
15209 {
15210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15211 "%s: VOS MEM Alloc Failure", __func__);
15212 VOS_ASSERT(0);
15213 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15214 return VOS_STATUS_E_NOMEM;
15215 }
15216
15217 pwdiPERRoamTriggerScanInfo->roamScanReq =
15218 pPERRoamTriggerScanReqParams->start;
15219
15220 /* Store Params pass it to WDI */
15221 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15222 pWdaParams->pWdaContext = pWDA;
15223
15224 /* Store param pointer as passed in by caller */
15225 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15226 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15227 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15228 pWdaParams);
15229
15230 if(IS_WDI_STATUS_FAILURE(status))
15231 {
15232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15233 "Failure in Start Roam Candidate trigger Req WDI API" );
15234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15235 vos_mem_free(pWdaParams->wdaMsgParam);
15236 pWdaParams->wdaWdiApiMsgParam = NULL;
15237 pWdaParams->wdaMsgParam = NULL;
15238 }
15239 return CONVERT_WDI2VOS_STATUS(status) ;
15240}
15241#endif
15242
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015243/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053015244 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15245 *
15246 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15247 *
15248 * PARAM:
15249 * pWDA: pointer to WDA context
15250 * pReq: pointer to stop batch scan request
15251 */
15252VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15253 tpSpoofMacAddrReqParams pReq)
15254{
15255 WDI_Status wdiStatus;
15256 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15257 tWDA_ReqParams *pWdaParams;
15258
15259 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15260 sizeof(WDI_SpoofMacAddrInfoType));
15261 if(NULL == WDI_SpoofMacAddrInfoParams) {
15262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15263 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15264 VOS_ASSERT(0);
15265 return VOS_STATUS_E_NOMEM;
15266 }
15267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15268 if(NULL == pWdaParams) {
15269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15270 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053015271 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053015272 VOS_ASSERT(0);
15273 return VOS_STATUS_E_NOMEM;
15274 }
15275
15276 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15277 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15278
15279 pWdaParams->pWdaContext = pWDA;
15280 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053015281 pWdaParams->wdaMsgParam = (void *)pReq;
15282
15283 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15284 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15285
Siddharth Bhal171788a2014-09-29 21:02:40 +053015286 /* store Params pass it to WDI */
15287 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15288
15289 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053015290 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15291 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053015292
15293 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15294 {
15295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15296 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15298 vos_mem_free(pWdaParams->wdaMsgParam);
15299 vos_mem_free(pWdaParams);
15300 }
15301
15302 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15303}
15304
c_manjeecfd1efb2015-09-25 19:32:34 +053015305
15306/*
15307 * FUNCTION: WDA_FwrMemDumpRespCallback
15308 * recieves Mgmt Logging init response from FW
15309 */
15310 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15311 void* pUserData)
15312{
15313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15314 tAniFwrDumpReq *pFwrMemDumpReq;
15315 tAniFwrDumpRsp *pFwrMemDumpRsp;
15316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15317 "<------ %s " ,__func__);
15318
15319 if(NULL == pWdaParams)
15320 {
15321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15322 "%s: pWdaParams received NULL", __func__);
15323 VOS_ASSERT(0);
15324 return ;
15325 }
15326
15327 if(NULL == pWdaParams->wdaMsgParam)
15328 {
15329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15330 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15331 VOS_ASSERT(0);
15332 vos_mem_free(pWdaParams);
15333 return ;
15334 }
15335
15336 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15337 if(pFwrMemDumpRsp == NULL)
15338 {
15339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15340 "%s: pFwrMemDumpRsp is NULL", __func__);
15341 VOS_ASSERT(0);
15342 vos_mem_free(pWdaParams);
15343 return ;
15344 }
15345
15346 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15347 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15348
15349 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15350 {
15351 pFwrMemDumpReq->fwMemDumpReqCallback(
15352 pFwrMemDumpReq->fwMemDumpReqContext,
15353 pFwrMemDumpRsp);
15354 }
15355 else
15356 {
15357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15358 "%s: FwrMemDump callback is NULL", __func__);
15359 }
15360
15361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15362 vos_mem_free(pWdaParams->wdaMsgParam);
15363 vos_mem_free(pWdaParams);
15364 vos_mem_free(pFwrMemDumpRsp);
15365
15366 return ;
15367}
15368
15369VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15370 tAniFwrDumpReq* pFwrMemDumpReq)
15371{
15372 VOS_STATUS status = VOS_STATUS_SUCCESS;
15373 WDI_Status wstatus;
15374 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15375 tWDA_ReqParams *pWdaParams ;
15376
15377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15378 "------> %s " ,__func__);
15379 /* Sanity Check*/
15380 if(NULL == pFwrMemDumpReq)
15381 {
15382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15383 "%s: pFwrMemDumpReq received NULL", __func__);
15384 VOS_ASSERT(0) ;
15385 return VOS_STATUS_E_FAULT;
15386 }
15387
15388 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15389 if(NULL == pWdiFwrMemDumpReq)
15390 {
15391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15392 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15393 VOS_ASSERT(0);
15394 return VOS_STATUS_E_NOMEM;
15395 }
15396
15397 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15398 if(NULL == pWdaParams)
15399 {
15400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15401 "%s: pWdaParams Alloc Failure", __func__);
15402 VOS_ASSERT(0);
15403 vos_mem_free(pWdiFwrMemDumpReq);
15404 return VOS_STATUS_E_NOMEM;
15405 }
15406
15407 /* Store Params pass it to WDI */
15408 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15409 pWdaParams->pWdaContext = pWDA;
15410 /* Store param pointer as passed in by caller */
15411 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15412
15413 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15414 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15415 pWdaParams);
15416
15417 if(IS_WDI_STATUS_FAILURE(wstatus))
15418 {
15419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15420 FL("Fwr Mem Dump Req failed, free all the memory"));
15421 status = CONVERT_WDI2VOS_STATUS(wstatus);
15422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015423 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015424 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015425 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015426 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015427 }
15428
15429 return status;
15430
15431}
15432
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015433/**
15434 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15435 *
15436 * @pWDA: WDA Call back context
15437 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15438 * that holds allowed action frames bitmask
15439 *
15440 * This function sets the allowed action frames that the FW needs to
15441 * handover to host.The Action frames other than the requested ones
15442 * can be dropped in FW
15443 *
15444 * Return: VOS_STATUS enumeration
15445 */
15446VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15447 struct sir_allowed_action_frames *allowed_action_frames)
15448{
15449 WDI_Status status;
15450 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15452 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015453
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015454 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15455 vos_mem_malloc(sizeof
15456 (*wdi_allowed_action_frames));
15457 if (!wdi_allowed_action_frames) {
15458 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15459 "%s: VOS MEM Alloc Failure", __func__);
15460 vos_mem_free(allowed_action_frames);
15461 return VOS_STATUS_E_NOMEM;
15462 }
15463
15464 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15465 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15466
15467 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15468 if (WDI_STATUS_PENDING == status) {
15469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15470 FL("pending status received"));
15471 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15472 (WDI_STATUS_SUCCESS != status)) {
15473 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15474 FL("Failure in allowed_action_frames API %d"), status);
15475 }
15476
15477 vos_mem_free(wdi_allowed_action_frames);
15478 vos_mem_free(allowed_action_frames);
15479 return CONVERT_WDI2VOS_STATUS(status) ;
15480}
c_manjeecfd1efb2015-09-25 19:32:34 +053015481
Agrawal Ashish17ef5082016-10-17 18:33:21 +053015482#ifdef SAP_AUTH_OFFLOAD
15483VOS_STATUS wda_process_sap_auth_offload(tWDA_CbContext *pWDA,
15484 struct tSirSapOffloadInfo *sap_auth_offload_info)
15485{
15486 WDI_Status status = WDI_STATUS_SUCCESS;
15487 struct WDI_sap_ofl_enable_params *sap_ofl_enable_cmd;
15488 v_U16_t psk_len, psk_len_padded;
15489
15490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15491 "------> %s " ,__func__);
15492
15493 if(NULL == sap_auth_offload_info)
15494 {
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15496 "%s: sap_auth_offload_info received NULL", __func__);
15497 VOS_ASSERT(0) ;
15498 return VOS_STATUS_E_FAULT;
15499 }
15500 psk_len = sap_auth_offload_info->key_len;
15501 psk_len_padded = roundup(psk_len, sizeof(v_U32_t));
15502
15503 sap_ofl_enable_cmd = (struct WDI_sap_ofl_enable_params*)
15504 vos_mem_malloc(sizeof
15505 (*sap_ofl_enable_cmd));
15506 if (!sap_ofl_enable_cmd) {
15507 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15508 "%s: VOS MEM Alloc Failure", __func__);
15509 vos_mem_free(sap_auth_offload_info);
15510 return VOS_STATUS_E_NOMEM;
15511 }
15512 vos_mem_zero(sap_ofl_enable_cmd, sizeof(*sap_ofl_enable_cmd));
15513 vos_mem_copy(sap_ofl_enable_cmd->macAddr,
15514 sap_auth_offload_info->macAddr, VOS_MAC_ADDRESS_LEN);
15515
15516 sap_ofl_enable_cmd->enable = sap_auth_offload_info->sap_auth_offload_enable;
15517 sap_ofl_enable_cmd->psk_len = psk_len;
15518 switch (sap_auth_offload_info->sap_auth_offload_sec_type) {
15519 case eSIR_OFFLOAD_WPA2PSK_CCMP:
15520 sap_ofl_enable_cmd->rsn_authmode = WDI_AUTH_TYPE_RSN_PSK;
15521 sap_ofl_enable_cmd->rsn_mcastcipherset = WDI_ED_CCMP;
15522 sap_ofl_enable_cmd->rsn_ucastcipherset = WDI_ED_CCMP;
15523 break;
15524 case eSIR_OFFLOAD_NONE:
15525 default:
15526 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15527 "Set SAP AP Auth offload with none support security type\n");
15528 break;
15529 }
15530 vos_mem_copy(sap_ofl_enable_cmd->key, sap_auth_offload_info->key, psk_len);
15531
15532 status = WDI_process_sap_auth_offload(sap_ofl_enable_cmd);
15533
15534 if (WDI_STATUS_PENDING == status) {
15535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15536 FL("pending status received"));
15537 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15538 (WDI_STATUS_SUCCESS != status)) {
15539 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15540 FL("Failure in process_sap_auth_offload API %d"), status);
15541 }
15542
15543 vos_mem_free(sap_ofl_enable_cmd);
15544 vos_mem_free(sap_auth_offload_info);
15545 return CONVERT_WDI2VOS_STATUS(status) ;
15546
15547}
15548#endif
15549
Siddharth Bhal171788a2014-09-29 21:02:40 +053015550/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015551 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15552 * Request to WDI.
15553 */
15554VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15555{
15556 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015557 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015558
15559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15560
15561 staId = (v_U8_t)params;
15562
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015563 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15564 if ( NULL == pTLCb )
15565 {
15566 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15567 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15568 return VOS_STATUS_E_FAULT;
15569 }
15570
15571
15572 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015573 /* Pause TL for Sta ID */
15574 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15575}
15576
Anurag Chouhan83026002016-12-13 22:46:21 +053015577#ifdef DHCP_SERVER_OFFLOAD
15578/**
15579 * wda_process_dhcpserver_offload_req() - wda api to set dhcp server offload
15580 * @wda_handle: pointer to wda handle
15581 * @dhcp_server_offload_info: dhcp server offload info
15582 *
15583 * Return: status
15584 * 0 - success or else failure
15585 */
15586static int wda_process_dhcpserver_offload_req(tWDA_CbContext *wda_handle,
15587 sir_dhcp_srv_offload_info_t
15588 *dhcp_server_offload_info)
15589{
15590 wdi_set_dhcp_server_offload_t *dhcp_info;
15591 tWDA_ReqParams *wda_params;
15592 WDI_Status wstatus;
15593 VOS_STATUS status = VOS_STATUS_SUCCESS;
15594
15595 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15596 FL("---> %s"), __func__);
15597
15598 if(NULL == dhcp_server_offload_info)
15599 {
15600 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15601 "%s: dhcp_server_offload_info received NULL",
15602 __func__);
15603 VOS_ASSERT(0) ;
15604 return VOS_STATUS_E_FAULT;
15605 }
15606
15607 dhcp_info = (wdi_set_dhcp_server_offload_t *)
15608 vos_mem_malloc(sizeof(*dhcp_info));
15609 if (!dhcp_info) {
15610 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15611 "Failed to allocate buffer to send "
15612 "set_dhcp_server_offload cmd");
15613 vos_mem_free(dhcp_server_offload_info);
15614 return VOS_STATUS_E_NOMEM;
15615 }
15616
15617 vos_mem_zero(dhcp_info, sizeof(*dhcp_info));
15618
15619 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15620 if(NULL == wda_params)
15621 {
15622 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15623 "%s: VOS MEM Alloc Failure", __func__);
15624 VOS_ASSERT(0);
15625 vos_mem_free(dhcp_info);
15626 vos_mem_free(dhcp_server_offload_info);
15627 return VOS_STATUS_E_NOMEM;
15628 }
15629
15630 dhcp_info->bssidx = dhcp_server_offload_info->bssidx;
15631 dhcp_info->enable = dhcp_server_offload_info->dhcp_srv_offload_enabled;
15632 dhcp_info->num_client = dhcp_server_offload_info->dhcp_client_num;
15633 dhcp_info->srv_ipv4 = dhcp_server_offload_info->dhcp_srv_ip;
15634 dhcp_info->start_lsb = dhcp_server_offload_info->start_lsb;
15635
15636 wda_params->pWdaContext = wda_handle;
15637 wda_params->wdaMsgParam = dhcp_server_offload_info;
15638 wda_params->wdaWdiApiMsgParam = (void *)dhcp_info;
15639
15640 wstatus = wdi_process_dhcpserver_offload_req(dhcp_info,
15641 (wdi_dhcp_srv_offload_rsp_cb)
15642 wda_dhcp_server_offload_rsp_callback,
15643 wda_params);
15644 if(IS_WDI_STATUS_FAILURE(wstatus))
15645 {
15646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15647 "Failed to send set_dhcp_server_offload cmd" );
15648 status = CONVERT_WDI2VOS_STATUS(wstatus);
15649 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
15650 vos_mem_free(wda_params->wdaMsgParam);
15651 vos_mem_free(wda_params);
15652 }
15653
15654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15655 "Set dhcp server offload");
15656 return status;
15657}
15658#endif /* DHCP_SERVER_OFFLOAD */
15659
15660
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015661/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015662 * FUNCTION: WDA_McProcessMsg
15663 * Trigger DAL-AL to start CFG download
15664 */
15665VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15666{
15667 VOS_STATUS status = VOS_STATUS_SUCCESS;
15668 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015669 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015670 {
15671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015672 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015673 VOS_ASSERT(0);
15674 return VOS_STATUS_E_FAILURE;
15675 }
15676
15677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015678 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015679
15680 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15681 if(NULL == pWDA )
15682 {
15683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015684 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015685 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015686 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015687 return VOS_STATUS_E_FAILURE;
15688 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015689 /* Process all the WDA messages.. */
15690 switch( pMsg->type )
15691 {
15692 case WNI_CFG_DNLD_REQ:
15693 {
15694 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015695 /* call WDA complete event if config download success */
15696 if( VOS_IS_STATUS_SUCCESS(status) )
15697 {
15698 vos_WDAComplete_cback(pVosContext);
15699 }
15700 else
15701 {
15702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15703 "WDA Config Download failure" );
15704 }
15705 break ;
15706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015707 /*
15708 * Init SCAN request from PE, convert it into DAL format
15709 * and send it to DAL
15710 */
15711 case WDA_INIT_SCAN_REQ:
15712 {
15713 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15714 break ;
15715 }
15716 /* start SCAN request from PE */
15717 case WDA_START_SCAN_REQ:
15718 {
15719 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15720 break ;
15721 }
15722 /* end SCAN request from PE */
15723 case WDA_END_SCAN_REQ:
15724 {
15725 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15726 break ;
15727 }
15728 /* end SCAN request from PE */
15729 case WDA_FINISH_SCAN_REQ:
15730 {
15731 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15732 break ;
15733 }
15734 /* join request from PE */
15735 case WDA_CHNL_SWITCH_REQ:
15736 {
15737 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15738 {
15739 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15740 }
15741 else
15742 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015743 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15744 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15745 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15746 {
15747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15748 "call ProcessChannelSwitchReq_V1" );
15749 WDA_ProcessChannelSwitchReq_V1(pWDA,
15750 (tSwitchChannelParams*)pMsg->bodyptr) ;
15751 }
15752 else
15753 {
15754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15755 "call ProcessChannelSwitchReq" );
15756 WDA_ProcessChannelSwitchReq(pWDA,
15757 (tSwitchChannelParams*)pMsg->bodyptr) ;
15758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015759 }
15760 break ;
15761 }
15762 /* ADD BSS request from PE */
15763 case WDA_ADD_BSS_REQ:
15764 {
15765 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15766 break ;
15767 }
15768 case WDA_ADD_STA_REQ:
15769 {
15770 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15771 break ;
15772 }
15773 case WDA_DELETE_BSS_REQ:
15774 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015775 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15776 break ;
15777 }
15778 case WDA_DELETE_STA_REQ:
15779 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015780 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15781 break ;
15782 }
15783 case WDA_CONFIG_PARAM_UPDATE_REQ:
15784 {
15785 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15786 break ;
15787 }
15788 case WDA_SET_BSSKEY_REQ:
15789 {
15790 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15791 break ;
15792 }
15793 case WDA_SET_STAKEY_REQ:
15794 {
15795 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15796 break ;
15797 }
15798 case WDA_SET_STA_BCASTKEY_REQ:
15799 {
15800 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15801 break ;
15802 }
15803 case WDA_REMOVE_BSSKEY_REQ:
15804 {
15805 WDA_ProcessRemoveBssKeyReq(pWDA,
15806 (tRemoveBssKeyParams *)pMsg->bodyptr);
15807 break ;
15808 }
15809 case WDA_REMOVE_STAKEY_REQ:
15810 {
15811 WDA_ProcessRemoveStaKeyReq(pWDA,
15812 (tRemoveStaKeyParams *)pMsg->bodyptr);
15813 break ;
15814 }
15815 case WDA_REMOVE_STA_BCASTKEY_REQ:
15816 {
15817 /* TODO: currently UMAC is not sending this request, Add the code for
15818 handling this request when UMAC supports */
15819 break;
15820 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015821#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015822 case WDA_TSM_STATS_REQ:
15823 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015824 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015825 break;
15826 }
15827#endif
15828 case WDA_UPDATE_EDCA_PROFILE_IND:
15829 {
15830 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15831 break;
15832 }
15833 case WDA_ADD_TS_REQ:
15834 {
15835 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15836 break;
15837 }
15838 case WDA_DEL_TS_REQ:
15839 {
15840 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15841 break;
15842 }
15843 case WDA_ADDBA_REQ:
15844 {
15845 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15846 break;
15847 }
15848 case WDA_DELBA_IND:
15849 {
15850 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15851 break;
15852 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015853 case WDA_UPDATE_CHAN_LIST_REQ:
15854 {
15855 WDA_ProcessUpdateChannelList(pWDA,
15856 (tSirUpdateChanList *)pMsg->bodyptr);
15857 break;
15858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015859 case WDA_SET_LINK_STATE:
15860 {
15861 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15862 break;
15863 }
15864 case WDA_GET_STATISTICS_REQ:
15865 {
15866 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15867 break;
15868 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015869#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015870 case WDA_GET_ROAM_RSSI_REQ:
15871 {
15872 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15873 break;
15874 }
15875#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015876 case WDA_PWR_SAVE_CFG:
15877 {
15878 if(pWDA->wdaState == WDA_READY_STATE)
15879 {
15880 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15881 }
15882 else
15883 {
15884 if(NULL != pMsg->bodyptr)
15885 {
15886 vos_mem_free(pMsg->bodyptr);
15887 }
15888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15889 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15890 }
15891 break;
15892 }
mukul sharma6b53e202016-11-23 19:29:18 +053015893 case WDA_UPDATE_CFG_INT_PARAM:
15894 {
15895 if(pWDA->wdaState == WDA_READY_STATE)
15896 {
15897 WDA_UpdateCfgIntParam(pWDA, (tSirUpdateCfgIntParam *)pMsg->bodyptr);
15898 vos_mem_free(pMsg->bodyptr);
15899 }
15900 else
15901 {
15902 if(NULL != pMsg->bodyptr)
15903 {
15904 vos_mem_free(pMsg->bodyptr);
15905 }
15906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15907 " WDA_UPDATE_CFG_INT_PARAM req in wrong state %d",
15908 pWDA->wdaState );
15909 }
15910 break;
15911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015912 case WDA_ENTER_IMPS_REQ:
15913 {
15914 if(pWDA->wdaState == WDA_READY_STATE)
15915 {
15916 WDA_ProcessEnterImpsReq(pWDA);
15917 }
15918 else
15919 {
15920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15921 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15922 }
15923 break;
15924 }
15925 case WDA_EXIT_IMPS_REQ:
15926 {
15927 if(pWDA->wdaState == WDA_READY_STATE)
15928 {
15929 WDA_ProcessExitImpsReq(pWDA);
15930 }
15931 else
15932 {
15933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15934 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15935 }
15936 break;
15937 }
15938 case WDA_ENTER_BMPS_REQ:
15939 {
15940 if(pWDA->wdaState == WDA_READY_STATE)
15941 {
15942 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15943 }
15944 else
15945 {
15946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15947 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15948 }
15949 break;
15950 }
15951 case WDA_EXIT_BMPS_REQ:
15952 {
15953 if(pWDA->wdaState == WDA_READY_STATE)
15954 {
15955 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15956 }
15957 else
15958 {
15959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15960 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15961 }
15962 break;
15963 }
15964 case WDA_ENTER_UAPSD_REQ:
15965 {
15966 if(pWDA->wdaState == WDA_READY_STATE)
15967 {
15968 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15969 }
15970 else
15971 {
15972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15973 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15974 }
15975 break;
15976 }
15977 case WDA_EXIT_UAPSD_REQ:
15978 {
15979 if(pWDA->wdaState == WDA_READY_STATE)
15980 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015981 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015982 }
15983 else
15984 {
15985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15986 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15987 }
15988 break;
15989 }
15990 case WDA_UPDATE_UAPSD_IND:
15991 {
15992 if(pWDA->wdaState == WDA_READY_STATE)
15993 {
15994 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15995 }
15996 else
15997 {
15998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15999 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
16000 }
16001 break;
16002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016003 case WDA_REGISTER_PE_CALLBACK :
16004 {
16005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16006 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
16007 /*TODO: store the PE callback */
16008 /* Do Nothing? MSG Body should be freed at here */
16009 if(NULL != pMsg->bodyptr)
16010 {
16011 vos_mem_free(pMsg->bodyptr);
16012 }
16013 break;
16014 }
16015 case WDA_SYS_READY_IND :
16016 {
16017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16018 "Handling msg type WDA_SYS_READY_IND " );
16019 pWDA->wdaState = WDA_READY_STATE;
16020 if(NULL != pMsg->bodyptr)
16021 {
16022 vos_mem_free(pMsg->bodyptr);
16023 }
16024 break;
16025 }
16026 case WDA_BEACON_FILTER_IND :
16027 {
16028 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
16029 break;
16030 }
16031 case WDA_BTC_SET_CFG:
16032 {
16033 /*TODO: handle this while dealing with BTC */
16034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16035 "Handling msg type WDA_BTC_SET_CFG " );
16036 /* Do Nothing? MSG Body should be freed at here */
16037 if(NULL != pMsg->bodyptr)
16038 {
16039 vos_mem_free(pMsg->bodyptr);
16040 }
16041 break;
16042 }
16043 case WDA_SIGNAL_BT_EVENT:
16044 {
16045 /*TODO: handle this while dealing with BTC */
16046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16047 "Handling msg type WDA_SIGNAL_BT_EVENT " );
16048 /* Do Nothing? MSG Body should be freed at here */
16049 if(NULL != pMsg->bodyptr)
16050 {
16051 vos_mem_free(pMsg->bodyptr);
16052 }
16053 break;
16054 }
16055 case WDA_CFG_RXP_FILTER_REQ:
16056 {
16057 WDA_ProcessConfigureRxpFilterReq(pWDA,
16058 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
16059 break;
16060 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016061 case WDA_MGMT_LOGGING_INIT_REQ:
16062 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053016063 WDA_ProcessFWLoggingInitReq(pWDA,
16064 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016065 break;
16066 }
Siddharth Bhal64246172015-02-27 01:04:37 +053016067 case WDA_GET_FRAME_LOG_REQ:
16068 {
16069 WDA_ProcessGetFrameLogReq(pWDA,
16070 (tAniGetFrameLogReq *)pMsg->bodyptr);
16071 break;
16072 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016073 case WDA_START_RSSI_MONITOR_REQ:
16074 {
16075 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16076 break;
16077 }
16078 case WDA_STOP_RSSI_MONITOR_REQ:
16079 {
16080 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16081 break;
16082 }
Karthick Sa35b0692015-08-21 15:57:05 +053016083 case WDA_SEND_LOG_DONE_IND:
16084 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053016085 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053016086 break;
16087 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053016088 case WDA_FATAL_EVENT_LOGS_REQ:
16089 {
16090 WDA_ProcessFatalEventLogsReq(pWDA,
16091 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
16092 break;
16093 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016094 case WDA_SET_HOST_OFFLOAD:
16095 {
16096 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16097 break;
16098 }
16099 case WDA_SET_KEEP_ALIVE:
16100 {
16101 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
16102 break;
16103 }
16104#ifdef WLAN_NS_OFFLOAD
16105 case WDA_SET_NS_OFFLOAD:
16106 {
16107 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16108 break;
16109 }
16110#endif //WLAN_NS_OFFLOAD
16111 case WDA_ADD_STA_SELF_REQ:
16112 {
16113 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
16114 break;
16115 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016116 case WDA_DEL_STA_SELF_REQ:
16117 {
16118 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
16119 break;
16120 }
16121 case WDA_WOWL_ADD_BCAST_PTRN:
16122 {
16123 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
16124 break;
16125 }
16126 case WDA_WOWL_DEL_BCAST_PTRN:
16127 {
16128 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
16129 break;
16130 }
16131 case WDA_WOWL_ENTER_REQ:
16132 {
16133 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
16134 break;
16135 }
16136 case WDA_WOWL_EXIT_REQ:
16137 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016138 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016139 break;
16140 }
16141 case WDA_TL_FLUSH_AC_REQ:
16142 {
16143 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
16144 break;
16145 }
16146 case WDA_SIGNAL_BTAMP_EVENT:
16147 {
16148 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
16149 break;
16150 }
Abhishek Singh85b74712014-10-08 11:38:19 +053016151 case WDA_FW_STATS_GET_REQ:
16152 {
16153 WDA_ProcessFWStatsGetReq(pWDA,
16154 (tSirFWStatsGetReq *)pMsg->bodyptr);
16155 break;
16156 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053016157#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16158 case WDA_LINK_LAYER_STATS_SET_REQ:
16159 {
16160 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
16161 break;
16162 }
16163 case WDA_LINK_LAYER_STATS_GET_REQ:
16164 {
16165 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
16166 break;
16167 }
16168 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
16169 {
16170 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
16171 break;
16172 }
16173#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053016174#ifdef WLAN_FEATURE_EXTSCAN
16175 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
16176 {
16177 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
16178 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
16179 break;
16180 }
16181 case WDA_EXTSCAN_START_REQ:
16182 {
16183 WDA_ProcessEXTScanStartReq(pWDA,
16184 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
16185 break;
16186 }
16187 case WDA_EXTSCAN_STOP_REQ:
16188 {
16189 WDA_ProcessEXTScanStopReq(pWDA,
16190 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
16191 break;
16192 }
16193 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
16194 {
16195 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
16196 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
16197 break;
16198 }
16199 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
16200 {
16201 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
16202 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
16203 break;
16204 }
16205 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
16206 {
16207 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
16208 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
16209 break;
16210 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016211 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
16212 {
16213 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
16214 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
16215 break;
16216 }
16217 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
16218 {
16219 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
16220 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
16221 break;
16222 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053016223 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
16224 {
16225 WDA_ProcessHighPriorityDataInfoInd(pWDA,
16226 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
16227 break;
16228 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016229#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070016230#ifdef WDA_UT
16231 case WDA_WDI_EVENT_MSG:
16232 {
16233 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
16234 break ;
16235 }
16236#endif
16237 case WDA_UPDATE_BEACON_IND:
16238 {
16239 WDA_ProcessUpdateBeaconParams(pWDA,
16240 (tUpdateBeaconParams *)pMsg->bodyptr);
16241 break;
16242 }
16243 case WDA_SEND_BEACON_REQ:
16244 {
16245 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
16246 break;
16247 }
16248 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
16249 {
16250 WDA_ProcessUpdateProbeRspTemplate(pWDA,
16251 (tSendProbeRespParams *)pMsg->bodyptr);
16252 break;
16253 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016254#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070016255 case WDA_SET_MAX_TX_POWER_REQ:
16256 {
16257 WDA_ProcessSetMaxTxPowerReq(pWDA,
16258 (tMaxTxPowerParams *)pMsg->bodyptr);
16259 break;
16260 }
16261#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070016262 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
16263 {
16264 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
16265 pMsg->bodyptr);
16266 break;
16267 }
schang86c22c42013-03-13 18:41:24 -070016268 case WDA_SET_TX_POWER_REQ:
16269 {
16270 WDA_ProcessSetTxPowerReq(pWDA,
16271 (tSirSetTxPowerReq *)pMsg->bodyptr);
16272 break;
16273 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016274 case WDA_SET_P2P_GO_NOA_REQ:
16275 {
16276 WDA_ProcessSetP2PGONOAReq(pWDA,
16277 (tP2pPsParams *)pMsg->bodyptr);
16278 break;
16279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016280 /* timer related messages */
16281 case WDA_TIMER_BA_ACTIVITY_REQ:
16282 {
16283 WDA_BaCheckActivity(pWDA) ;
16284 break ;
16285 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016286
16287 /* timer related messages */
16288 case WDA_TIMER_TRAFFIC_STATS_IND:
16289 {
16290 WDA_TimerTrafficStatsInd(pWDA);
16291 break;
16292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016293#ifdef WLAN_FEATURE_VOWIFI_11R
16294 case WDA_AGGR_QOS_REQ:
16295 {
16296 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
16297 break;
16298 }
16299#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070016300 case WDA_FTM_CMD_REQ:
16301 {
16302 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
16303 break ;
16304 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016305#ifdef FEATURE_OEM_DATA_SUPPORT
16306 case WDA_START_OEM_DATA_REQ:
16307 {
16308 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
16309 break;
16310 }
16311#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070016312 /* Tx Complete Time out Indication */
16313 case WDA_TX_COMPLETE_TIMEOUT_IND:
16314 {
16315 WDA_ProcessTxCompleteTimeOutInd(pWDA);
16316 break;
16317 }
16318 case WDA_WLAN_SUSPEND_IND:
16319 {
16320 WDA_ProcessWlanSuspendInd(pWDA,
16321 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
16322 break;
16323 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016324 case WDA_WLAN_RESUME_REQ:
16325 {
16326 WDA_ProcessWlanResumeReq(pWDA,
16327 (tSirWlanResumeParam *)pMsg->bodyptr) ;
16328 break;
16329 }
16330
16331 case WDA_UPDATE_CF_IND:
16332 {
16333 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
16334 pMsg->bodyptr = NULL;
16335 break;
16336 }
16337#ifdef FEATURE_WLAN_SCAN_PNO
16338 case WDA_SET_PNO_REQ:
16339 {
16340 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
16341 break;
16342 }
16343 case WDA_UPDATE_SCAN_PARAMS_REQ:
16344 {
16345 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
16346 break;
16347 }
16348 case WDA_SET_RSSI_FILTER_REQ:
16349 {
16350 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
16351 break;
16352 }
16353#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016354#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016355 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016356 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070016357 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016358 break;
16359 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053016360 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
16361 {
16362 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
16363 break;
16364 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016365#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016366 case WDA_SET_TX_PER_TRACKING_REQ:
16367 {
16368 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
16369 break;
16370 }
16371
16372#ifdef WLAN_FEATURE_PACKET_FILTERING
16373 case WDA_8023_MULTICAST_LIST_REQ:
16374 {
16375 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
16376 break;
16377 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016378 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
16379 {
16380 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
16381 break;
16382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016383 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
16384 {
16385 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
16386 break;
16387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016388 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
16389 {
16390 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
16391 break;
16392 }
16393#endif // WLAN_FEATURE_PACKET_FILTERING
16394
16395
16396 case WDA_TRANSMISSION_CONTROL_IND:
16397 {
16398 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
16399 break;
16400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016401 case WDA_SET_POWER_PARAMS_REQ:
16402 {
16403 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
16404 break;
16405 }
c_manjeecfd1efb2015-09-25 19:32:34 +053016406 case WDA_FW_MEM_DUMP_REQ:
16407 {
16408 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
16409 break;
16410 }
16411
Jeff Johnson295189b2012-06-20 16:38:30 -070016412#ifdef WLAN_FEATURE_GTK_OFFLOAD
16413 case WDA_GTK_OFFLOAD_REQ:
16414 {
16415 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
16416 break;
16417 }
16418
16419 case WDA_GTK_OFFLOAD_GETINFO_REQ:
16420 {
16421 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
16422 break;
16423 }
16424#endif //WLAN_FEATURE_GTK_OFFLOAD
16425
16426 case WDA_SET_TM_LEVEL_REQ:
16427 {
16428 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
16429 break;
16430 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053016431
Mohit Khanna4a70d262012-09-11 16:30:12 -070016432 case WDA_UPDATE_OP_MODE:
16433 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053016434 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
16435 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
16436 {
16437 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
16438 }
16439 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070016440 {
16441 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
16442 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
16443 else
16444 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016445 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070016446 }
16447 else
16448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016449 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070016450 break;
16451 }
Chet Lanctot186b5732013-03-18 10:26:30 -070016452#ifdef WLAN_FEATURE_11W
16453 case WDA_EXCLUDE_UNENCRYPTED_IND:
16454 {
16455 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
16456 break;
16457 }
16458#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016459#ifdef FEATURE_WLAN_TDLS
16460 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
16461 {
16462 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
16463 break;
16464 }
16465#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016466 case WDA_DHCP_START_IND:
16467 {
16468 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
16469 break;
16470 }
16471 case WDA_DHCP_STOP_IND:
16472 {
16473 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
16474 break;
16475 }
Leo Chang9056f462013-08-01 19:21:11 -070016476#ifdef FEATURE_WLAN_LPHB
16477 case WDA_LPHB_CONF_REQ:
16478 {
16479 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
16480 break;
16481 }
16482#endif
Yue Mab9c86f42013-08-14 15:59:08 -070016483 case WDA_ADD_PERIODIC_TX_PTRN_IND:
16484 {
16485 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
16486 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
16487 break;
16488 }
16489 case WDA_DEL_PERIODIC_TX_PTRN_IND:
16490 {
16491 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
16492 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
16493 break;
16494 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016495 case WDA_RATE_UPDATE_IND:
16496 {
16497 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
16498 break;
16499 }
16500#ifdef WLAN_FEATURE_RMC
16501 case WDA_RMC_RULER_REQ:
16502 {
16503 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
16504 break;
16505 }
16506 case WDA_RMC_UPDATE_IND:
16507 {
16508 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
16509 break;
16510 }
16511 case WDA_GET_IBSS_PEER_INFO_REQ:
16512 {
16513 WDA_ProcessIbssPeerInfoReq(pWDA,
16514 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
16515 break;
16516 }
16517 case WDA_TX_FAIL_MONITOR_IND:
16518 {
16519 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
16520 break;
16521 }
16522#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053016523#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16524 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
16525 {
16526 WDA_ProcessPERRoamScanTriggerReq(pWDA,
16527 (tPERRoamScanStart *)pMsg->bodyptr);
16528 break;
16529 }
16530#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053016531#ifdef FEATURE_WLAN_BATCH_SCAN
16532 case WDA_SET_BATCH_SCAN_REQ:
16533 {
16534 WDA_ProcessSetBatchScanReq(pWDA,
16535 (tSirSetBatchScanReq *)pMsg->bodyptr);
16536 break;
16537 }
16538 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
16539 {
16540 WDA_ProcessTriggerBatchScanResultInd(pWDA,
16541 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
16542 break;
16543 }
16544 case WDA_STOP_BATCH_SCAN_IND:
16545 {
16546 WDA_ProcessStopBatchScanInd(pWDA,
16547 (tSirStopBatchScanInd *)pMsg->bodyptr);
16548 break;
16549 }
c_hpothu92367912014-05-01 15:18:17 +053016550 case WDA_GET_BCN_MISS_RATE_REQ:
16551 WDA_ProcessGetBcnMissRateReq(pWDA,
16552 (tSirBcnMissRateReq *)pMsg->bodyptr);
16553 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053016554#endif
16555
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053016556 case WDA_HT40_OBSS_SCAN_IND:
16557 {
16558 WDA_ProcessHT40OBSSScanInd(pWDA,
16559 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
16560 break;
16561 }
16562 case WDA_HT40_OBSS_STOP_SCAN_IND:
16563 {
16564 WDA_ProcessHT40OBSSStopScanInd(pWDA,
16565 (tANI_U8*)pMsg->bodyptr);
16566 break;
16567 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053016568// tdlsoffchan
16569#ifdef FEATURE_WLAN_TDLS
16570 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
16571 {
16572 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
16573 break;
16574 }
16575#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053016576 case WDA_SPOOF_MAC_ADDR_REQ:
16577 {
16578 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
16579 break;
16580 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053016581 case WDA_ENCRYPT_MSG_REQ:
16582 {
16583 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
16584 break;
16585 }
Anurag Chouhan83026002016-12-13 22:46:21 +053016586#ifdef DHCP_SERVER_OFFLOAD
16587 case WDA_SET_DHCP_SERVER_OFFLOAD_REQ:
16588 {
16589 wda_process_dhcpserver_offload_req(pWDA,
16590 (sir_dhcp_srv_offload_info_t *)pMsg->bodyptr);
16591 break;
16592 }
16593#endif /* DHCP_SERVER_OFFLOAD */
16594
Srinivas Dasari32a79262015-02-19 13:04:49 +053016595
16596 case WDA_NAN_REQUEST:
16597 {
16598 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
16599 break;
16600 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053016601 case WDA_SET_RTS_CTS_HTVHT:
16602 {
16603 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
16604 break;
16605 }
Katya Nigamf0511f62015-05-05 16:40:57 +053016606
16607 case WDA_MON_START_REQ:
16608 {
16609 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
16610 break;
16611 }
16612 case WDA_MON_STOP_REQ:
16613 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053016614 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053016615 break;
16616 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053016617 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
16618 {
16619 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
16620 break;
16621 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053016622 case WDA_WIFI_CONFIG_REQ:
16623 {
16624 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
16625 break;
16626 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016627#ifdef FEATURE_OEM_DATA_SUPPORT
16628 case WDA_START_OEM_DATA_REQ_IND_NEW:
16629 {
16630 WDA_ProcessStartOemDataReqIndNew(pWDA,
16631 (tOemDataReqNewConfig *)pMsg->bodyptr);
16632 break;
16633 }
16634#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053016635 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
16636 {
16637 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
16638 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
16639 break;
16640 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053016641 case WDA_MODIFY_ROAM_PARAMS_IND:
16642 {
16643 WDA_ProcessBcnMissPenaltyCount(pWDA,
16644 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
16645 break;
16646 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053016647
16648 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
16649 wda_process_set_allowed_action_frames_ind(pWDA,
16650 (struct sir_allowed_action_frames*)pMsg->bodyptr);
16651 break;
16652
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016653 case WDA_PAUSE_TL_IND:
16654 {
16655 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
16656 break;
16657 }
Agrawal Ashish17ef5082016-10-17 18:33:21 +053016658#ifdef SAP_AUTH_OFFLOAD
16659 case WDA_SET_SAP_AUTH_OFL:
16660 {
16661 wda_process_sap_auth_offload(pWDA,
16662 (struct tSirSapOffloadInfo*)pMsg->bodyptr);
16663 break;
16664 }
Agrawal Ashisha8e8a722016-10-18 19:07:45 +053016665 case WDA_SAP_OFL_ADD_STA:
16666 {
16667 WDA_ProcessSapAuthOffloadAddStaReq(pWDA,
16668 (tAddStaParams *)pMsg->bodyptr);
16669 break;
16670 }
16671 case WDA_SAP_OFL_DEL_STA:
16672 {
16673 WDA_ProcessSapAuthOffloadDelStaReq(pWDA,
16674 (tDeleteStaParams *)pMsg->bodyptr);
16675 break;
16676 }
Agrawal Ashish17ef5082016-10-17 18:33:21 +053016677#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016678 default:
16679 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053016680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016681 "No Handling for msg type %x in WDA "
16682 ,pMsg->type);
16683 /* Do Nothing? MSG Body should be freed at here */
16684 if(NULL != pMsg->bodyptr)
16685 {
16686 vos_mem_free(pMsg->bodyptr);
16687 }
16688 //WDA_VOS_ASSERT(0) ;
16689 }
16690 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016691 return status ;
16692}
16693
Jeff Johnson295189b2012-06-20 16:38:30 -070016694/*
16695 * FUNCTION: WDA_LowLevelIndCallback
16696 * IND API callback from WDI, send Ind to PE
16697 */
16698void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
16699 void* pUserData )
16700{
16701 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
16702#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16703 tSirRSSINotification rssiNotification;
16704#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016705 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016706 {
16707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016708 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016709 VOS_ASSERT(0);
16710 return ;
16711 }
16712
16713 switch(wdiLowLevelInd->wdiIndicationType)
16714 {
16715 case WDI_RSSI_NOTIFICATION_IND:
16716 {
16717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16718 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016719#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16720 rssiNotification.bReserved =
16721 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16722 rssiNotification.bRssiThres1NegCross =
16723 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16724 rssiNotification.bRssiThres1PosCross =
16725 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16726 rssiNotification.bRssiThres2NegCross =
16727 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16728 rssiNotification.bRssiThres2PosCross =
16729 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16730 rssiNotification.bRssiThres3NegCross =
16731 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16732 rssiNotification.bRssiThres3PosCross =
16733 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016734 rssiNotification.avgRssi = (v_S7_t)
16735 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016736 WLANTL_BMPSRSSIRegionChangedNotification(
16737 pWDA->pVosContext,
16738 &rssiNotification);
16739#endif
16740 break ;
16741 }
16742 case WDI_MISSED_BEACON_IND:
16743 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016744 tpSirSmeMissedBeaconInd pMissBeacInd =
16745 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16747 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016748 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016749 if(NULL == pMissBeacInd)
16750 {
16751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16752 "%s: VOS MEM Alloc Failure", __func__);
16753 break;
16754 }
16755 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16756 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16757 pMissBeacInd->bssIdx =
16758 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16759 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016760 break ;
16761 }
16762 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16763 {
16764 /* TODO: Decode Ind and send Ind to PE */
16765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16766 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16767 break ;
16768 }
16769
16770 case WDI_MIC_FAILURE_IND:
16771 {
16772 tpSirSmeMicFailureInd pMicInd =
16773 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16774
16775 if(NULL == pMicInd)
16776 {
16777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016779 break;
16780 }
16781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16782 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016783 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16784 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16785 vos_mem_copy(pMicInd->bssId,
16786 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16787 sizeof(tSirMacAddr));
16788 vos_mem_copy(pMicInd->info.srcMacAddr,
16789 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16790 sizeof(tSirMacAddr));
16791 vos_mem_copy(pMicInd->info.taMacAddr,
16792 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16793 sizeof(tSirMacAddr));
16794 vos_mem_copy(pMicInd->info.dstMacAddr,
16795 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16796 sizeof(tSirMacAddr));
16797 vos_mem_copy(pMicInd->info.rxMacAddr,
16798 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16799 sizeof(tSirMacAddr));
16800 pMicInd->info.multicast =
16801 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16802 pMicInd->info.keyId=
16803 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16804 pMicInd->info.IV1=
16805 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16806 vos_mem_copy(pMicInd->info.TSC,
16807 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016808 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16809 (void *)pMicInd , 0) ;
16810 break ;
16811 }
16812 case WDI_FATAL_ERROR_IND:
16813 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016814 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016815 /* TODO: Decode Ind and send Ind to PE */
16816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16817 "Received WDI_FATAL_ERROR_IND from WDI ");
16818 break ;
16819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016820 case WDI_DEL_STA_IND:
16821 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016822 tpDeleteStaContext pDelSTACtx =
16823 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16824
16825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16826 "Received WDI_DEL_STA_IND from WDI ");
16827 if(NULL == pDelSTACtx)
16828 {
16829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016831 break;
16832 }
16833 vos_mem_copy(pDelSTACtx->addr2,
16834 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16835 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016836 vos_mem_copy(pDelSTACtx->bssId,
16837 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16838 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016839 pDelSTACtx->assocId =
16840 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16841 pDelSTACtx->reasonCode =
16842 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16843 pDelSTACtx->staId =
16844 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016845 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16846 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016847 break ;
16848 }
16849 case WDI_COEX_IND:
16850 {
16851 tANI_U32 index;
16852 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016853 tSirSmeCoexInd *pSmeCoexInd;
16854
16855 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16856 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16857 {
16858 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16859 {
16860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16861 FL("Coex state: 0x%x coex feature: 0x%x"),
16862 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16863 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16864
16865 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16866 {
16867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16868 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16869 }
16870 }
16871 break;
16872 }
16873
16874 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016875 if(NULL == pSmeCoexInd)
16876 {
16877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016878 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016879 break;
16880 }
16881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16882 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016883 /* Message Header */
16884 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16885 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016886 /* Info from WDI Indication */
16887 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16888 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16889 {
16890 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16891 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016892 /* VOS message wrapper */
16893 vosMsg.type = eWNI_SME_COEX_IND;
16894 vosMsg.bodyptr = (void *)pSmeCoexInd;
16895 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016896 /* Send message to SME */
16897 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16898 {
16899 /* free the mem and return */
16900 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16901 }
16902 else
16903 {
16904 /* DEBUG */
16905 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16906 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16907 pSmeCoexInd->coexIndType,
16908 pSmeCoexInd->coexIndData[0],
16909 pSmeCoexInd->coexIndData[1],
16910 pSmeCoexInd->coexIndData[2],
16911 pSmeCoexInd->coexIndData[3]);
16912 }
16913 break;
16914 }
16915 case WDI_TX_COMPLETE_IND:
16916 {
16917 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16918 /* Calling TxCompleteAck Indication from wda context*/
16919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16920 "Complete Indication received from HAL");
16921 if( pWDA->pAckTxCbFunc )
16922 {
16923 if( VOS_STATUS_SUCCESS !=
16924 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16925 {
16926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16927 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016928 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016929 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016930 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16931 else
16932 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016933 pWDA->pAckTxCbFunc = NULL;
16934 }
16935 else
16936 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016938 "Tx Complete Indication is received after timeout ");
16939 }
16940 break;
16941 }
Viral Modid86bde22012-12-10 13:09:21 -080016942 case WDI_P2P_NOA_START_IND :
16943 {
16944 tSirP2PNoaStart *pP2pNoaStart =
16945 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16946
16947 if (NULL == pP2pNoaStart)
16948 {
16949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16950 "Memory allocation failure, "
16951 "WDI_P2P_NOA_START_IND not forwarded");
16952 break;
16953 }
16954 pP2pNoaStart->status =
16955 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16956 pP2pNoaStart->bssIdx =
16957 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16958 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16959 (void *)pP2pNoaStart , 0) ;
16960 break;
16961 }
16962
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016963#ifdef FEATURE_WLAN_TDLS
16964 case WDI_TDLS_IND :
16965 {
16966 tSirTdlsInd *pTdlsInd =
16967 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16968
16969 if (NULL == pTdlsInd)
16970 {
16971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16972 "Memory allocation failure, "
16973 "WDI_TDLS_IND not forwarded");
16974 break;
16975 }
16976 pTdlsInd->status =
16977 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16978 pTdlsInd->assocId =
16979 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16980 pTdlsInd->staIdx =
16981 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16982 pTdlsInd->reasonCode =
16983 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16984 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16985 (void *)pTdlsInd , 0) ;
16986 break;
16987 }
16988#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016989 case WDI_P2P_NOA_ATTR_IND :
16990 {
16991 tSirP2PNoaAttr *pP2pNoaAttr =
16992 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16994 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016995 if (NULL == pP2pNoaAttr)
16996 {
16997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16998 "Memory allocation failure, "
16999 "WDI_P2P_NOA_ATTR_IND not forwarded");
17000 break;
17001 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017002 pP2pNoaAttr->index =
17003 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
17004 pP2pNoaAttr->oppPsFlag =
17005 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
17006 pP2pNoaAttr->ctWin =
17007 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
17008
17009 pP2pNoaAttr->uNoa1IntervalCnt =
17010 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
17011 pP2pNoaAttr->uNoa1Duration =
17012 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
17013 pP2pNoaAttr->uNoa1Interval =
17014 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
17015 pP2pNoaAttr->uNoa1StartTime =
17016 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017017 pP2pNoaAttr->uNoa2IntervalCnt =
17018 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
17019 pP2pNoaAttr->uNoa2Duration =
17020 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
17021 pP2pNoaAttr->uNoa2Interval =
17022 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
17023 pP2pNoaAttr->uNoa2StartTime =
17024 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017025 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
17026 (void *)pP2pNoaAttr , 0) ;
17027 break;
17028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017029#ifdef FEATURE_WLAN_SCAN_PNO
17030 case WDI_PREF_NETWORK_FOUND_IND:
17031 {
17032 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017033 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
17034 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17035 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
17036 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
17037
Jeff Johnson295189b2012-06-20 16:38:30 -070017038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17039 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070017040 if (NULL == pPrefNetworkFoundInd)
17041 {
17042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17043 "Memory allocation failure, "
17044 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053017045 if (NULL !=
17046 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17047 {
17048 wpalMemoryFree(
17049 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
17050 );
17051 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017053 break;
17054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017055 /* Message Header */
17056 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017057 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070017058
17059 /* Info from WDI Indication */
17060 pPrefNetworkFoundInd->ssId.length =
17061 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070017062 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070017063 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
17064 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
17065 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070017066 if (NULL !=
17067 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17068 {
17069 pPrefNetworkFoundInd->frameLength =
17070 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17071 vos_mem_copy( pPrefNetworkFoundInd->data,
17072 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
17073 pPrefNetworkFoundInd->frameLength);
17074 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
17075 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17076 }
17077 else
17078 {
17079 pPrefNetworkFoundInd->frameLength = 0;
17080 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017081 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070017082 /* VOS message wrapper */
17083 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
17084 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
17085 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017086 /* Send message to SME */
17087 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17088 {
17089 /* free the mem and return */
17090 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
17091 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017092 break;
17093 }
17094#endif // FEATURE_WLAN_SCAN_PNO
17095
17096#ifdef WLAN_WAKEUP_EVENTS
17097 case WDI_WAKE_REASON_IND:
17098 {
17099 vos_msg_t vosMsg;
17100 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
17101 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
17102 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
17103
17104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053017105 "[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 -070017106 wdiLowLevelInd->wdiIndicationType,
17107 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
17108 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
17109 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17110
17111 if (NULL == pWakeReasonInd)
17112 {
17113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17114 "Memory allocation failure, "
17115 "WDI_WAKE_REASON_IND not forwarded");
17116 break;
17117 }
17118
17119 vos_mem_zero(pWakeReasonInd, allocSize);
17120
17121 /* Message Header */
17122 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
17123 pWakeReasonInd->mesgLen = allocSize;
17124
17125 /* Info from WDI Indication */
17126 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
17127 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
17128 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
17129 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
17130 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
17131 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
17132 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
17133 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17134
17135 /* VOS message wrapper */
17136 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
17137 vosMsg.bodyptr = (void *) pWakeReasonInd;
17138 vosMsg.bodyval = 0;
17139
17140 /* Send message to SME */
17141 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17142 {
17143 /* free the mem and return */
17144 vos_mem_free((v_VOID_t *) pWakeReasonInd);
17145 }
17146
17147 break;
17148 }
17149#endif // WLAN_WAKEUP_EVENTS
17150
17151 case WDI_TX_PER_HIT_IND:
17152 {
17153 vos_msg_t vosMsg;
17154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
17155 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
17156 /* VOS message wrapper */
17157 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
17158 vosMsg.bodyptr = NULL;
17159 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017160 /* Send message to SME */
17161 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17162 {
17163 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
17164 }
17165 break;
17166 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017167#ifdef WLAN_FEATURE_RMC
17168 case WDI_TX_FAIL_IND:
17169 {
17170 if (pWDA->txFailIndCallback)
17171 {
17172 pWDA->txFailIndCallback(
17173 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
17174 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
17175 }
17176 break;
17177 }
17178#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070017179
Leo Chang9056f462013-08-01 19:21:11 -070017180#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070017181 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070017182 {
Leo Changd9df8aa2013-09-26 13:32:26 -070017183 vos_msg_t vosMsg;
17184 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017185
Leo Changd9df8aa2013-09-26 13:32:26 -070017186 lphbInd =
17187 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
17188 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070017189 {
17190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17191 "%s: LPHB IND buffer alloc Fail", __func__);
17192 return ;
17193 }
17194
Leo Changd9df8aa2013-09-26 13:32:26 -070017195 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070017196 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070017197 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070017198 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070017199 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070017200 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
17201
17202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070017203 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070017204 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
17205
Leo Changd9df8aa2013-09-26 13:32:26 -070017206 vosMsg.type = eWNI_SME_LPHB_IND;
17207 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017208 vosMsg.bodyval = 0;
17209 /* Send message to SME */
17210 if (VOS_STATUS_SUCCESS !=
17211 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17212 {
17213 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17214 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070017215 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070017216 }
17217 break;
17218 }
17219#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070017220 case WDI_PERIODIC_TX_PTRN_FW_IND:
17221 {
17222 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17223 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
17224 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
17225 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
17226 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
17227 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
17228 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
17229
17230 break;
17231 }
Leo Chang9056f462013-08-01 19:21:11 -070017232
Ravi Joshid2ca7c42013-07-23 08:37:49 -070017233 case WDI_IBSS_PEER_INACTIVITY_IND:
17234 {
17235 tSirIbssPeerInactivityInd *pIbssInd =
17236 (tSirIbssPeerInactivityInd *)
17237 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
17238
17239 if (NULL == pIbssInd)
17240 {
17241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17242 "Memory allocation failure, "
17243 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
17244 break;
17245 }
17246
17247 pIbssInd->bssIdx =
17248 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
17249 pIbssInd->staIdx =
17250 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
17251 vos_mem_copy(pIbssInd->peerAddr,
17252 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
17253 sizeof(tSirMacAddr));
17254 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
17255 break;
17256 }
17257
Abhishek Singh00b71972016-01-07 10:51:04 +053017258#ifdef WLAN_FEATURE_RMC
17259 case WDI_RMC_RULER_PICK_NEW :
17260 {
17261 tSirRmcUpdateInd *pRmcUpdateInd =
17262 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
17263
17264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17265 "Received WDI_RMC_UPDATE_IND from WDI");
17266 if (NULL == pRmcUpdateInd)
17267 {
17268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17269 "Memory allocation failure, "
17270 "WDI_RMC_UPDATE_IND not forwarded");
17271 break;
17272 }
17273
17274 pRmcUpdateInd->indication =
17275 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
17276 pRmcUpdateInd->role =
17277 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
17278
17279 /* Copy the mcast transmitter which should be us */
17280 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
17281 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
17282 mcastTransmitter,
17283 sizeof(tSirMacAddr));
17284 /* Copy the mcast group address */
17285 vos_mem_copy(pRmcUpdateInd->mcastGroup,
17286 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
17287 sizeof(tSirMacAddr));
17288 vos_mem_copy(pRmcUpdateInd->mcastRuler,
17289 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
17290 sizeof(tSirMacAddr));
17291 vos_mem_copy(pRmcUpdateInd->ruler,
17292 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
17293 sizeof(pRmcUpdateInd->ruler));
17294
17295 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
17296 break;
17297 }
17298#endif /* WLAN_FEATURE_RMC */
17299
Rajeev79dbe4c2013-10-05 11:03:42 +053017300#ifdef FEATURE_WLAN_BATCH_SCAN
17301 case WDI_BATCH_SCAN_RESULT_IND:
17302 {
17303 void *pBatchScanResult;
17304 void *pCallbackContext;
17305 tpAniSirGlobal pMac;
17306
17307 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17308 "Received WDI_BATCHSCAN_RESULT_IND from FW");
17309
17310 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053017311 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053017312 {
17313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17314 "%s:pWDA is NULL", __func__);
17315 VOS_ASSERT(0);
17316 return;
17317 }
17318
17319 pBatchScanResult =
17320 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
17321 if (NULL == pBatchScanResult)
17322 {
17323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17324 "%s:Batch scan result from FW is null can't invoke HDD callback",
17325 __func__);
17326 VOS_ASSERT(0);
17327 return;
17328 }
17329
17330 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17331 if (NULL == pMac)
17332 {
17333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17334 "%s:pMac is NULL", __func__);
17335 VOS_ASSERT(0);
17336 return;
17337 }
17338
17339 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
17340 /*call hdd callback with set batch scan response data*/
17341 if(pMac->pmc.batchScanResultCallback)
17342 {
17343 pMac->pmc.batchScanResultCallback(pCallbackContext,
17344 pBatchScanResult);
17345 }
17346 else
17347 {
17348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17349 "%s:HDD callback is null", __func__);
17350 VOS_ASSERT(0);
17351 }
17352 break;
17353 }
17354#endif
17355
Leo Chang0b0e45a2013-12-15 15:18:55 -080017356#ifdef FEATURE_WLAN_CH_AVOID
17357 case WDI_CH_AVOID_IND:
17358 {
17359 vos_msg_t vosMsg;
17360 tSirChAvoidIndType *chAvoidInd;
17361
17362 chAvoidInd =
17363 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
17364 if (NULL == chAvoidInd)
17365 {
17366 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17367 "%s: CH_AVOID IND buffer alloc Fail", __func__);
17368 return ;
17369 }
17370
17371 chAvoidInd->avoidRangeCount =
17372 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
17373 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
17374 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
17375 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
17376
17377 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17378 "%s : WDA CH avoid notification", __func__);
17379
17380 vosMsg.type = eWNI_SME_CH_AVOID_IND;
17381 vosMsg.bodyptr = chAvoidInd;
17382 vosMsg.bodyval = 0;
17383 /* Send message to SME */
17384 if (VOS_STATUS_SUCCESS !=
17385 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17386 {
17387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17388 "post eWNI_SME_CH_AVOID_IND to SME Failed");
17389 vos_mem_free(chAvoidInd);
17390 }
17391 break;
17392 }
17393#endif /* FEATURE_WLAN_CH_AVOID */
17394
Sunil Duttbd736ed2014-05-26 21:19:41 +053017395#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17396 case WDI_LL_STATS_RESULTS_IND:
17397 {
17398 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053017399 tpAniSirGlobal pMac;
17400
17401 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17402 "Received WDI_LL_STATS_RESULTS_IND from FW");
17403
17404 /*sanity check*/
17405 if (NULL == pWDA)
17406 {
17407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17408 "%s:pWDA is NULL", __func__);
17409 VOS_ASSERT(0);
17410 return;
17411 }
17412
17413 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053017414 (void *)wdiLowLevelInd->
17415 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053017416 if (NULL == pLinkLayerStatsInd)
17417 {
17418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17419 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
17420 __func__);
17421 VOS_ASSERT(0);
17422 return;
17423 }
17424
17425 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17426 if (NULL == pMac)
17427 {
17428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17429 "%s:pMac is NULL", __func__);
17430 VOS_ASSERT(0);
17431 return;
17432 }
17433
Dino Mycled3d50022014-07-07 12:58:25 +053017434 /* call hdd callback with Link Layer Statistics.
17435 * vdev_id/ifacId in link_stats_results will be
17436 * used to retrieve the correct HDD context
17437 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053017438 if (pMac->sme.pLinkLayerStatsIndCallback)
17439 {
Dino Mycled3d50022014-07-07 12:58:25 +053017440 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053017441 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053017442 pLinkLayerStatsInd,
17443 wdiLowLevelInd->
17444 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053017445 }
17446 else
17447 {
17448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17449 "%s:HDD callback is null", __func__);
17450 }
17451 break;
17452 }
17453#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
17454
Dino Mycle41bdc942014-06-10 11:30:24 +053017455#ifdef WLAN_FEATURE_EXTSCAN
17456 case WDI_EXTSCAN_PROGRESS_IND:
17457 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
17458 case WDI_EXTSCAN_SCAN_RESULT_IND:
17459 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053017460 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053017461 {
17462 void *pEXTScanData;
17463 void *pCallbackContext;
17464 tpAniSirGlobal pMac;
17465 tANI_U16 indType;
17466
17467 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17468 "Received WDI_EXTSCAN Indications from FW");
17469 /*sanity check*/
17470 if (NULL == pWDA)
17471 {
17472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17473 "%s:pWDA is NULL", __func__);
17474 VOS_ASSERT(0);
17475 return;
17476 }
17477 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
17478 {
17479 indType = WDA_EXTSCAN_PROGRESS_IND;
17480
17481 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17482 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
17483 }
17484 if (wdiLowLevelInd->wdiIndicationType ==
17485 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
17486 {
17487 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
17488
17489 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17490 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
17491 }
17492 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
17493 {
17494 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
17495
17496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17497 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
17498 }
17499 if (wdiLowLevelInd->wdiIndicationType ==
17500 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
17501 {
17502 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
17503
17504 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17505 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
17506 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053017507 if (wdiLowLevelInd->wdiIndicationType ==
17508 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
17509 {
17510 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
17511
17512 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17513 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
17514 }
Dino Mycle41bdc942014-06-10 11:30:24 +053017515
17516 pEXTScanData =
17517 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
17518 if (NULL == pEXTScanData)
17519 {
17520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17521 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
17522 __func__);
17523 VOS_ASSERT(0);
17524 return;
17525 }
17526
17527 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17528 if (NULL == pMac)
17529 {
17530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17531 "%s:pMac is NULL", __func__);
17532 VOS_ASSERT(0);
17533 return;
17534 }
17535
17536 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17537
17538 if(pMac->sme.pEXTScanIndCb)
17539 {
17540 pMac->sme.pEXTScanIndCb(pCallbackContext,
17541 indType,
17542 pEXTScanData);
17543 }
17544 else
17545 {
17546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17547 "%s:HDD callback is null", __func__);
17548 }
17549 break;
17550 }
17551#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053017552 case WDI_DEL_BA_IND:
17553 {
17554 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053017555 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053017556
17557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17558 "Received WDI_DEL_BA_IND from WDI ");
17559 if(NULL == pDelBAInd)
17560 {
17561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17562 "%s: VOS MEM Alloc Failure", __func__);
17563 break;
17564 }
17565 vos_mem_copy(pDelBAInd->peerMacAddr,
17566 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
17567 sizeof(tSirMacAddr));
17568 vos_mem_copy(pDelBAInd->bssId,
17569 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
17570 sizeof(tSirMacAddr));
17571 pDelBAInd->staIdx =
17572 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
17573 pDelBAInd->baTID =
17574 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
17575 pDelBAInd->baDirection =
17576 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
17577 pDelBAInd->reasonCode =
17578 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
17579
17580 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
17581 (void *)pDelBAInd , 0) ;
17582 break;
17583 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053017584 case WDI_NAN_EVENT_IND:
17585 {
17586 vos_msg_t vosMsg;
17587 tpSirNanEvent pSirNanEvent = NULL;
17588
17589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17590 "Received WDI_NAN_EVENT");
17591
17592 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
17593 - sizeof( pSirNanEvent->event_data)
17594 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17595
17596 if (NULL == pSirNanEvent)
17597 {
17598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17599 "%s: VOS MEM Alloc Failure", __func__);
17600 VOS_ASSERT(0) ;
17601 break;
17602 }
17603
17604 pSirNanEvent->event_data_len =
17605 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
17606
17607 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
17608 {
17609 vos_mem_copy( pSirNanEvent->event_data,
17610 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
17611 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
17612 }
17613
17614 /* VOS message wrapper */
17615 vosMsg.type = eWNI_SME_NAN_EVENT;
17616 vosMsg.bodyptr = pSirNanEvent;
17617 vosMsg.bodyval = 0;
17618
17619 /* Send message to SME */
17620 if (VOS_STATUS_SUCCESS
17621 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17622 {
17623 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17624 "post eWNI_SME_NAN_EVENT to SME Failed");
17625 vos_mem_free(pSirNanEvent);
17626 }
17627 break;
17628 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017629 case WDI_LOST_LINK_PARAMS_IND:
17630 {
17631 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
17632 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053017633
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053017634 if (NULL == pLostLinkParamInd)
17635 {
17636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17637 "%s: VOS MEM Alloc Failure", __func__);
17638 break;
17639 }
17640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17641 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
17642
17643 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
17644 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
17645 pLostLinkParamInd->info.bssIdx =
17646 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
17647 pLostLinkParamInd->info.rssi =
17648 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
17649 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
17650 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
17651 sizeof(tSirMacAddr));
17652 pLostLinkParamInd->info.linkFlCnt =
17653 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
17654 pLostLinkParamInd->info.linkFlTx =
17655 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
17656 pLostLinkParamInd->info.lastDataRate =
17657 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
17658 pLostLinkParamInd->info.rsvd1 =
17659 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
17660 pLostLinkParamInd->info.rsvd2 =
17661 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
17662 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
17663 (void *)pLostLinkParamInd , 0) ;
17664 break;
17665 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017666 case WDI_RSSI_BREACHED_IND:
17667 {
17668 WDI_RssiBreachedIndType *pRssiBreachedInd;
17669 tpAniSirGlobal pMac;
17670
17671 pRssiBreachedInd =
17672 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
17673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17674 "Received WDI_RSSI_BREACHED_IND from FW");
17675
17676 vos_mem_copy(pRssiBreachedInd,
17677 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
17678 sizeof(WDI_RssiBreachedIndType));
17679
17680 /*sanity check*/
17681 if (NULL == pWDA)
17682 {
17683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17684 "%s:pWDA is NULL", __func__);
17685 vos_mem_free(pRssiBreachedInd);
17686 VOS_ASSERT(0);
17687 return;
17688 }
17689
17690 if (NULL == pRssiBreachedInd)
17691 {
17692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17693 "%s:Breach indication from FW is null can't invoke HDD callback",
17694 __func__);
17695 VOS_ASSERT(0);
17696 return;
17697 }
17698
17699 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17700 if (NULL == pMac)
17701 {
17702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17703 "%s:pMac is NULL", __func__);
17704 VOS_ASSERT(0);
17705 vos_mem_free(pRssiBreachedInd);
17706 return;
17707 }
17708
17709 if (pMac->sme.rssiThresholdBreachedCb)
17710 {
17711 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
17712 }
17713 else
17714 {
17715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17716 "%s:HDD callback is null", __func__);
17717 }
17718 vos_mem_free(pRssiBreachedInd);
17719 break;
17720 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017721#ifdef FEATURE_OEM_DATA_SUPPORT
17722 case WDI_START_OEM_DATA_RSP_IND_NEW:
17723 {
17724 void *pCallbackContext;
17725 tpAniSirGlobal pMac;
17726 tANI_U16 indType;
17727 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017728 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017729
17730 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17731 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17732
17733 /*sanity check*/
17734 if (NULL == pWDA)
17735 {
17736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17737 "%s:pWDA is NULL", __func__);
17738 VOS_ASSERT(0);
17739 return;
17740 }
17741
17742 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17743 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017744 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17745 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017746 if (NULL == pOemRspNewIndData)
17747 {
17748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17749 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17750 __func__);
17751 VOS_ASSERT(0);
17752 return;
17753 }
17754
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017755 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17756 OemRspNewLen;
17757
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017758 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17759 if (NULL == pMac)
17760 {
17761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17762 "%s:pMac is NULL", __func__);
17763 VOS_ASSERT(0);
17764 return;
17765 }
17766
17767 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17768
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17770 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17771
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017772 if(pMac->sme.pOemDataIndCb)
17773 {
17774 pMac->sme.pOemDataIndCb(pCallbackContext,
17775 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017776 pOemRspNewIndData,
17777 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017778 }
17779 else
17780 {
17781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17782 "%s:HDD callback is null", __func__);
17783 }
17784 break;
17785 }
17786#endif /* FEATURE_OEM_DATA_SUPPORT */
17787
Jeff Johnson295189b2012-06-20 16:38:30 -070017788 default:
17789 {
17790 /* TODO error */
17791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17792 "Received UNKNOWN Indication from WDI ");
17793 }
17794 }
17795 return ;
17796}
17797
Jeff Johnson295189b2012-06-20 16:38:30 -070017798/*
17799 * BA related processing in WDA.
17800 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017801void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17802 void* pUserData)
17803{
17804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17805 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017806 if(NULL == pWdaParams)
17807 {
17808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017809 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017810 VOS_ASSERT(0) ;
17811 return ;
17812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017813 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017814 vos_mem_free(pWdaParams->wdaMsgParam) ;
17815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17816 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017818 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017819 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17820 {
17821 tANI_U8 i = 0 ;
17822 tBaActivityInd *baActivityInd = NULL ;
17823 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17824 tANI_U8 allocSize = sizeof(tBaActivityInd)
17825 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17826 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17827 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017828 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017829 if(NULL == baActivityInd)
17830 {
17831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017832 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017833 VOS_ASSERT(0) ;
17834 return;
17835 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017836 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17837 sizeof(tSirMacAddr)) ;
17838 baActivityInd->baCandidateCnt = baCandidateCount ;
17839
17840 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17841 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17842
17843 for(i = 0 ; i < baCandidateCount ; i++)
17844 {
17845 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017846 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17847 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017848 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17849 {
17850 baCandidate->baInfo[tid].fBaEnable =
17851 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17852 baCandidate->baInfo[tid].startingSeqNum =
17853 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17854 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017855 wdiBaCandidate++ ;
17856 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017858 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17859 }
17860 else
17861 {
17862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17863 "BA Trigger RSP with Failure received ");
17864 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017865 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017866}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017867
17868
17869/*
17870 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17871 * during MCC
17872 */
17873void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17874{
17875 wpt_uint32 enabled;
17876 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17877 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17878 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17879
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017880 if (NULL == pMac )
17881 {
17882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17883 "%s: Invoked with invalid MAC context ", __func__ );
17884 VOS_ASSERT(0);
17885 return;
17886 }
17887
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017888 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17889 != eSIR_SUCCESS)
17890 {
17891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17892 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17893 return;
17894 }
17895
17896 if(!enabled)
17897 {
17898 return;
17899 }
17900
17901 if(NULL == pWDA)
17902 {
17903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17904 "%s:WDA context is NULL", __func__);
17905 VOS_ASSERT(0);
17906 return;
17907 }
17908
17909 if(activate)
17910 {
17911 if( VOS_STATUS_SUCCESS !=
17912 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17913 {
17914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17915 "Traffic Stats Timer Start Failed ");
17916 return;
17917 }
17918 WDI_DS_ActivateTrafficStats();
17919 }
17920 else
17921 {
17922 WDI_DS_DeactivateTrafficStats();
17923 WDI_DS_ClearTrafficStats();
17924
17925 if( VOS_STATUS_SUCCESS !=
17926 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17927 {
17928 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17929 "Traffic Stats Timer Stop Failed ");
17930 return;
17931 }
17932 }
17933}
17934
17935/*
17936 * Traffic Stats Timer handler
17937 */
17938void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17939{
17940 WDI_Status wdiStatus;
17941 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17942 WDI_TrafficStatsIndType trafficStatsIndParams;
17943 wpt_uint32 length, enabled;
17944 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17945
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017946 if (NULL == pMac )
17947 {
17948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17949 "%s: Invoked with invalid MAC context ", __func__ );
17950 VOS_ASSERT(0);
17951 return;
17952 }
17953
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017954 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17955 != eSIR_SUCCESS)
17956 {
17957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17958 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17959 return;
17960 }
17961
17962 if(!enabled)
17963 {
17964 WDI_DS_DeactivateTrafficStats();
17965 return;
17966 }
17967
17968 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17969
17970 if(pWdiTrafficStats != NULL)
17971 {
17972 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17973 trafficStatsIndParams.length = length;
17974 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017975 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017976 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17977 trafficStatsIndParams.pUserData = pWDA;
17978
17979 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17980
17981 if(WDI_STATUS_PENDING == wdiStatus)
17982 {
17983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17984 "Pending received for %s:%d ",__func__,__LINE__ );
17985 }
17986 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17987 {
17988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17989 "Failure in %s:%d ",__func__,__LINE__ );
17990 }
17991
17992 WDI_DS_ClearTrafficStats();
17993 }
17994 else
17995 {
17996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17997 "pWdiTrafficStats is Null");
17998 }
17999
18000 if( VOS_STATUS_SUCCESS !=
18001 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18002 {
18003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18004 "Traffic Stats Timer Start Failed ");
18005 return;
18006 }
18007}
18008
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018009bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
18010{
18011 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
18012 return true;
18013 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
18014 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
18015 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
18016 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
18017 jiffies_to_msecs(jiffies)))
18018 {
18019 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18020 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
18021 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
18022 return false;
18023 }
18024 return true;
18025}
18026
Jeff Johnson295189b2012-06-20 16:38:30 -070018027/*
18028 * BA Activity check timer handler
18029 */
18030void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
18031{
18032 tANI_U8 curSta = 0 ;
18033 tANI_U8 tid = 0 ;
18034 tANI_U8 size = 0 ;
18035 tANI_U8 baCandidateCount = 0 ;
18036 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018037 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070018038 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018039 tpAniSirGlobal pMac;
18040
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018041 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070018042 {
18043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018044 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018045 VOS_ASSERT(0);
18046 return ;
18047 }
18048 if(WDA_MAX_STA < pWDA->wdaMaxSta)
18049 {
18050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18051 "Inconsistent STA entries in WDA");
18052 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018053 }
18054 if(NULL == pWDA->pVosContext)
18055 {
18056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18057 "%s: pVosContext is NULL",__func__);
18058 VOS_ASSERT(0);
18059 return ;
18060 }
18061 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053018062 if(NULL == pMac)
18063 {
18064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18065 "%s: pMac is NULL",__func__);
18066 VOS_ASSERT(0);
18067 return ;
18068 }
18069
Abhishek Singh0644e482014-10-06 18:38:23 +053018070 if (wlan_cfgGetInt(pMac,
18071 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
18072 eSIR_SUCCESS)
18073 {
18074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18075 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
18076 val = 0;
18077 }
18078
Jeff Johnson295189b2012-06-20 16:38:30 -070018079 /* walk through all STA entries and find out TX packet count */
18080 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
18081 {
Abhishek Singh0644e482014-10-06 18:38:23 +053018082 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018083#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018084 // We can only do BA on "hard" STAs.
18085 if (!(IS_HWSTA_IDX(curSta)))
18086 {
18087 continue;
18088 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018089#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018090 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
18091 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018092 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018093 tANI_U32 txPktCount = 0 ;
18094 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018095 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018096 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
18097 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070018098 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
18099 curSta, tid, &txPktCount)))
18100 {
18101#if 0
18102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18103 "************* %d:%d, %d ",curSta, txPktCount,
18104 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
18105#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053018106 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
18107 (currentOperChan <= SIR_11B_CHANNEL_END)))
18108 {
18109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18110 "%s: BTC disabled aggregation - dont start "
18111 "TX ADDBA req",__func__);
18112 }
18113 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018114 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018115 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053018116 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
18117 pWDA->wdaGlobalSystemRole) && txPktCount )
18118 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
18119 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070018120 {
18121 /* get prepare for sending message to HAL */
18122 //baCandidate[baCandidateCount].staIdx = curSta ;
18123 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
18124 newBaCandidate = WDA_ENABLE_BA ;
18125 }
18126 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
18127 }
18128 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018129 /* fill the entry for all the sta with given TID's */
18130 if(WDA_ENABLE_BA == newBaCandidate)
18131 {
18132 /* move to next BA candidate */
18133 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
18134 size += sizeof(WDI_TriggerBAReqCandidateType) ;
18135 baCandidateCount++ ;
18136 newBaCandidate = WDA_DISABLE_BA ;
18137 }
18138 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018139 /* prepare and send message to hal */
18140 if( 0 < baCandidateCount)
18141 {
18142 WDI_Status status = WDI_STATUS_SUCCESS ;
18143 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
18144 tWDA_ReqParams *pWdaParams =
18145 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018146 if(NULL == pWdaParams)
18147 {
18148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018150 VOS_ASSERT(0) ;
18151 return;
18152 }
18153 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
18154 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
18155 if(NULL == wdiTriggerBaReq)
18156 {
18157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018159 VOS_ASSERT(0) ;
18160 vos_mem_free(pWdaParams);
18161 return;
18162 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018163 do
18164 {
18165 WDI_TriggerBAReqinfoType *triggerBaInfo =
18166 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
18167 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
18168 /* TEMP_FIX: Need to see if WDI need check for assoc session for
18169 * for each request */
18170 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
18171 triggerBaInfo->ucBASessionID = 0;
18172 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
18173 } while(0) ;
18174 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
18175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018176 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018177 pWdaParams->pWdaContext = pWDA;
18178 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
18179 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053018180 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070018181 WDA_TriggerBaReqCallback, pWdaParams) ;
18182 if(IS_WDI_STATUS_FAILURE(status))
18183 {
18184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18185 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
18186 vos_mem_free(pWdaParams->wdaMsgParam) ;
18187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18188 vos_mem_free(pWdaParams) ;
18189 }
18190 }
18191 else
18192 {
18193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18194 "There is no TID for initiating BA");
18195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018196 if( VOS_STATUS_SUCCESS !=
18197 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18198 {
18199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18200 "BA Activity Timer Stop Failed ");
18201 return ;
18202 }
18203 if( VOS_STATUS_SUCCESS !=
18204 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18205 {
18206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18207 "BA Activity Timer Start Failed ");
18208 return;
18209 }
18210 return ;
18211}
Jeff Johnson295189b2012-06-20 16:38:30 -070018212/*
18213 * WDA common routine to create timer used by WDA.
18214 */
18215static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
18216{
Jeff Johnson295189b2012-06-20 16:38:30 -070018217 VOS_STATUS status = VOS_STATUS_SUCCESS ;
18218 tANI_U32 val = 0 ;
18219 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18220
18221 if(NULL == pMac)
18222 {
18223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018224 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018225 VOS_ASSERT(0);
18226 return VOS_STATUS_E_FAILURE;
18227 }
18228 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
18229 != eSIR_SUCCESS)
18230 {
18231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18232 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
18233 return VOS_STATUS_E_FAILURE;
18234 }
18235 val = SYS_MS_TO_TICKS(val) ;
18236
18237 /* BA activity check timer */
18238 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
18239 "BA Activity Check timer", WDA_TimerHandler,
18240 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
18241 if(status != TX_SUCCESS)
18242 {
18243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18244 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018245 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018246 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018247 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018248 /* Tx Complete Timeout timer */
18249 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
18250 "Tx Complete Check timer", WDA_TimerHandler,
18251 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018252 if(status != TX_SUCCESS)
18253 {
18254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18255 "Unable to create Tx Complete Timeout timer");
18256 /* Destroy timer of BA activity check timer */
18257 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18258 if(status != TX_SUCCESS)
18259 {
18260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18261 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018262 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018263 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018264 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018265 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018266
18267 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
18268
18269 /* Traffic Stats timer */
18270 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
18271 "Traffic Stats timer", WDA_TimerHandler,
18272 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
18273 if(status != TX_SUCCESS)
18274 {
18275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18276 "Unable to create traffic stats timer");
18277 /* Destroy timer of BA activity check timer */
18278 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18279 if(status != TX_SUCCESS)
18280 {
18281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18282 "Unable to Destroy BA activity timer");
18283 }
18284 /* Destroy timer of tx complete timer */
18285 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
18286 if(status != TX_SUCCESS)
18287 {
18288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18289 "Unable to Tx complete timer");
18290 }
18291 return VOS_STATUS_E_FAILURE ;
18292 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018293 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018294}
Jeff Johnson295189b2012-06-20 16:38:30 -070018295/*
18296 * WDA common routine to destroy timer used by WDA.
18297 */
18298static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
18299{
18300 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018301 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
18302 if(status != TX_SUCCESS)
18303 {
18304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18305 "Unable to Destroy Tx Complete Timeout timer");
18306 return eSIR_FAILURE ;
18307 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018308 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18309 if(status != TX_SUCCESS)
18310 {
18311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18312 "Unable to Destroy BA activity timer");
18313 return eSIR_FAILURE ;
18314 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018315 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
18316 if(status != TX_SUCCESS)
18317 {
18318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18319 "Unable to Destroy traffic stats timer");
18320 return eSIR_FAILURE ;
18321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018322 return eSIR_SUCCESS ;
18323}
Jeff Johnson295189b2012-06-20 16:38:30 -070018324/*
18325 * WDA timer handler.
18326 */
18327void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
18328{
18329 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
18330 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018331 /*
18332 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
18333 */
18334 wdaMsg.type = timerInfo ;
18335 wdaMsg.bodyptr = NULL;
18336 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070018337 /* post the message.. */
18338 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
18339 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
18340 {
18341 vosStatus = VOS_STATUS_E_BADMSG;
18342 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018343}
Jeff Johnson295189b2012-06-20 16:38:30 -070018344/*
18345 * WDA Tx Complete timeout Indication.
18346 */
18347void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
18348{
18349 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053018350 tpSirTxBdStatus txBdStatus = {0};
18351
Jeff Johnson295189b2012-06-20 16:38:30 -070018352 if( pWDA->pAckTxCbFunc )
18353 {
18354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018355 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053018356 /*Indicate failure*/
18357 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070018358 pWDA->pAckTxCbFunc = NULL;
18359 }
18360 else
18361 {
18362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018363 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070018364 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018365}
Jeff Johnson295189b2012-06-20 16:38:30 -070018366/*
18367 * WDA Set REG Domain to VOS NV
18368 */
Abhishek Singha306a442013-11-07 18:39:01 +053018369eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
18370 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070018371{
Abhishek Singha306a442013-11-07 18:39:01 +053018372 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070018373 {
18374 return eHAL_STATUS_INVALID_PARAMETER;
18375 }
18376 return eHAL_STATUS_SUCCESS;
18377}
Jeff Johnson295189b2012-06-20 16:38:30 -070018378
Jeff Johnson295189b2012-06-20 16:38:30 -070018379#ifdef FEATURE_WLAN_SCAN_PNO
18380/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018381 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018382 *
18383 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018384void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018385{
18386 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018387 tSirPNOScanReq *pPNOScanReqParams;
18388
Jeff Johnson295189b2012-06-20 16:38:30 -070018389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018390 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018391 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070018392 {
18393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018394 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018395 VOS_ASSERT(0) ;
18396 return ;
18397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018398
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018399 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
18400 if(pPNOScanReqParams->statusCallback)
18401 {
18402 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18403 (status == WDI_STATUS_SUCCESS) ?
18404 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
18405 }
18406
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018407 if (pPNOScanReqParams->enable == 1)
18408 {
18409 if (pPNOScanReqParams->aNetworks)
18410 vos_mem_free(pPNOScanReqParams->aNetworks);
18411 if (pPNOScanReqParams->p24GProbeTemplate)
18412 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18413 if (pPNOScanReqParams->p5GProbeTemplate)
18414 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18415 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18417 vos_mem_free(pWdaParams->wdaMsgParam);
18418 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018419
18420 return ;
18421}
Jeff Johnson295189b2012-06-20 16:38:30 -070018422/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018423 * FUNCTION: WDA_PNOScanReqCallback
18424 * Free memory.
18425 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
18426 */
18427void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018428{
Yue Ma7f44bbe2013-04-12 11:47:39 -070018429 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018430 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018431
18432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18433 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18434
18435 if(NULL == pWdaParams)
18436 {
18437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18438 "%s: pWdaParams received NULL", __func__);
18439 VOS_ASSERT(0);
18440 return;
18441 }
18442
18443 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18444 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018445 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
18446 if(pPNOScanReqParams->statusCallback)
18447 {
18448 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18449 VOS_STATUS_E_FAILURE);
18450 }
18451
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053018452 if (pPNOScanReqParams->enable == 1)
18453 {
18454 if (pPNOScanReqParams->aNetworks)
18455 vos_mem_free(pPNOScanReqParams->aNetworks);
18456 if (pPNOScanReqParams->p24GProbeTemplate)
18457 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18458 if (pPNOScanReqParams->p5GProbeTemplate)
18459 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18460 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18462 vos_mem_free(pWdaParams->wdaMsgParam);
18463 vos_mem_free(pWdaParams);
18464 }
18465
18466 return;
18467}
18468/*
18469 * FUNCTION: WDA_UpdateScanParamsRespCallback
18470 *
18471 */
18472void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
18473{
18474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018476 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018477 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070018478 {
18479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018480 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018481 VOS_ASSERT(0) ;
18482 return ;
18483 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018484
18485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18486 vos_mem_free(pWdaParams->wdaMsgParam);
18487 vos_mem_free(pWdaParams);
18488
Jeff Johnson295189b2012-06-20 16:38:30 -070018489 return ;
18490}
Jeff Johnson295189b2012-06-20 16:38:30 -070018491/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018492 * FUNCTION: WDA_UpdateScanParamsReqCallback
18493 * Free memory.
18494 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
18495 */
18496void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18497{
18498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18499
18500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18501 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18502
18503 if(NULL == pWdaParams)
18504 {
18505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18506 "%s: pWdaParams received NULL", __func__);
18507 VOS_ASSERT(0);
18508 return;
18509 }
18510
18511 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18512 {
18513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18514 vos_mem_free(pWdaParams->wdaMsgParam);
18515 vos_mem_free(pWdaParams);
18516 }
18517
18518 return;
18519}
18520/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018521 * FUNCTION: WDA_ProcessSetPreferredNetworkList
18522 * Request to WDI to set Preferred Network List.Offload
18523 */
18524VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
18525 tSirPNOScanReq *pPNOScanReqParams)
18526{
Jeff Johnson43971f52012-07-17 12:26:56 -070018527 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018528 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
18529 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
18530 tWDA_ReqParams *pWdaParams ;
18531 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018534 if(NULL == pwdiPNOScanReqInfo)
18535 {
18536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018538 VOS_ASSERT(0);
18539 return VOS_STATUS_E_NOMEM;
18540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018541 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18542 if(NULL == pWdaParams)
18543 {
18544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018546 VOS_ASSERT(0);
18547 vos_mem_free(pwdiPNOScanReqInfo);
18548 return VOS_STATUS_E_NOMEM;
18549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018550 //
18551 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
18552 //
18553 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
18554 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070018555 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
18556 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
18557 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018558 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
18559 {
18560 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
18561 &pPNOScanReqParams->aNetworks[i],
18562 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
18563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018564 /*Scan timer intervals*/
18565 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
18566 &pPNOScanReqParams->scanTimers,
18567 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070018568 /*Probe template for 2.4GHz band*/
18569 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
18570 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18571 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018572 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
18573 pPNOScanReqParams->p24GProbeTemplate,
18574 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070018575 /*Probe template for 5GHz band*/
18576 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
18577 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18578 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070018579 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
18580 pPNOScanReqParams->p5GProbeTemplate,
18581 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018582 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
18583 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018584
Jeff Johnson295189b2012-06-20 16:38:30 -070018585 /* Store Params pass it to WDI */
18586 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
18587 pWdaParams->pWdaContext = pWDA;
18588 /* Store param pointer as passed in by caller */
18589 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018590 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018591 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018592 if(IS_WDI_STATUS_FAILURE(status))
18593 {
18594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18595 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053018596 if(pPNOScanReqParams->statusCallback)
18597 {
18598 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
18599 VOS_STATUS_E_FAILURE);
18600 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018601 if (pPNOScanReqParams->enable == 1)
18602 {
18603 if (pPNOScanReqParams->aNetworks)
18604 vos_mem_free(pPNOScanReqParams->aNetworks);
18605 if (pPNOScanReqParams->p24GProbeTemplate)
18606 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
18607 if (pPNOScanReqParams->p5GProbeTemplate)
18608 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
18609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18611 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053018612
Jeff Johnson295189b2012-06-20 16:38:30 -070018613 pWdaParams->wdaWdiApiMsgParam = NULL;
18614 pWdaParams->wdaMsgParam = NULL;
18615 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018616 return CONVERT_WDI2VOS_STATUS(status) ;
18617}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018618
18619#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18620
18621void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
18622{
18623 /*Convert the CSR Auth types to WDI Auth types */
18624 switch (csrAuthType)
18625 {
18626 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
18627 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18628 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018629#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018630 case eCSR_AUTH_TYPE_CCKM_WPA:
18631 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
18632 break;
18633#endif
18634 case eCSR_AUTH_TYPE_WPA:
18635 *AuthType = eWDA_AUTH_TYPE_WPA;
18636 break;
18637 case eCSR_AUTH_TYPE_WPA_PSK:
18638 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
18639 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018640#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018641 case eCSR_AUTH_TYPE_CCKM_RSN:
18642 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
18643 break;
18644#endif
18645 case eCSR_AUTH_TYPE_RSN:
18646 *AuthType = eWDA_AUTH_TYPE_RSN;
18647 break;
18648 case eCSR_AUTH_TYPE_RSN_PSK:
18649 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
18650 break;
18651#if defined WLAN_FEATURE_VOWIFI_11R
18652 case eCSR_AUTH_TYPE_FT_RSN:
18653 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
18654 break;
18655 case eCSR_AUTH_TYPE_FT_RSN_PSK:
18656 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
18657 break;
18658#endif
18659#ifdef FEATURE_WLAN_WAPI
18660 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
18661 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
18662 break;
18663 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
18664 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
18665 break;
18666#endif /* FEATURE_WLAN_WAPI */
18667 case eCSR_AUTH_TYPE_SHARED_KEY:
18668 case eCSR_AUTH_TYPE_AUTOSWITCH:
18669 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
18670 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018671#ifdef WLAN_FEATURE_11W
18672 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
18673 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018674 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053018675 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
18676 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
18677 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018678#endif
18679 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053018680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018681 "%s: Unknown Auth Type", __func__);
18682 break;
18683 }
18684}
18685void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
18686{
18687 switch (csrEncrType)
18688 {
18689 case eCSR_ENCRYPT_TYPE_NONE:
18690 *EncrType = WDI_ED_NONE;
18691 break;
18692 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
18693 case eCSR_ENCRYPT_TYPE_WEP40:
18694 *EncrType = WDI_ED_WEP40;
18695 break;
18696 case eCSR_ENCRYPT_TYPE_WEP104:
18697 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
18698 *EncrType = WDI_ED_WEP104;
18699 break;
18700 case eCSR_ENCRYPT_TYPE_TKIP:
18701 *EncrType = WDI_ED_TKIP;
18702 break;
18703 case eCSR_ENCRYPT_TYPE_AES:
18704 *EncrType = WDI_ED_CCMP;
18705 break;
18706#ifdef WLAN_FEATURE_11W
18707 case eCSR_ENCRYPT_TYPE_AES_CMAC:
18708 *EncrType = WDI_ED_AES_128_CMAC;
18709 break;
18710#endif
18711#ifdef FEATURE_WLAN_WAPI
18712 case eCSR_ENCRYPT_TYPE_WPI:
18713 *EncrType = WDI_ED_WPI;
18714 break;
18715#endif
18716 case eCSR_ENCRYPT_TYPE_ANY:
18717 *EncrType = WDI_ED_ANY;
18718 break;
18719
18720 default:
18721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18722 "%s: Unknown Encryption Type", __func__);
18723 break;
18724 }
18725}
18726
Kapil Gupta04ab1992016-06-26 13:36:51 +053018727#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18728VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
18729 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
18730{
18731 WDI_Status status;
18732 tWDA_ReqParams *pWdaParams ;
18733 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
18734
18735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18736 "------> %s " ,__func__);
18737
18738 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
18739 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
18740 if (NULL == pwdiPERRoamOffloadScanInfo) {
18741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18742 "%s: VOS MEM Alloc Failure", __func__);
18743 VOS_ASSERT(0);
18744 return VOS_STATUS_E_NOMEM;
18745 }
18746
18747 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18748 if (NULL == pWdaParams) {
18749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18750 "%s: VOS MEM Alloc Failure", __func__);
18751 VOS_ASSERT(0);
18752 vos_mem_free(pwdiPERRoamOffloadScanInfo);
18753 return VOS_STATUS_E_NOMEM;
18754 }
18755
18756 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
18757 pPERRoamOffloadScanReqParams->rateUpThreshold;
18758 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
18759 pPERRoamOffloadScanReqParams->rateDownThreshold;
18760 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
18761 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
18762 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
18763 pPERRoamOffloadScanReqParams->PERtimerThreshold;
18764 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
18765 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053018766 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
18767 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053018768 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
18769 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
18770
18771 /* Store Params pass it to WDI */
18772 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
18773 pWdaParams->pWdaContext = pWDA;
18774
18775 /* Store param pointer as passed in by caller */
18776 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
18777 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
18778 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
18779 pWdaParams);
18780
18781 if(IS_WDI_STATUS_FAILURE(status)) {
18782 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18783 "Failure in Send config PER roam params");
18784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18785 vos_mem_free(pWdaParams->wdaMsgParam);
18786 vos_mem_free(pWdaParams);
18787 }
18788 return CONVERT_WDI2VOS_STATUS(status) ;
18789}
18790#endif
18791
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018792/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018793 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018794 * Request to WDI to set Roam Offload Scan
18795 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018796VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018797 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
18798{
18799 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018800 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18801 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018802 tWDA_ReqParams *pWdaParams ;
18803 v_U8_t csrAuthType;
18804 WDI_RoamNetworkType *pwdiRoamNetworkType;
18805 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18807 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018808 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018809 {
18810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18811 "%s: VOS MEM Alloc Failure", __func__);
18812 VOS_ASSERT(0);
18813 return VOS_STATUS_E_NOMEM;
18814 }
18815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18816 if (NULL == pWdaParams)
18817 {
18818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18819 "%s: VOS MEM Alloc Failure", __func__);
18820 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018821 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018822 return VOS_STATUS_E_NOMEM;
18823 }
18824
18825 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018826 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018827 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018828 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18829 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018830 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18831 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18832 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18833 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18834 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18835 sizeof(pwdiRoamNetworkType->currAPbssid));
18836 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18837 csrAuthType);
18838 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18839 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18840 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18841 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18842 pwdiRoamOffloadScanInfo->LookupThreshold =
18843 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018844 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18845 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018846 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18847 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018848 pwdiRoamOffloadScanInfo->MAWCEnabled =
18849 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018850 pwdiRoamOffloadScanInfo->Command =
18851 pRoamOffloadScanReqParams->Command ;
18852 pwdiRoamOffloadScanInfo->StartScanReason =
18853 pRoamOffloadScanReqParams->StartScanReason ;
18854 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18855 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18856 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18857 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18858 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18859 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18860 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18861 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18862 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18863 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018864 pwdiRoamOffloadScanInfo->IsESEEnabled =
18865 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018866 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18867 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18868 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18869 pwdiRoamNetworkType->ssId.ucLength =
18870 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18871 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18872 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18873 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18874 pwdiRoamNetworkType->ChannelCount =
18875 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18876 pwdiRoamOffloadScanInfo->ChannelCacheType =
18877 pRoamOffloadScanReqParams->ChannelCacheType;
18878 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18879 pRoamOffloadScanReqParams->ValidChannelList,
18880 pRoamOffloadScanReqParams->ValidChannelCount);
18881 pwdiRoamOffloadScanInfo->ValidChannelCount =
18882 pRoamOffloadScanReqParams->ValidChannelCount;
18883 pwdiRoamOffloadScanInfo->us24GProbeSize =
18884 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18885 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18886 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18887 pRoamOffloadScanReqParams->p24GProbeTemplate,
18888 pwdiRoamOffloadScanInfo->us24GProbeSize);
18889 pwdiRoamOffloadScanInfo->us5GProbeSize =
18890 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18891 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18892 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18893 pRoamOffloadScanReqParams->p5GProbeTemplate,
18894 pwdiRoamOffloadScanInfo->us5GProbeSize);
18895 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18896 pRoamOffloadScanReqParams->MDID.mdiePresent;
18897 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18898 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018899 pwdiRoamOffloadScanInfo->nProbes =
18900 pRoamOffloadScanReqParams->nProbes;
18901 pwdiRoamOffloadScanInfo->HomeAwayTime =
18902 pRoamOffloadScanReqParams->HomeAwayTime;
18903 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018904 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018905 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018906 pWdaParams->pWdaContext = pWDA;
18907 /* Store param pointer as passed in by caller */
18908 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018909 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018910 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18911 if(IS_WDI_STATUS_FAILURE(status))
18912 {
18913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18914 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18916 vos_mem_free(pWdaParams->wdaMsgParam);
18917 pWdaParams->wdaWdiApiMsgParam = NULL;
18918 pWdaParams->wdaMsgParam = NULL;
18919 }
18920 return CONVERT_WDI2VOS_STATUS(status) ;
18921}
18922#endif
18923
Jeff Johnson295189b2012-06-20 16:38:30 -070018924/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018925 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018926 *
18927 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018928void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018929{
18930 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18931
18932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018933 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018934
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018935 if(NULL == pWdaParams)
18936 {
18937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018938 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018939 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018940 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018941 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018942
Jeff Johnson295189b2012-06-20 16:38:30 -070018943 vos_mem_free(pWdaParams->wdaMsgParam) ;
18944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18945 vos_mem_free(pWdaParams) ;
18946
18947 return ;
18948}
18949/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018950 * FUNCTION: WDA_RssiFilterReqCallback
18951 * Free memory.
18952 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18953 */
18954void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18955{
18956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18957
18958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18959 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18960
18961 if(NULL == pWdaParams)
18962 {
18963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18964 "%s: pWdaParams received NULL", __func__);
18965 VOS_ASSERT(0);
18966 return;
18967 }
18968
18969 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18970 {
18971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18972 vos_mem_free(pWdaParams->wdaMsgParam);
18973 vos_mem_free(pWdaParams);
18974 }
18975
18976 return;
18977}
18978/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018979 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018980 * Request to WDI to set Preferred Network List.Offload
18981 */
18982VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18983 tSirSetRSSIFilterReq* pRssiFilterParams)
18984{
Jeff Johnson43971f52012-07-17 12:26:56 -070018985 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018986 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18987 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18988 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018990 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018991 if(NULL == pwdiSetRssiFilterReqInfo)
18992 {
18993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018995 VOS_ASSERT(0);
18996 return VOS_STATUS_E_NOMEM;
18997 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018998 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18999 if(NULL == pWdaParams)
19000 {
19001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019003 VOS_ASSERT(0);
19004 vos_mem_free(pwdiSetRssiFilterReqInfo);
19005 return VOS_STATUS_E_NOMEM;
19006 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019007 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019008 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
19009 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019010
Jeff Johnson295189b2012-06-20 16:38:30 -070019011 /* Store Params pass it to WDI */
19012 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
19013 pWdaParams->pWdaContext = pWDA;
19014 /* Store param pointer as passed in by caller */
19015 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019016 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019017 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019018 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019019 if(IS_WDI_STATUS_FAILURE(status))
19020 {
19021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19022 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
19023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19024 vos_mem_free(pWdaParams->wdaMsgParam);
19025 pWdaParams->wdaWdiApiMsgParam = NULL;
19026 pWdaParams->wdaMsgParam = NULL;
19027 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019028 return CONVERT_WDI2VOS_STATUS(status) ;
19029}
19030
Jeff Johnson295189b2012-06-20 16:38:30 -070019031/*
19032 * FUNCTION: WDA_ProcessUpdateScanParams
19033 * Request to WDI to update Scan Parameters
19034 */
19035VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
19036 tSirUpdateScanParams *pUpdateScanParams)
19037{
Jeff Johnson43971f52012-07-17 12:26:56 -070019038 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019039 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
19040 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
19041 sizeof(WDI_UpdateScanParamsInfoType)) ;
19042 tWDA_ReqParams *pWdaParams ;
19043 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019045 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019046 if(NULL == wdiUpdateScanParamsInfoType)
19047 {
19048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019050 VOS_ASSERT(0);
19051 return VOS_STATUS_E_NOMEM;
19052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19054 if ( NULL == pWdaParams )
19055 {
19056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019058 VOS_ASSERT(0);
19059 vos_mem_free(wdiUpdateScanParamsInfoType);
19060 return VOS_STATUS_E_NOMEM;
19061 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019062 //
19063 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
19064 //
Jeff Johnson295189b2012-06-20 16:38:30 -070019065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19066 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
19067 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
19068 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080019069 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070019070 pUpdateScanParams->b11dEnabled,
19071 pUpdateScanParams->b11dResolved,
19072 pUpdateScanParams->ucChannelCount,
19073 pUpdateScanParams->usPassiveMinChTime,
19074 pUpdateScanParams->usPassiveMaxChTime,
19075 pUpdateScanParams->usActiveMinChTime,
19076 pUpdateScanParams->usActiveMaxChTime,
19077 sizeof(tSirUpdateScanParams),
19078 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
19079
Jeff Johnson295189b2012-06-20 16:38:30 -070019080 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
19081 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070019082 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
19083 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070019084 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
19085 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070019086 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
19087 pUpdateScanParams->usActiveMaxChTime;
19088 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
19089 pUpdateScanParams->usActiveMinChTime;
19090 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
19091 pUpdateScanParams->usPassiveMaxChTime;
19092 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
19093 pUpdateScanParams->usPassiveMinChTime;
19094
Jeff Johnson295189b2012-06-20 16:38:30 -070019095 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053019096 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
19097 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070019098
Jeff Johnson295189b2012-06-20 16:38:30 -070019099 for ( i = 0; i <
19100 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
19101 i++)
19102 {
19103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19104 "Update Scan Parameters channel: %d",
19105 pUpdateScanParams->aChannels[i]);
19106
19107 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
19108 pUpdateScanParams->aChannels[i];
19109 }
19110
Yue Ma7f44bbe2013-04-12 11:47:39 -070019111 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
19112 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019113
Jeff Johnson295189b2012-06-20 16:38:30 -070019114 /* Store Params pass it to WDI */
19115 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
19116 pWdaParams->pWdaContext = pWDA;
19117 /* Store param pointer as passed in by caller */
19118 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070019119
Jeff Johnson295189b2012-06-20 16:38:30 -070019120
19121
19122 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019123 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019124 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019125 if(IS_WDI_STATUS_FAILURE(status))
19126 {
19127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19128 "Failure in Update Scan Params EQ WDI API, free all the memory " );
19129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19130 vos_mem_free(pWdaParams->wdaMsgParam);
19131 vos_mem_free(pWdaParams);
19132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019133 return CONVERT_WDI2VOS_STATUS(status) ;
19134}
19135#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019136
19137#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19138/*
19139 * FUNCTION: WDA_RoamOffloadScanReqCallback
19140 *
19141 */
19142void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19143{
19144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019145 vos_msg_t vosMsg;
19146 wpt_uint8 reason = 0;
19147
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070019148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019149 "<------ %s " ,__func__);
19150 if (NULL == pWdaParams)
19151 {
19152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19153 "%s: pWdaParams received NULL", __func__);
19154 VOS_ASSERT(0) ;
19155 return ;
19156 }
19157 if ( pWdaParams != NULL )
19158 {
19159 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
19160 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019161 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19163 }
19164 if ( pWdaParams->wdaMsgParam != NULL)
19165 {
19166 vos_mem_free(pWdaParams->wdaMsgParam);
19167 }
19168
19169 vos_mem_free(pWdaParams) ;
19170 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019171 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19172 vosMsg.bodyptr = NULL;
19173 if (WDI_STATUS_SUCCESS != status)
19174 {
19175 reason = 0;
19176 }
19177 vosMsg.bodyval = reason;
19178 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19179 {
19180 /* free the mem and return */
19181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070019182 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019183 }
19184
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019185 return ;
19186}
Kapil Gupta04ab1992016-06-26 13:36:51 +053019187
19188void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
19189{
19190 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19191 vos_msg_t vosMsg;
19192 wpt_uint8 reason = 0;
19193
19194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19195 "<------ %s " ,__func__);
19196 if (NULL == pWdaParams) {
19197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19198 "%s: pWdaParams received NULL", __func__);
19199 VOS_ASSERT(0) ;
19200 return ;
19201 }
19202 if ( pWdaParams->wdaMsgParam != NULL)
19203 vos_mem_free(pWdaParams->wdaMsgParam);
19204
19205 vos_mem_free(pWdaParams) ;
19206 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
19207 vosMsg.bodyptr = NULL;
19208 if (WDI_STATUS_SUCCESS != status)
19209 reason = 0;
19210
19211 vosMsg.bodyval = reason;
19212 if (VOS_STATUS_SUCCESS !=
19213 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19214 /* free the mem and return */
19215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19216 "%s: Failed to post the rsp to UMAC", __func__);
19217 }
19218
19219 return ;
19220}
19221
19222
19223void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19224{
19225 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19226 vos_msg_t vosMsg;
19227 wpt_uint8 reason = 0;
19228
19229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19230 "<------ %s " ,__func__);
19231 if (NULL == pWdaParams) {
19232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19233 "%s: pWdaParams received NULL", __func__);
19234 VOS_ASSERT(0) ;
19235 return ;
19236 }
19237 if ( pWdaParams->wdaMsgParam != NULL)
19238 vos_mem_free(pWdaParams->wdaMsgParam);
19239
19240 vos_mem_free(pWdaParams) ;
19241 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19242 vosMsg.bodyptr = NULL;
19243 if (WDI_STATUS_SUCCESS != status)
19244 reason = 0;
19245
19246 vosMsg.bodyval = reason;
19247 if (VOS_STATUS_SUCCESS !=
19248 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19249 /* free the mem and return */
19250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19251 "%s: Failed to post the rsp to UMAC", __func__);
19252 }
19253
19254 return ;
19255}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019256#endif
19257
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019258/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019259 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019260 *
19261 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019262void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019263{
19264 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19265
19266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19267 "<------ %s " ,__func__);
19268
19269 if(NULL == pWdaParams)
19270 {
19271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19272 "%s: pWdaParams received NULL", __func__);
19273 VOS_ASSERT(0);
19274 return;
19275 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019276
19277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19278 vos_mem_free(pWdaParams->wdaMsgParam);
19279 vos_mem_free(pWdaParams);
19280
19281 return;
19282}
19283/*
19284 * FUNCTION: WDA_SetPowerParamsReqCallback
19285 * Free memory.
19286 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
19287 */
19288void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19289{
19290 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19291
19292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19293 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19294
19295 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019296 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070019297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19298 "%s: pWdaParams received NULL", __func__);
19299 VOS_ASSERT(0);
19300 return;
19301 }
19302
19303 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19304 {
19305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19306 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019307 vos_mem_free(pWdaParams);
19308 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019309
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019310 return;
19311}
19312
Jeff Johnson295189b2012-06-20 16:38:30 -070019313#ifdef WLAN_FEATURE_PACKET_FILTERING
19314/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019315 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019316 *
19317 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019318void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019319 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
19320 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019321{
19322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019325 if(NULL == pWdaParams)
19326 {
19327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019328 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019329 VOS_ASSERT(0) ;
19330 return ;
19331 }
19332
19333 vos_mem_free(pWdaParams->wdaMsgParam) ;
19334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19335 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019336 //print a msg, nothing else to do
19337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019338 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019339 return ;
19340}
Jeff Johnson295189b2012-06-20 16:38:30 -070019341/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019342 * FUNCTION: WDA_8023MulticastListReqCallback
19343 * Free memory.
19344 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
19345 */
19346void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
19347{
19348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19349
19350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19351 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19352
19353 if(NULL == pWdaParams)
19354 {
19355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19356 "%s: pWdaParams received NULL", __func__);
19357 VOS_ASSERT(0);
19358 return;
19359 }
19360
19361 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19362 {
19363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19364 vos_mem_free(pWdaParams->wdaMsgParam);
19365 vos_mem_free(pWdaParams);
19366 }
19367
19368 return;
19369}
19370/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019371 * FUNCTION: WDA_Process8023MulticastListReq
19372 * Request to WDI to add 8023 Multicast List
19373 */
19374VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
19375 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
19376{
Jeff Johnson43971f52012-07-17 12:26:56 -070019377 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019378 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
19379 tWDA_ReqParams *pWdaParams ;
19380 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019383 pwdiFltPktSetMcListReqParamsType =
19384 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
19385 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
19386 ) ;
19387 if(NULL == pwdiFltPktSetMcListReqParamsType)
19388 {
19389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019391 return VOS_STATUS_E_NOMEM;
19392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019393 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19394 if(NULL == pWdaParams)
19395 {
19396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019398 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
19399 return VOS_STATUS_E_NOMEM;
19400 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019401
Jeff Johnson295189b2012-06-20 16:38:30 -070019402 //
19403 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
19404 //
19405 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070019406 pRcvFltMcAddrList->ulMulticastAddrCnt;
19407
19408 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
19409 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
19410 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
19411 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
19412
Jeff Johnson295189b2012-06-20 16:38:30 -070019413 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
19414 {
19415 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
19416 &(pRcvFltMcAddrList->multicastAddr[i]),
19417 sizeof(tSirMacAddr));
19418 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019419 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
19420 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019421
Jeff Johnson295189b2012-06-20 16:38:30 -070019422 /* Store Params pass it to WDI */
19423 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
19424 pWdaParams->pWdaContext = pWDA;
19425 /* Store param pointer as passed in by caller */
19426 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070019427 status = WDI_8023MulticastListReq(
19428 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019429 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019430 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019431 if(IS_WDI_STATUS_FAILURE(status))
19432 {
19433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19434 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
19435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19436 vos_mem_free(pWdaParams->wdaMsgParam);
19437 vos_mem_free(pWdaParams);
19438 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019439 return CONVERT_WDI2VOS_STATUS(status) ;
19440}
Jeff Johnson295189b2012-06-20 16:38:30 -070019441/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019442 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019443 *
19444 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019445void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019446 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
19447 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019448{
19449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019451 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019452 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070019453 if(NULL == pWdaParams)
19454 {
19455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019456 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019457 VOS_ASSERT(0) ;
19458 return ;
19459 }
19460
19461 vos_mem_free(pWdaParams->wdaMsgParam) ;
19462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19463 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019464 //print a msg, nothing else to do
19465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019466 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019467 return ;
19468}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019469
19470/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019471 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
19472 * Free memory.
19473 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019474 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019475void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019476 void* pUserData)
19477{
19478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19479
19480 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19481 "<------ %s, wdiStatus: %d",
19482 __func__, wdiStatus);
19483
19484 if (NULL == pWdaParams)
19485 {
19486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19487 "%s: Invalid pWdaParams pointer", __func__);
19488 VOS_ASSERT(0);
19489 return;
19490 }
19491
19492 if (IS_WDI_STATUS_FAILURE(wdiStatus))
19493 {
19494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19495 vos_mem_free(pWdaParams->wdaMsgParam);
19496 vos_mem_free(pWdaParams);
19497 }
19498
19499 return;
19500}
19501
Jeff Johnson295189b2012-06-20 16:38:30 -070019502/*
19503 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
19504 * Request to WDI to set Receive Filters
19505 */
19506VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
19507 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
19508{
Jeff Johnson43971f52012-07-17 12:26:56 -070019509 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019510 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
19511 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
19512 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
19513 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
19514 tWDA_ReqParams *pWdaParams ;
19515 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019517 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019518 if(NULL == pwdiSetRcvPktFilterReqParamsType)
19519 {
19520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019522 VOS_ASSERT(0);
19523 return VOS_STATUS_E_NOMEM;
19524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19526 if(NULL == pWdaParams)
19527 {
19528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019530 VOS_ASSERT(0);
19531 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
19532 return VOS_STATUS_E_NOMEM;
19533 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019534 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
19535 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
19536 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
19537 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070019538 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
19539 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
19540
19541 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
19542 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019543
19544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19545 "FID %d FT %d NParams %d CT %d",
19546 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
19547 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
19548 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
19549 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070019550 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
19551 {
19552 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
19553 &pRcvPktFilterCfg->paramsData[i],
19554 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070019555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019556 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019557 pwdiSetRcvPktFilterReqParamsType->
19558 wdiPktFilterCfg.paramsData[i].protocolLayer,
19559 pwdiSetRcvPktFilterReqParamsType->
19560 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070019561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019562 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019563 pwdiSetRcvPktFilterReqParamsType->
19564 wdiPktFilterCfg.paramsData[i].dataOffset,
19565 pwdiSetRcvPktFilterReqParamsType->
19566 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070019567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019568 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019569 pwdiSetRcvPktFilterReqParamsType->
19570 wdiPktFilterCfg.paramsData[i].compareData[0],
19571 pwdiSetRcvPktFilterReqParamsType->
19572 wdiPktFilterCfg.paramsData[i].compareData[1],
19573 pwdiSetRcvPktFilterReqParamsType->
19574 wdiPktFilterCfg.paramsData[i].compareData[2],
19575 pwdiSetRcvPktFilterReqParamsType->
19576 wdiPktFilterCfg.paramsData[i].compareData[3],
19577 pwdiSetRcvPktFilterReqParamsType->
19578 wdiPktFilterCfg.paramsData[i].compareData[4],
19579 pwdiSetRcvPktFilterReqParamsType->
19580 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019582 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070019583 pwdiSetRcvPktFilterReqParamsType->
19584 wdiPktFilterCfg.paramsData[i].dataMask[0],
19585 pwdiSetRcvPktFilterReqParamsType->
19586 wdiPktFilterCfg.paramsData[i].dataMask[1],
19587 pwdiSetRcvPktFilterReqParamsType->
19588 wdiPktFilterCfg.paramsData[i].dataMask[2],
19589 pwdiSetRcvPktFilterReqParamsType->
19590 wdiPktFilterCfg.paramsData[i].dataMask[3],
19591 pwdiSetRcvPktFilterReqParamsType->
19592 wdiPktFilterCfg.paramsData[i].dataMask[4],
19593 pwdiSetRcvPktFilterReqParamsType->
19594 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070019595 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019596 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019597 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019598 /* Store Params pass it to WDI */
19599 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
19600 pWdaParams->pWdaContext = pWDA;
19601 /* Store param pointer as passed in by caller */
19602 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070019603 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019604 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019605 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019606 if(IS_WDI_STATUS_FAILURE(status))
19607 {
19608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19609 "Failure in SetFilter(),free all the memory,status %d ",status);
19610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19611 vos_mem_free(pWdaParams->wdaMsgParam);
19612 vos_mem_free(pWdaParams);
19613 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019614 return CONVERT_WDI2VOS_STATUS(status) ;
19615}
Jeff Johnson295189b2012-06-20 16:38:30 -070019616/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019617 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019618 *
19619 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019620void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019621 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
19622 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019623{
19624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19625 tWDA_CbContext *pWDA;
19626 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
19627 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
19628 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
19629 tANI_U8 i;
19630 vos_msg_t vosMsg;
19631
19632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019633 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019634 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
19635
Jeff Johnsone7245742012-09-05 17:12:55 -070019636 if(NULL == pRcvFltPktMatchCntRsp)
19637 {
19638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019639 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070019640 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019641 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070019642 return ;
19643 }
19644
Jeff Johnson295189b2012-06-20 16:38:30 -070019645 if(NULL == pWdaParams)
19646 {
19647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019648 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019649 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019650 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070019651 return ;
19652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019653 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
19654 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019655 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
19656 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
19657
19658 /* Message Header */
19659 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19660 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
19661
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019662 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070019663
19664 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
19665 {
19666 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
19667 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
19668 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019669 /* VOS message wrapper */
19670 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19671 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
19672 vosMsg.bodyval = 0;
19673 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19674 {
19675 /* free the mem and return */
19676 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
19677 }
19678
19679 vos_mem_free(pWdaParams->wdaMsgParam) ;
19680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19681 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019682
19683 return;
19684}
19685/*
19686 * FUNCTION: WDA_FilterMatchCountReqCallback
19687 * Free memory and send RSP back to SME.
19688 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
19689 */
19690void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
19691{
19692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19693 vos_msg_t vosMsg;
19694
19695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19696 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19697
19698 if(NULL == pWdaParams)
19699 {
19700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19701 "%s: pWdaParams received NULL", __func__);
19702 VOS_ASSERT(0);
19703 return;
19704 }
19705
19706 /* VOS message wrapper */
19707 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
19708 vosMsg.bodyptr = NULL;
19709 vosMsg.bodyval = 0;
19710
19711 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19712 {
19713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19714 vos_mem_free(pWdaParams->wdaMsgParam);
19715 vos_mem_free(pWdaParams);
19716 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
19717 }
19718
19719 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070019720}
Jeff Johnson295189b2012-06-20 16:38:30 -070019721/*
19722 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
19723 * Request to WDI to get PC Filter Match Count
19724 */
19725VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
19726{
Jeff Johnson43971f52012-07-17 12:26:56 -070019727 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019728 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
19729 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
19730 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019732 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019733 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
19734 {
19735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019736 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019737 VOS_ASSERT(0);
19738 return VOS_STATUS_E_NOMEM;
19739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019740 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19741 if(NULL == pWdaParams)
19742 {
19743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019744 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019745 VOS_ASSERT(0);
19746 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
19747 return VOS_STATUS_E_NOMEM;
19748 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019749
Yue Ma7f44bbe2013-04-12 11:47:39 -070019750 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
19751 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019752
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019753 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
19754 pRcvFltPktMatchRsp->bssId,
19755 sizeof(wpt_macAddr));
19756
Jeff Johnson295189b2012-06-20 16:38:30 -070019757 /* Store Params pass it to WDI */
19758 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
19759 pWdaParams->pWdaContext = pWDA;
19760 /* Store param pointer as passed in by caller */
19761 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070019762 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019763 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019764 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019765 if(IS_WDI_STATUS_FAILURE(status))
19766 {
19767 /* failure returned by WDI API */
19768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19769 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
19770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19771 vos_mem_free(pWdaParams) ;
19772 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
19773 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
19774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019775 return CONVERT_WDI2VOS_STATUS(status) ;
19776}
Jeff Johnson295189b2012-06-20 16:38:30 -070019777/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019778 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019779 *
19780 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019781void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070019782 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
19783 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019784{
19785 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019786 tSirRcvFltPktClearParam *pktClearParam;
19787
Jeff Johnson295189b2012-06-20 16:38:30 -070019788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019789 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019790/* WDA_VOS_ASSERT(NULL != pWdaParams); */
19791 if(NULL == pWdaParams)
19792 {
19793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019794 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019795 VOS_ASSERT(0) ;
19796 return ;
19797 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019798
19799 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
19800 if(pktClearParam->pktFilterCallback)
19801 {
19802 pktClearParam->pktFilterCallback(
19803 pktClearParam->cbCtx,
19804 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
19805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019806 vos_mem_free(pWdaParams->wdaMsgParam) ;
19807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19808 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019809 //print a msg, nothing else to do
19810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019811 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070019812 return ;
19813}
Jeff Johnson295189b2012-06-20 16:38:30 -070019814/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019815 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
19816 * Free memory.
19817 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
19818 */
19819void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19820{
19821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019822 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019823
19824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19825 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19826
19827 if(NULL == pWdaParams)
19828 {
19829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19830 "%s: Invalid pWdaParams pointer", __func__);
19831 VOS_ASSERT(0);
19832 return;
19833 }
19834
19835 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19836 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019837 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
19838 if(pktClearParam->pktFilterCallback)
19839 {
19840 pktClearParam->pktFilterCallback(
19841 pktClearParam->cbCtx,
19842 CONVERT_WDI2SIR_STATUS(wdiStatus));
19843 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019844 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19845 vos_mem_free(pWdaParams->wdaMsgParam);
19846 vos_mem_free(pWdaParams);
19847 }
19848
19849 return;
19850}
19851/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019852 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
19853 * Request to WDI to clear Receive Filters
19854 */
19855VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
19856 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
19857{
Jeff Johnson43971f52012-07-17 12:26:56 -070019858 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019859 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
19860 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
19861 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019864 if(NULL == pwdiRcvFltPktClearReqParamsType)
19865 {
19866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019868 VOS_ASSERT(0);
19869 return VOS_STATUS_E_NOMEM;
19870 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19872 if(NULL == pWdaParams)
19873 {
19874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019876 VOS_ASSERT(0);
19877 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
19878 return VOS_STATUS_E_NOMEM;
19879 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019880 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
19881 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070019882 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
19883 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
19884 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
19885 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070019886
Yue Ma7f44bbe2013-04-12 11:47:39 -070019887 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019888 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019889 /* Store Params pass it to WDI */
19890 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19891 pWdaParams->pWdaContext = pWDA;
19892 /* Store param pointer as passed in by caller */
19893 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019894 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019895 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019896 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019897 if(IS_WDI_STATUS_FAILURE(status))
19898 {
19899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19900 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053019901 if(pRcvFltPktClearParam->pktFilterCallback)
19902 {
19903 pRcvFltPktClearParam->pktFilterCallback(
19904 pRcvFltPktClearParam->cbCtx,
19905 CONVERT_WDI2SIR_STATUS(status));
19906 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019908 vos_mem_free(pWdaParams->wdaMsgParam);
19909 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019910 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019911 return CONVERT_WDI2VOS_STATUS(status) ;
19912}
19913#endif // WLAN_FEATURE_PACKET_FILTERING
19914
Jeff Johnson295189b2012-06-20 16:38:30 -070019915/*
19916 * FUNCTION: WDA_ProcessSetPowerParamsReq
19917 * Request to WDI to set power params
19918 */
19919VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19920 tSirSetPowerParamsReq *pPowerParams)
19921{
Jeff Johnson43971f52012-07-17 12:26:56 -070019922 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019923 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19924 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019925 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019927 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019928 if(NULL == pwdiSetPowerParamsReqInfo)
19929 {
19930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019932 VOS_ASSERT(0);
19933 return VOS_STATUS_E_NOMEM;
19934 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19936 if(NULL == pWdaParams)
19937 {
19938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019940 VOS_ASSERT(0);
19941 vos_mem_free(pwdiSetPowerParamsReqInfo);
19942 return VOS_STATUS_E_NOMEM;
19943 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019944
Jeff Johnson295189b2012-06-20 16:38:30 -070019945
19946 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19947 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019948 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19949 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019950 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19951 pPowerParams->uListenInterval;
19952 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19953 pPowerParams->uBcastMcastFilter;
19954 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19955 pPowerParams->uEnableBET;
19956 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19957 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019958 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19959 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019960 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19961 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019962
Jeff Johnson295189b2012-06-20 16:38:30 -070019963 /* Store Params pass it to WDI */
19964 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19965 pWdaParams->pWdaContext = pWDA;
19966 /* Store param pointer as passed in by caller */
19967 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019968 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019969 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019970 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019971 if(IS_WDI_STATUS_FAILURE(status))
19972 {
19973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19974 "Failure in Set power params REQ WDI API, free all the memory " );
19975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19976 vos_mem_free(pWdaParams->wdaMsgParam);
19977 pWdaParams->wdaWdiApiMsgParam = NULL;
19978 pWdaParams->wdaMsgParam = NULL;
19979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019980 return CONVERT_WDI2VOS_STATUS(status) ;
19981}
19982
19983/*
19984 * FUNCTION: WDA_SetTmLevelRspCallback
19985 * Set TM Level response
19986 */
19987void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19988{
19989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19990
19991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019992 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019993
19994 if(NULL == pWdaParams)
19995 {
19996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019997 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019998 VOS_ASSERT(0) ;
19999 return ;
20000 }
20001
20002 /* Dose not need to send notification to upper layer
20003 * Just free allocated resources */
20004 if( pWdaParams != NULL )
20005 {
20006 if( pWdaParams->wdaWdiApiMsgParam != NULL )
20007 {
20008 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20009 }
20010 vos_mem_free(pWdaParams->wdaMsgParam) ;
20011 vos_mem_free(pWdaParams) ;
20012 }
20013}
20014
20015/*
20016 * FUNCTION: WDA_ProcessSetTmLevelReq
20017 * Set TM Level request
20018 */
20019VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
20020 tAniSetTmLevelReq *setTmLevelReq)
20021{
20022 WDI_Status status = WDI_STATUS_SUCCESS ;
20023 tWDA_ReqParams *pWdaParams ;
20024 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
20025 (WDI_SetTmLevelReqType *)vos_mem_malloc(
20026 sizeof(WDI_SetTmLevelReqType)) ;
20027 if(NULL == wdiSetTmLevelReq)
20028 {
20029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020031 VOS_ASSERT(0);
20032 return VOS_STATUS_E_NOMEM;
20033 }
20034
20035 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20036 if(NULL == pWdaParams)
20037 {
20038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020040 VOS_ASSERT(0);
20041 vos_mem_free(wdiSetTmLevelReq);
20042 return VOS_STATUS_E_NOMEM;
20043 }
20044
20045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020046 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020047
20048 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
20049 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
20050
20051 pWdaParams->pWdaContext = pWDA;
20052 pWdaParams->wdaMsgParam = setTmLevelReq;
20053 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
20054
20055 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
20056 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
20057
20058 if(IS_WDI_STATUS_FAILURE(status))
20059 {
20060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080020061 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070020062 vos_mem_free(pWdaParams->wdaMsgParam) ;
20063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20064 vos_mem_free(pWdaParams) ;
20065 }
20066
20067 return CONVERT_WDI2VOS_STATUS(status) ;
20068}
20069
20070VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
20071 tpTxControlParams pTxCtrlParam)
20072{
20073 VOS_STATUS wdaStatus;
20074
20075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020077 if( pTxCtrlParam == NULL )
20078 {
20079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020080 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020081 return VOS_STATUS_E_FAILURE;
20082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020083 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
20084 {
20085 wdaStatus = WDA_SuspendDataTx(pWDA);
20086 }
20087 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
20088 {
20089 wdaStatus = WDA_ResumeDataTx(pWDA);
20090 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020091 return wdaStatus;
20092}
20093
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020094void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053020095{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020096 WDI_Status status;
20097 status = WDI_FWLoggingDXEdoneInd(logType);
20098
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053020099 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020100 {
20101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20102 FL("Failure status %d"), status);
20103 }
Mihir Shete5affadc2015-05-29 20:54:57 +053020104}
20105
Jeff Johnson295189b2012-06-20 16:38:30 -070020106 /* FUNCTION WDA_featureCapsExchange
20107 * WDA API to invoke capability exchange between host and FW.
20108 */
20109void WDA_featureCapsExchange(v_PVOID_t pVosContext)
20110{
20111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020112 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020113 WDI_featureCapsExchangeReq( NULL, pVosContext);
20114}
20115
Yathish9f22e662012-12-10 14:21:35 -080020116/* FUNCTION WDA_disableCapablityFeature
20117 * WDA API to diable Active mode offload in host.
20118 */
20119void WDA_disableCapablityFeature(tANI_U8 feature_index)
20120{
20121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20122 "%s:enter", __func__ );
20123 WDI_disableCapablityFeature(feature_index);
20124}
20125
Jeff Johnson295189b2012-06-20 16:38:30 -070020126 /* FUNCTION WDA_getHostWlanFeatCaps
20127 * Wrapper for WDI API, that will return if the feature (enum value).passed
20128 * to this API is supported or not in Host
20129 * return value
20130 * 0 - implies feature is NOT Supported
20131 * any non zero value - implies feature is SUPPORTED
20132 */
20133tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
20134{
20135 return WDI_getHostWlanFeatCaps(featEnumValue);
20136}
20137
20138 /* FUNCTION WDA_getFwWlanFeatCaps
20139 * Wrapper for WDI API, that will return if the feature (enum value).passed
20140 * to this API is supported or not in FW
20141 * return value
20142 * 0 - implies feature is NOT Supported
20143 * any non zero value - implies feature is SUPPORTED
20144 */
20145tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
20146{
20147 return WDI_getFwWlanFeatCaps(featEnumValue);
20148}
20149
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053020150
Jeff Johnson295189b2012-06-20 16:38:30 -070020151/*
20152 * FUNCTION: WDA_shutdown
20153 * Shutdown WDA/WDI without handshaking with Riva.
20154 * Synchronous function.
20155 */
20156VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
20157{
20158 WDI_Status wdiStatus;
20159 //tANI_U8 eventIdx = 0;
20160 VOS_STATUS status = VOS_STATUS_SUCCESS;
20161 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070020162 if (NULL == pWDA)
20163 {
20164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020165 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020166 VOS_ASSERT(0);
20167 return VOS_STATUS_E_FAILURE;
20168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020169 /* FTM mode stay START_STATE */
20170 if( (WDA_READY_STATE != pWDA->wdaState) &&
20171 (WDA_INIT_STATE != pWDA->wdaState) &&
20172 (WDA_START_STATE != pWDA->wdaState) )
20173 {
20174 VOS_ASSERT(0);
20175 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020176
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020177 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070020178 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020179 if(VOS_TRUE == pWDA->wdaTimersCreated)
20180 {
20181 wdaDestroyTimers(pWDA);
20182 pWDA->wdaTimersCreated = VOS_FALSE;
20183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020184 }
Leo Chang9d76f622013-08-23 16:34:52 -070020185 else
20186 {
20187 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020188 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020189
Jeff Johnson295189b2012-06-20 16:38:30 -070020190 /* call WDI shutdown */
20191 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070020192 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
20193 {
20194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20195 "error in WDA Stop" );
20196 status = VOS_STATUS_E_FAILURE;
20197 }
20198 /* WDI stop is synchrnous, shutdown is complete when it returns */
20199 pWDA->wdaState = WDA_STOP_STATE;
20200
Jeff Johnson295189b2012-06-20 16:38:30 -070020201 /* shutdown should perform the stop & close actions. */
20202 /* Destroy the event */
20203 status = vos_event_destroy(&pWDA->txFrameEvent);
20204 if(!VOS_IS_STATUS_SUCCESS(status))
20205 {
20206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020207 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020208 status = VOS_STATUS_E_FAILURE;
20209 }
20210 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
20211 if(!VOS_IS_STATUS_SUCCESS(status))
20212 {
20213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020214 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020215 status = VOS_STATUS_E_FAILURE;
20216 }
20217 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
20218 if(!VOS_IS_STATUS_SUCCESS(status))
20219 {
20220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020221 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020222 status = VOS_STATUS_E_FAILURE;
20223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020224 /* free WDA context */
20225 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
20226 if ( !VOS_IS_STATUS_SUCCESS(status) )
20227 {
20228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20229 "error in WDA close " );
20230 status = VOS_STATUS_E_FAILURE;
20231 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020232 return status;
20233}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020234
Jeff Johnsone7245742012-09-05 17:12:55 -070020235/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020236 * FUNCTION: WDA_setNeedShutdown
20237 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070020238 */
20239
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020240void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070020241{
20242 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020243 if(pWDA == NULL)
20244 {
20245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20246 "Could not get the WDA Context pointer" );
20247 return;
20248 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020249 pWDA->needShutdown = TRUE;
20250}
20251/*
20252 * FUNCTION: WDA_needShutdown
20253 * WDA needs a shutdown
20254 */
20255
20256v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
20257{
20258 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020259 if(pWDA == NULL)
20260 {
20261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20262 "Could not get the WDA Context pointer" );
20263 return 0;
20264 }
20265 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070020266}
20267
Mohit Khanna4a70d262012-09-11 16:30:12 -070020268#ifdef WLAN_FEATURE_11AC
20269/*
20270 * FUNCTION: WDA_SetBeaconFilterReqCallback
20271 *
20272 */
20273void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
20274{
20275 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020277 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020278 if(NULL == pWdaParams)
20279 {
20280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020281 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020282 VOS_ASSERT(0) ;
20283 return ;
20284 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020285
Mohit Khanna4a70d262012-09-11 16:30:12 -070020286 vos_mem_free(pWdaParams->wdaMsgParam) ;
20287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20288 vos_mem_free(pWdaParams) ;
20289 /*
20290 * No respone required for SetBeaconFilter req so just free the request
20291 * param here
20292 */
20293
20294 return ;
20295}
20296
20297VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
20298 tUpdateVHTOpMode *pData)
20299{
20300 WDI_Status status = WDI_STATUS_SUCCESS ;
20301 tWDA_ReqParams *pWdaParams ;
20302 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
20303 sizeof(WDI_UpdateVHTOpMode)) ;
20304 if(NULL == wdiTemp)
20305 {
20306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020307 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020308 VOS_ASSERT(0);
20309 return VOS_STATUS_E_NOMEM;
20310 }
20311 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20312 if(NULL == pWdaParams)
20313 {
20314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020315 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020316 VOS_ASSERT(0);
20317 vos_mem_free(wdiTemp);
20318 return VOS_STATUS_E_NOMEM;
20319 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053020320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20321 "------> %s Opmode = %d and staid = %d" ,
20322 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070020323 wdiTemp->opMode = pData->opMode;
20324 wdiTemp->staId = pData->staId;
20325
20326 pWdaParams->pWdaContext = pWDA;
20327 /* Store Req pointer, as this will be used for response */
20328 pWdaParams->wdaMsgParam = (void *)pData;
20329 /* store Params pass it to WDI */
20330 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
20331
20332 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
20333
20334 if(IS_WDI_STATUS_FAILURE(status))
20335 {
20336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20337 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
20338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20339 vos_mem_free(pWdaParams->wdaMsgParam);
20340 vos_mem_free(pWdaParams);
20341 }
20342 return CONVERT_WDI2VOS_STATUS(status) ;
20343}
20344#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020345
20346/*==========================================================================
20347 FUNCTION WDA_TransportChannelDebug
20348
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070020349 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020350 Display Transport Channel debugging information
20351 User may request to display DXE channel snapshot
20352 Or if host driver detects any abnormal stcuk may display
20353
20354 PARAMETERS
schang6295e542013-03-12 15:31:23 -070020355 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080020356 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053020357 debugFlags : Enable stall detect features
20358 defined by WPAL_DeviceDebugFlags
20359 These features may effect
20360 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020361
20362 RETURN VALUE
20363 NONE
20364
20365===========================================================================*/
20366void WDA_TransportChannelDebug
20367(
schang6295e542013-03-12 15:31:23 -070020368 tpAniSirGlobal pMac,
20369 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053020370 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020371)
20372{
Mihir Shete40a55652014-03-02 14:14:47 +053020373 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070020374 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070020375}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070020376
20377/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053020378 FUNCTION WDA_TransportKickDxe
20379
20380 DESCRIPTION
20381 Request Kick Dxe when first hdd TX time out
20382 happens
20383
20384 PARAMETERS
20385 NONE
20386
20387 RETURN VALUE
20388 NONE
20389
20390===========================================================================*/
20391void WDA_TransportKickDxe()
20392{
20393 WDI_TransportKickDxe();
20394 return;
20395}
20396
20397
20398/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070020399 FUNCTION WDA_SetEnableSSR
20400
20401 DESCRIPTION
20402 API to enable/disable SSR on WDI timeout
20403
20404 PARAMETERS
20405 enableSSR : enable/disable SSR
20406
20407 RETURN VALUE
20408 NONE
20409
20410===========================================================================*/
20411void WDA_SetEnableSSR(v_BOOL_t enableSSR)
20412{
20413 WDI_SetEnableSSR(enableSSR);
20414}
Leo Chang9056f462013-08-01 19:21:11 -070020415
Agrawal Ashish0552be02016-03-02 18:03:43 +053020416/**
20417 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
20418 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
20419 *
20420 * Return: void
20421 */
20422void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
20423{
20424 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
20425}
20426
Leo Chang9056f462013-08-01 19:21:11 -070020427#ifdef FEATURE_WLAN_LPHB
20428/*
20429 * FUNCTION: WDA_LPHBconfRspCallback
20430 *
20431 */
20432void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
20433{
20434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20435
20436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20437 "<------ %s " ,__func__);
20438 if (NULL == pWdaParams)
20439 {
20440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20441 "%s: pWdaParams received NULL", __func__);
20442 VOS_ASSERT(0) ;
20443 return ;
20444 }
20445
20446 /* Do not need to send notification to upper layer
20447 * Just free allocated resources */
20448 if (pWdaParams != NULL)
20449 {
20450 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20451 {
20452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20453 }
20454 vos_mem_free(pWdaParams->wdaMsgParam) ;
20455 vos_mem_free(pWdaParams) ;
20456 }
20457
20458 return;
20459}
20460
20461/*
20462 * FUNCTION: WDA_ProcessLPHBConfReq
20463 *
20464 */
20465VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
20466 tSirLPHBReq *pData)
20467{
20468 WDI_Status wdiStatus;
20469 tWDA_ReqParams *pWdaParams ;
20470
20471 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20472 "------> %s " , __func__);
20473
20474 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20475 if (NULL == pWdaParams)
20476 {
20477 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20478 "%s: VOS MEM Alloc Failure", __func__);
20479 VOS_ASSERT(0);
20480 vos_mem_free(pData);
20481 return VOS_STATUS_E_NOMEM;
20482 }
20483
20484 pWdaParams->pWdaContext = pWDA;
20485 pWdaParams->wdaMsgParam = (void *)pData;
20486 pWdaParams->wdaWdiApiMsgParam = NULL;
20487
20488 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
20489 if (WDI_STATUS_PENDING == wdiStatus)
20490 {
20491 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20492 "Pending received for %s:%d ", __func__, __LINE__);
20493 }
20494 else if (WDI_STATUS_SUCCESS != wdiStatus)
20495 {
20496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20497 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
20498 vos_mem_free(pWdaParams->wdaMsgParam);
20499 vos_mem_free(pWdaParams);
20500 }
20501
20502 return CONVERT_WDI2VOS_STATUS(wdiStatus);
20503}
20504#endif /* FEATURE_WLAN_LPHB */
20505
c_hpothu92367912014-05-01 15:18:17 +053020506void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
20507 void* pUserData)
20508{
20509 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
20510
20511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20512 "<------ %s " ,__func__);
20513 if (NULL == pBcnMissRateInfo)
20514 {
20515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20516 "%s: pWdaParams received NULL", __func__);
20517 VOS_ASSERT(0) ;
20518 return ;
20519 }
20520 if (pBcnMissRateInfo->callback)
20521 {
20522 pBcnMissRateInfo->callback(status, bcnMissRate,
20523 pBcnMissRateInfo->data);
20524 }
20525 vos_mem_free(pUserData);
20526
20527 return;
20528}
20529
20530v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
20531 tSirBcnMissRateReq *pData)
20532{
20533 WDI_Status wdiStatus;
20534 tSirBcnMissRateInfo *pBcnMissRateInfo;
20535
20536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20537 "------> %s " , __func__);
20538
20539 pBcnMissRateInfo =
20540 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
20541 if (NULL == pBcnMissRateInfo)
20542 {
20543 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20544 "%s: VOS MEM Alloc Failure", __func__);
20545 VOS_ASSERT(0);
20546 vos_mem_free(pData);
20547 return;
20548 }
20549
20550 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
20551 pBcnMissRateInfo->data = pData->data;
20552
20553 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
20554 WDA_GetBcnMissRateCallback,
20555 pData->bssid);
20556 if (WDI_STATUS_PENDING == wdiStatus)
20557 {
20558 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20559 "Pending received for %s:%d ", __func__, __LINE__);
20560 }
20561 else if (WDI_STATUS_SUCCESS != wdiStatus)
20562 {
20563 if (pBcnMissRateInfo->callback)
20564 {
20565 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
20566 -1, pBcnMissRateInfo->data);
20567 }
20568 }
20569 vos_mem_free(pData);
20570}
Dino Mycle41bdc942014-06-10 11:30:24 +053020571
20572#ifdef WLAN_FEATURE_EXTSCAN
20573
20574/*==========================================================================
20575 FUNCTION WDA_EXTScanStartRspCallback
20576
20577 DESCRIPTION
20578 API to send EXTScan Start Response to HDD
20579
20580 PARAMETERS
20581 pEventData: Response from FW
20582 pUserData:
20583===========================================================================*/
20584void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
20585{
20586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20587 tWDA_CbContext *pWDA = NULL;
20588 void *pCallbackContext;
20589 tpAniSirGlobal pMac;
20590
20591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20592 "%s:", __func__);
20593 if (NULL == pWdaParams)
20594 {
20595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20596 "%s: pWdaParams received NULL", __func__);
20597 VOS_ASSERT(0);
20598 return;
20599 }
20600
20601 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20602
20603 if (NULL == pWDA)
20604 {
20605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20606 "%s: pWDA received NULL", __func__);
20607 VOS_ASSERT(0);
20608 goto error;
20609 }
20610
20611 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20612 if (NULL == pMac)
20613 {
20614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20615 "%s:pMac is NULL", __func__);
20616 VOS_ASSERT(0);
20617 goto error;
20618 }
20619
20620 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20621
20622 if (pMac->sme.pEXTScanIndCb)
20623 {
20624 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
20625 pEventData);
20626 }
20627 else
20628 {
20629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20630 "%s:HDD callback is null", __func__);
20631 VOS_ASSERT(0);
20632 }
20633
20634error:
20635
20636 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20637 {
20638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20639 }
20640 if (pWdaParams->wdaMsgParam != NULL)
20641 {
20642 vos_mem_free(pWdaParams->wdaMsgParam);
20643 }
20644 vos_mem_free(pWdaParams) ;
20645
20646 return;
20647}
20648
20649/*==========================================================================
20650 FUNCTION WDA_EXTScanStopRspCallback
20651
20652 DESCRIPTION
20653 API to send EXTScan Stop Response to HDD
20654
20655 PARAMETERS
20656 pEventData: Response from FW
20657 pUserData:
20658===========================================================================*/
20659void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
20660{
20661 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20662 tWDA_CbContext *pWDA = NULL;
20663 void *pCallbackContext;
20664 tpAniSirGlobal pMac;
20665
20666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20667 "%s:", __func__);
20668 if (NULL == pWdaParams)
20669 {
20670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20671 "%s: pWdaParams received NULL", __func__);
20672 VOS_ASSERT(0);
20673 return;
20674 }
20675
20676 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20677
20678 if (NULL == pWDA)
20679 {
20680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20681 "%s: pWDA received NULL", __func__);
20682 VOS_ASSERT(0);
20683 goto error;
20684 }
20685
20686 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20687 if (NULL == pMac)
20688 {
20689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20690 "%s:pMac is NULL", __func__);
20691 VOS_ASSERT(0);
20692 goto error;
20693 }
20694 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20695
20696 if (pMac->sme.pEXTScanIndCb)
20697 {
20698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20699 "%s:HDD call back function called", __func__);
20700 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
20701 pEventData);
20702 }
20703 else
20704 {
20705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20706 "%s:HDD callback is null", __func__);
20707 VOS_ASSERT(0);
20708 }
20709
20710error:
20711
20712 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20713 {
20714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20715 }
20716 if (pWdaParams->wdaMsgParam != NULL)
20717 {
20718 vos_mem_free(pWdaParams->wdaMsgParam);
20719 }
20720 vos_mem_free(pWdaParams) ;
20721
20722
20723 return;
20724}
20725
20726/*==========================================================================
20727 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
20728
20729 DESCRIPTION
20730 API to send EXTScan Get Cached Results Response to HDD
20731
20732 PARAMETERS
20733 pEventData: Response from FW
20734 pUserData:
20735===========================================================================*/
20736void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
20737{
20738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20739 tWDA_CbContext *pWDA = NULL;
20740 void *pCallbackContext;
20741 tpAniSirGlobal pMac;
20742
20743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20744 "%s: ", __func__);
20745 if (NULL == pWdaParams)
20746 {
20747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20748 "%s: pWdaParams received NULL", __func__);
20749 VOS_ASSERT(0);
20750 return;
20751 }
20752
20753 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20754
20755 if (NULL == pWDA)
20756 {
20757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20758 "%s: pWDA received NULL", __func__);
20759 VOS_ASSERT(0);
20760 goto error;
20761 }
20762
20763 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20764 if (NULL == pMac)
20765 {
20766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20767 "%s:pMac is NULL", __func__);
20768 VOS_ASSERT(0);
20769 goto error;
20770 }
20771
20772 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20773
20774 if (pMac->sme.pEXTScanIndCb)
20775 {
20776 pMac->sme.pEXTScanIndCb(pCallbackContext,
20777 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
20778 pEventData);
20779 }
20780 else
20781 {
20782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20783 "%s:HDD callback is null", __func__);
20784 VOS_ASSERT(0);
20785 }
20786
20787
20788error:
20789
20790 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20791 {
20792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20793 }
20794 if (pWdaParams->wdaMsgParam != NULL)
20795 {
20796 vos_mem_free(pWdaParams->wdaMsgParam);
20797 }
20798 vos_mem_free(pWdaParams) ;
20799
20800 return;
20801}
20802
20803/*==========================================================================
20804 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
20805
20806 DESCRIPTION
20807 API to send EXTScan Get Capabilities Response to HDD
20808
20809 PARAMETERS
20810 pEventData: Response from FW
20811 pUserData:
20812===========================================================================*/
20813void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
20814{
20815 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20816 tWDA_CbContext *pWDA = NULL;
20817 void *pCallbackContext;
20818 tpAniSirGlobal pMac;
20819
20820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20821 "%s:", __func__);
20822 if (NULL == pWdaParams)
20823 {
20824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20825 "%s: pWdaParams received NULL", __func__);
20826 VOS_ASSERT(0);
20827 return;
20828 }
20829
20830 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20831
20832 if (NULL == pWDA)
20833 {
20834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20835 "%s: pWDA received NULL", __func__);
20836 VOS_ASSERT(0);
20837 goto error;
20838 }
20839
20840 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20841 if (NULL == pMac)
20842 {
20843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20844 "%s:pMac is NULL", __func__);
20845 VOS_ASSERT(0);
20846 goto error;
20847 }
20848
20849 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20850
20851 if (pMac->sme.pEXTScanIndCb)
20852 {
20853 pMac->sme.pEXTScanIndCb(pCallbackContext,
20854 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
20855 pEventData);
20856 }
20857 else
20858 {
20859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20860 "%s:HDD callback is null", __func__);
20861 VOS_ASSERT(0);
20862 }
20863
20864
20865error:
20866
20867 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20868 {
20869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20870 }
20871 if (pWdaParams->wdaMsgParam != NULL)
20872 {
20873 vos_mem_free(pWdaParams->wdaMsgParam);
20874 }
20875 vos_mem_free(pWdaParams) ;
20876
20877 return;
20878}
20879
20880/*==========================================================================
20881 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
20882
20883 DESCRIPTION
20884 API to send EXTScan Set BSSID Hotlist Response to HDD
20885
20886 PARAMETERS
20887 pEventData: Response from FW
20888 pUserData:
20889===========================================================================*/
20890void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20891{
20892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20893 tWDA_CbContext *pWDA = NULL;
20894 void *pCallbackContext;
20895 tpAniSirGlobal pMac;
20896
20897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20898 "%s: ", __func__);
20899 if (NULL == pWdaParams)
20900 {
20901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20902 "%s: pWdaParams received NULL", __func__);
20903 VOS_ASSERT(0) ;
20904 return;
20905 }
20906
20907 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20908
20909 if (NULL == pWDA)
20910 {
20911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20912 "%s: pWDA received NULL", __func__);
20913 VOS_ASSERT(0);
20914 goto error;
20915 }
20916
20917 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20918 if (NULL == pMac)
20919 {
20920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20921 "%s:pMac is NULL", __func__);
20922 VOS_ASSERT(0);
20923 goto error;
20924 }
20925
20926 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20927
20928 if (pMac->sme.pEXTScanIndCb)
20929 {
20930 pMac->sme.pEXTScanIndCb(pCallbackContext,
20931 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20932 pEventData);
20933 }
20934 else
20935 {
20936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20937 "%s:HDD callback is null", __func__);
20938 VOS_ASSERT(0);
20939 }
20940
20941
20942error:
20943
20944 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20945 {
20946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20947 }
20948 if (pWdaParams->wdaMsgParam != NULL)
20949 {
20950 vos_mem_free(pWdaParams->wdaMsgParam);
20951 }
20952 vos_mem_free(pWdaParams) ;
20953
20954 return;
20955}
20956
20957/*==========================================================================
20958 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20959
20960 DESCRIPTION
20961 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20962
20963 PARAMETERS
20964 pEventData: Response from FW
20965 pUserData:
20966===========================================================================*/
20967void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20968{
20969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20970 tWDA_CbContext *pWDA = NULL;
20971 void *pCallbackContext;
20972 tpAniSirGlobal pMac;
20973
20974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20975 "%s:", __func__);
20976 if (NULL == pWdaParams)
20977 {
20978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20979 "%s: pWdaParams received NULL", __func__);
20980 VOS_ASSERT(0) ;
20981 return;
20982 }
20983
20984 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20985
20986 if (NULL == pWDA)
20987 {
20988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20989 "%s: pWDA received NULL", __func__);
20990 VOS_ASSERT(0);
20991 goto error;
20992 }
20993
20994 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20995 if (NULL == pMac)
20996 {
20997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20998 "%s:pMac is NULL", __func__);
20999 VOS_ASSERT(0);
21000 goto error;
21001 }
21002
21003 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21004
21005 if (pMac->sme.pEXTScanIndCb)
21006 {
21007 pMac->sme.pEXTScanIndCb(pCallbackContext,
21008 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
21009 pEventData);
21010 }
21011 else
21012 {
21013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21014 "%s:HDD callback is null", __func__);
21015 VOS_ASSERT(0);
21016 }
21017
21018
21019error:
21020
21021 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21022 {
21023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21024 }
21025 if (pWdaParams->wdaMsgParam != NULL)
21026 {
21027 vos_mem_free(pWdaParams->wdaMsgParam);
21028 }
21029 vos_mem_free(pWdaParams) ;
21030
21031 return;
21032}
21033
21034/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021035 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
21036
21037 DESCRIPTION
21038 API to send EXTScan Set SSID Hotlist Response to HDD
21039
21040 PARAMETERS
21041 pEventData: Response from FW
21042 pUserData:
21043===========================================================================*/
21044void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21045{
21046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21047 tWDA_CbContext *pWDA = NULL;
21048 void *pCallbackContext;
21049 tpAniSirGlobal pMac;
21050
21051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21052 "%s: ", __func__);
21053 if (NULL == pWdaParams)
21054 {
21055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21056 "%s: pWdaParams received NULL", __func__);
21057 VOS_ASSERT(0) ;
21058 return;
21059 }
21060
21061 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21062
21063 if (NULL == pWDA)
21064 {
21065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21066 "%s: pWDA received NULL", __func__);
21067 VOS_ASSERT(0);
21068 goto error;
21069 }
21070
21071 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21072 if (NULL == pMac)
21073 {
21074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21075 "%s:pMac is NULL", __func__);
21076 VOS_ASSERT(0);
21077 goto error;
21078 }
21079
21080 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21081
21082 if (pMac->sme.pEXTScanIndCb)
21083 {
21084 pMac->sme.pEXTScanIndCb(pCallbackContext,
21085 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
21086 pEventData);
21087 }
21088 else
21089 {
21090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21091 "%s:HDD callback is null", __func__);
21092 VOS_ASSERT(0);
21093 }
21094
21095
21096error:
21097
21098 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21099 {
21100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21101 }
21102 if (pWdaParams->wdaMsgParam != NULL)
21103 {
21104 vos_mem_free(pWdaParams->wdaMsgParam);
21105 }
21106 vos_mem_free(pWdaParams) ;
21107
21108 return;
21109}
21110
21111/*==========================================================================
21112 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
21113
21114 DESCRIPTION
21115 API to send EXTScan ReSet SSID Hotlist Response to HDD
21116
21117 PARAMETERS
21118 pEventData: Response from FW
21119 pUserData:
21120===========================================================================*/
21121void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21122{
21123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21124 tWDA_CbContext *pWDA = NULL;
21125 void *pCallbackContext;
21126 tpAniSirGlobal pMac;
21127
21128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21129 "%s:", __func__);
21130 if (NULL == pWdaParams)
21131 {
21132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21133 "%s: pWdaParams received NULL", __func__);
21134 VOS_ASSERT(0) ;
21135 return;
21136 }
21137
21138 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21139
21140 if (NULL == pWDA)
21141 {
21142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21143 "%s: pWDA received NULL", __func__);
21144 VOS_ASSERT(0);
21145 goto error;
21146 }
21147
21148 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21149 if (NULL == pMac)
21150 {
21151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21152 "%s:pMac is NULL", __func__);
21153 VOS_ASSERT(0);
21154 goto error;
21155 }
21156
21157 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21158
21159 if (pMac->sme.pEXTScanIndCb)
21160 {
21161 pMac->sme.pEXTScanIndCb(pCallbackContext,
21162 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
21163 pEventData);
21164 }
21165 else
21166 {
21167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21168 "%s:HDD callback is null", __func__);
21169 VOS_ASSERT(0);
21170 }
21171
21172
21173error:
21174
21175 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21176 {
21177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21178 }
21179 if (pWdaParams->wdaMsgParam != NULL)
21180 {
21181 vos_mem_free(pWdaParams->wdaMsgParam);
21182 }
21183 vos_mem_free(pWdaParams) ;
21184
21185 return;
21186}
21187
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021188/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053021189 FUNCTION WDA_ProcessEXTScanStartReq
21190
21191 DESCRIPTION
21192 API to send EXTScan Start Request to WDI
21193
21194 PARAMETERS
21195 pWDA: Pointer to WDA context
21196 wdaRequest: Pointer to EXTScan req parameters
21197===========================================================================*/
21198VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
21199 tSirEXTScanStartReqParams *wdaRequest)
21200{
21201 WDI_Status status = WDI_STATUS_SUCCESS;
21202 tWDA_ReqParams *pWdaParams;
21203
21204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21205 "%s: ", __func__);
21206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21207 if (NULL == pWdaParams)
21208 {
21209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21210 "%s: VOS MEM Alloc Failure", __func__);
21211 VOS_ASSERT(0);
21212 return VOS_STATUS_E_NOMEM;
21213 }
21214 pWdaParams->pWdaContext = pWDA;
21215 pWdaParams->wdaMsgParam = wdaRequest;
21216 pWdaParams->wdaWdiApiMsgParam = NULL;
21217
21218 status = WDI_EXTScanStartReq((void *)wdaRequest,
21219 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
21220 (void *)pWdaParams);
21221 if (IS_WDI_STATUS_FAILURE(status))
21222 {
21223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21224 "Failure to request. Free all the memory " );
21225 vos_mem_free(pWdaParams->wdaMsgParam);
21226 vos_mem_free(pWdaParams);
21227 }
21228 return CONVERT_WDI2VOS_STATUS(status);
21229}
21230
21231/*==========================================================================
21232 FUNCTION WDA_ProcessEXTScanStopReq
21233
21234 DESCRIPTION
21235 API to send EXTScan Start Request to WDI
21236
21237 PARAMETERS
21238 pWDA: Pointer to WDA context
21239 wdaRequest: Pointer to EXTScan req parameters
21240===========================================================================*/
21241VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
21242 tSirEXTScanStopReqParams *wdaRequest)
21243{
21244 WDI_Status status = WDI_STATUS_SUCCESS;
21245 tWDA_ReqParams *pWdaParams;
21246
21247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21248 "%s:", __func__);
21249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21250 if (NULL == pWdaParams)
21251 {
21252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21253 "%s: VOS MEM Alloc Failure", __func__);
21254 VOS_ASSERT(0);
21255 return VOS_STATUS_E_NOMEM;
21256 }
21257 pWdaParams->pWdaContext = pWDA;
21258 pWdaParams->wdaMsgParam = wdaRequest;
21259 pWdaParams->wdaWdiApiMsgParam = NULL;
21260
21261 status = WDI_EXTScanStopReq((void *)wdaRequest,
21262 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
21263 (void *)pWdaParams);
21264 if (IS_WDI_STATUS_FAILURE(status))
21265 {
21266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21267 "Failure to request. Free all the memory " );
21268 vos_mem_free(pWdaParams->wdaMsgParam);
21269 vos_mem_free(pWdaParams);
21270 }
21271 return CONVERT_WDI2VOS_STATUS(status);
21272}
21273
21274/*==========================================================================
21275 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
21276
21277 DESCRIPTION
21278 API to send EXTScan Get Cached Results Request to WDI
21279
21280 PARAMETERS
21281 pWDA: Pointer to WDA context
21282 wdaRequest: Pointer to EXTScan req parameters
21283===========================================================================*/
21284VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
21285 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
21286{
21287 WDI_Status status = WDI_STATUS_SUCCESS;
21288 tWDA_ReqParams *pWdaParams;
21289
21290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21291 "%s: ", __func__);
21292 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21293 if (NULL == pWdaParams)
21294 {
21295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21296 "%s: VOS MEM Alloc Failure", __func__);
21297 VOS_ASSERT(0);
21298 return VOS_STATUS_E_NOMEM;
21299 }
21300 pWdaParams->pWdaContext = pWDA;
21301 pWdaParams->wdaMsgParam = wdaRequest;
21302 pWdaParams->wdaWdiApiMsgParam = NULL;
21303
21304 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
21305 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
21306 (void *)pWdaParams);
21307 if (IS_WDI_STATUS_FAILURE(status))
21308 {
21309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21310 "Failure to request. Free all the memory " );
21311 vos_mem_free(pWdaParams->wdaMsgParam);
21312 vos_mem_free(pWdaParams);
21313 }
21314 return CONVERT_WDI2VOS_STATUS(status);
21315}
21316
21317/*==========================================================================
21318 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
21319
21320 DESCRIPTION
21321 API to send EXTScan Get Capabilities Request to WDI
21322
21323 PARAMETERS
21324 pWDA: Pointer to WDA context
21325 wdaRequest: Pointer to EXTScan req parameters
21326===========================================================================*/
21327VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
21328 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
21329{
21330 WDI_Status status = WDI_STATUS_SUCCESS;
21331 tWDA_ReqParams *pWdaParams;
21332
21333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21334 "%s:", __func__);
21335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21336 if (NULL == pWdaParams)
21337 {
21338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21339 "%s: VOS MEM Alloc Failure", __func__);
21340 VOS_ASSERT(0);
21341 return VOS_STATUS_E_NOMEM;
21342 }
21343 pWdaParams->pWdaContext = pWDA;
21344 pWdaParams->wdaMsgParam = wdaRequest;
21345 pWdaParams->wdaWdiApiMsgParam = NULL;
21346
21347 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
21348 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
21349 (void *)pWdaParams);
21350 if (IS_WDI_STATUS_FAILURE(status))
21351 {
21352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21353 "Failure to request. Free all the memory " );
21354 vos_mem_free(pWdaParams->wdaMsgParam);
21355 vos_mem_free(pWdaParams);
21356 }
21357 return CONVERT_WDI2VOS_STATUS(status);
21358}
21359
21360/*==========================================================================
21361 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
21362
21363 DESCRIPTION
21364 API to send Set BSSID Hotlist Request to WDI
21365
21366 PARAMETERS
21367 pWDA: Pointer to WDA context
21368 wdaRequest: Pointer to EXTScan req parameters
21369===========================================================================*/
21370VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
21371 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
21372{
21373 WDI_Status status = WDI_STATUS_SUCCESS;
21374 tWDA_ReqParams *pWdaParams;
21375
21376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21377 "%s: ", __func__);
21378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21379 if (NULL == pWdaParams)
21380 {
21381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21382 "%s: VOS MEM Alloc Failure", __func__);
21383 VOS_ASSERT(0);
21384 return VOS_STATUS_E_NOMEM;
21385 }
21386 pWdaParams->pWdaContext = pWDA;
21387 pWdaParams->wdaMsgParam = wdaRequest;
21388 pWdaParams->wdaWdiApiMsgParam = NULL;
21389
21390 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
21391 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
21392 (void *)pWdaParams);
21393 if (IS_WDI_STATUS_FAILURE(status))
21394 {
21395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21396 "Failure to request. Free all the memory " );
21397 vos_mem_free(pWdaParams->wdaMsgParam);
21398 vos_mem_free(pWdaParams);
21399 }
21400 return CONVERT_WDI2VOS_STATUS(status);
21401}
21402
21403/*==========================================================================
21404 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
21405
21406 DESCRIPTION
21407 API to send Reset BSSID Hotlist Request to WDI
21408
21409 PARAMETERS
21410 pWDA: Pointer to WDA context
21411 wdaRequest: Pointer to EXTScan req parameters
21412===========================================================================*/
21413VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
21414 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
21415{
21416 WDI_Status status = WDI_STATUS_SUCCESS;
21417 tWDA_ReqParams *pWdaParams;
21418
21419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21420 "%s:", __func__);
21421 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21422 if (NULL == pWdaParams)
21423 {
21424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21425 "%s: VOS MEM Alloc Failure", __func__);
21426 VOS_ASSERT(0);
21427 return VOS_STATUS_E_NOMEM;
21428 }
21429 pWdaParams->pWdaContext = pWDA;
21430 pWdaParams->wdaMsgParam = wdaRequest;
21431 pWdaParams->wdaWdiApiMsgParam = NULL;
21432
21433 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
21434 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
21435 (void *)pWdaParams);
21436 if (IS_WDI_STATUS_FAILURE(status))
21437 {
21438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21439 "Failure to request. Free all the memory " );
21440 vos_mem_free(pWdaParams->wdaMsgParam);
21441 vos_mem_free(pWdaParams);
21442 }
21443 return CONVERT_WDI2VOS_STATUS(status);
21444}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021445
21446/*==========================================================================
21447 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
21448
21449 DESCRIPTION
21450 API to send Set SSID Hotlist Request to WDI
21451
21452 PARAMETERS
21453 pWDA: Pointer to WDA context
21454 wdaRequest: Pointer to EXTScan req parameters
21455===========================================================================*/
21456VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
21457 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
21458{
21459 WDI_Status status = WDI_STATUS_SUCCESS;
21460 tWDA_ReqParams *pWdaParams;
21461
21462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21463 "%s: ", __func__);
21464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21465 if (NULL == pWdaParams)
21466 {
21467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21468 "%s: VOS MEM Alloc Failure", __func__);
21469 VOS_ASSERT(0);
21470 return VOS_STATUS_E_NOMEM;
21471 }
21472 pWdaParams->pWdaContext = pWDA;
21473 pWdaParams->wdaMsgParam = wdaRequest;
21474 pWdaParams->wdaWdiApiMsgParam = NULL;
21475
21476 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
21477 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
21478 (void *)pWdaParams);
21479 if (IS_WDI_STATUS_FAILURE(status))
21480 {
21481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21482 "Failure to request. Free all the memory " );
21483 vos_mem_free(pWdaParams->wdaMsgParam);
21484 vos_mem_free(pWdaParams);
21485 }
21486 return CONVERT_WDI2VOS_STATUS(status);
21487}
21488
21489/*==========================================================================
21490 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
21491
21492 DESCRIPTION
21493 API to send Reset SSID Hotlist Request to WDI
21494
21495 PARAMETERS
21496 pWDA: Pointer to WDA context
21497 wdaRequest: Pointer to EXTScan req parameters
21498===========================================================================*/
21499VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
21500 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
21501{
21502 WDI_Status status = WDI_STATUS_SUCCESS;
21503 tWDA_ReqParams *pWdaParams;
21504
21505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21506 "%s:", __func__);
21507 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21508 if (NULL == pWdaParams)
21509 {
21510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21511 "%s: VOS MEM Alloc Failure", __func__);
21512 VOS_ASSERT(0);
21513 return VOS_STATUS_E_NOMEM;
21514 }
21515 pWdaParams->pWdaContext = pWDA;
21516 pWdaParams->wdaMsgParam = wdaRequest;
21517 pWdaParams->wdaWdiApiMsgParam = NULL;
21518
21519 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
21520 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
21521 (void *)pWdaParams);
21522 if (IS_WDI_STATUS_FAILURE(status))
21523 {
21524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21525 "Failure to request. Free all the memory " );
21526 vos_mem_free(pWdaParams->wdaMsgParam);
21527 vos_mem_free(pWdaParams);
21528 }
21529 return CONVERT_WDI2VOS_STATUS(status);
21530}
21531
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053021532/*==========================================================================
21533 FUNCTION WDA_ProcessHighPriorityDataInfoInd
21534
21535 DESCRIPTION
21536 API to send Reset SSID Hotlist Request to WDI
21537
21538 PARAMETERS
21539 pWDA: Pointer to WDA context
21540 wdaRequest: Pointer to EXTScan req parameters
21541===========================================================================*/
21542VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
21543 tSirHighPriorityDataInfoInd *wdaRequest)
21544{
21545 WDI_Status status = WDI_STATUS_SUCCESS;
21546
21547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21548 "%s:", __func__);
21549
21550 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
21551 if (WDI_STATUS_PENDING == status)
21552 {
21553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21554 FL("pending status received "));
21555 }
21556 else if (WDI_STATUS_SUCCESS_SYNC != status)
21557 {
21558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21559 FL("Failure status %d"), status);
21560 }
21561 return CONVERT_WDI2VOS_STATUS(status);
21562}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021563
Dino Mycle41bdc942014-06-10 11:30:24 +053021564#endif /* WLAN_FEATURE_EXTSCAN */
21565
Sunil Duttbd736ed2014-05-26 21:19:41 +053021566#ifdef WLAN_FEATURE_LINK_LAYER_STATS
21567
21568/*==========================================================================
21569 FUNCTION WDA_LLStatsSetRspCallback
21570
21571 DESCRIPTION
21572 API to process set link layer statistics response from FW
21573
21574 PARAMETERS
21575 pRsp: Pointer to set link layer statistics response
21576 pUserData: Pointer to user data
21577
21578 RETURN VALUE
21579 NONE
21580
21581===========================================================================*/
21582void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
21583{
21584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21585
21586
21587 if (NULL == pWdaParams)
21588 {
21589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21590 "%s: pWdaParams received NULL", __func__);
21591 VOS_ASSERT(0) ;
21592 return ;
21593 }
21594
21595 /* Do not need to send notification to upper layer
21596 * Just free allocated resources */
21597 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21598 {
21599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21600 }
21601 if (pWdaParams->wdaMsgParam != NULL)
21602 {
21603 vos_mem_free(pWdaParams->wdaMsgParam);
21604 }
21605 vos_mem_free(pWdaParams) ;
21606
21607 return;
21608}
21609
21610/*==========================================================================
21611 FUNCTION WDA_ProcessLLStatsSetReq
21612
21613 DESCRIPTION
21614 API to send Set Link Layer Stats request to WDI
21615
21616 PARAMETERS
21617 pWDA: Pointer to WDA context
21618 wdaRequest: Pointer to set Link Layer Stats req parameters
21619===========================================================================*/
21620VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
21621 tSirLLStatsSetReq *wdaRequest)
21622{
21623 WDI_Status status = WDI_STATUS_SUCCESS;
21624 tWDA_ReqParams *pWdaParams;
21625
21626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21627 if (NULL == pWdaParams)
21628 {
21629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21630 "%s: VOS MEM Alloc Failure", __func__);
21631 VOS_ASSERT(0);
21632 return VOS_STATUS_E_NOMEM;
21633 }
21634 pWdaParams->pWdaContext = pWDA;
21635 pWdaParams->wdaMsgParam = wdaRequest;
21636 pWdaParams->wdaWdiApiMsgParam = NULL;
21637
21638 status = WDI_LLStatsSetReq((void *)wdaRequest,
21639 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
21640 (void *)pWdaParams);
21641 if (IS_WDI_STATUS_FAILURE(status))
21642 {
21643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21644 "Failure to request. Free all the memory " );
21645 vos_mem_free(pWdaParams->wdaMsgParam);
21646 vos_mem_free(pWdaParams);
21647 }
21648 return CONVERT_WDI2VOS_STATUS(status);
21649}
21650
21651/*==========================================================================
21652 FUNCTION WDA_LLStatsGetRspCallback
21653
21654 DESCRIPTION
21655 API to process get link layer statistics response from FW
21656
21657 PARAMETERS
21658 pRsp: Pointer to get link layer statistics response
21659 pUserData: Pointer to user data
21660
21661 RETURN VALUE
21662 NONE
21663
21664===========================================================================*/
21665void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
21666{
21667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21668
21669 if (NULL == pWdaParams)
21670 {
21671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21672 "%s: pWdaParams received NULL", __func__);
21673 VOS_ASSERT(0) ;
21674 return ;
21675 }
21676
21677 /* Do not need to send notification to upper layer
21678 * Just free allocated resources */
21679 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21680 {
21681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21682 }
21683 if (pWdaParams->wdaMsgParam != NULL)
21684 {
21685 vos_mem_free(pWdaParams->wdaMsgParam);
21686 }
21687 vos_mem_free(pWdaParams) ;
21688
21689 return;
21690}
21691
21692/*==========================================================================
21693 FUNCTION WDA_ProcessLLStatsGetReq
21694
21695 DESCRIPTION
21696 API to send Get Link Layer Stats request to WDI
21697
21698 PARAMETERS
21699 pWDA: Pointer to WDA context
21700 wdaRequest: Pointer to get Link Layer Stats req parameters
21701===========================================================================*/
21702VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
21703 tSirLLStatsGetReq *wdaRequest)
21704{
21705 WDI_Status status = WDI_STATUS_SUCCESS;
21706 tWDA_ReqParams *pWdaParams;
21707
21708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21709 if (NULL == pWdaParams)
21710 {
21711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21712 "%s: VOS MEM Alloc Failure", __func__);
21713 VOS_ASSERT(0);
21714 return VOS_STATUS_E_NOMEM;
21715 }
21716 pWdaParams->pWdaContext = pWDA;
21717 pWdaParams->wdaMsgParam = wdaRequest;
21718 pWdaParams->wdaWdiApiMsgParam = NULL;
21719
21720 status = WDI_LLStatsGetReq((void *) wdaRequest,
21721 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
21722 (void *)pWdaParams);
21723 if (IS_WDI_STATUS_FAILURE(status))
21724 {
21725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21726 "Failure to request. Free all the memory " );
21727 vos_mem_free(pWdaParams->wdaMsgParam);
21728 vos_mem_free(pWdaParams);
21729 }
21730 return CONVERT_WDI2VOS_STATUS(status);
21731}
21732
21733/*==========================================================================
21734 FUNCTION WDA_LLStatsClearRspCallback
21735
21736 DESCRIPTION
21737 API to process clear link layer statistics response from FW
21738
21739 PARAMETERS
21740 pRsp: Pointer to clear link layer statistics response
21741 pUserData: Pointer to user data
21742
21743 RETURN VALUE
21744 NONE
21745
21746===========================================================================*/
21747void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
21748{
21749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21750
21751
21752 if (NULL == pWdaParams)
21753 {
21754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21755 "%s: pWdaParams received NULL", __func__);
21756 VOS_ASSERT(0) ;
21757 return ;
21758 }
21759 /* Do not need to send notification to upper layer
21760 * Just free allocated resources */
21761 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21762 {
21763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21764 }
21765 if (pWdaParams->wdaMsgParam != NULL)
21766 {
21767 vos_mem_free(pWdaParams->wdaMsgParam);
21768 }
21769 vos_mem_free(pWdaParams) ;
21770 return;
21771}
21772
21773/*==========================================================================
21774 FUNCTION WDA_ProcessLLStatsClearReq
21775
21776 DESCRIPTION
21777 API to send Clear Link Layer Stats request to WDI
21778
21779 PARAMETERS
21780 pWDA: Pointer to WDA context
21781 wdaRequest: Pointer to earLink Layer Stats req
21782===========================================================================*/
21783VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
21784 tSirLLStatsClearReq *wdaRequest)
21785{
21786 WDI_Status status = WDI_STATUS_SUCCESS;
21787 tWDA_ReqParams *pWdaParams;
21788
21789 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21790 if (NULL == pWdaParams)
21791 {
21792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21793 "%s: VOS MEM Alloc Failure", __func__);
21794 VOS_ASSERT(0);
21795 return VOS_STATUS_E_NOMEM;
21796 }
21797 pWdaParams->pWdaContext = pWDA;
21798 pWdaParams->wdaMsgParam = wdaRequest;
21799 pWdaParams->wdaWdiApiMsgParam = NULL;
21800
21801 status = WDI_LLStatsClearReq((void *) wdaRequest,
21802 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
21803 (void *)pWdaParams);
21804 if (IS_WDI_STATUS_FAILURE(status))
21805 {
21806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21807 "Failure to request. Free all the memory " );
21808 vos_mem_free(pWdaParams->wdaMsgParam);
21809 vos_mem_free(pWdaParams);
21810 }
21811 return CONVERT_WDI2VOS_STATUS(status);
21812}
21813
21814#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053021815
Abhishek Singh85b74712014-10-08 11:38:19 +053021816void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
21817{
21818 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
21819
21820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21821 "<------ %s " ,__func__);
21822 if (NULL == fwStatsinfo)
21823 {
21824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21825 "%s: pWdaParams received NULL", __func__);
21826 VOS_ASSERT(0);
21827 return;
21828 }
21829
21830 if(fwStatsinfo->callback)
21831 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
21832
21833 vos_mem_free(pUserData);
21834 return;
21835}
21836
21837
21838v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
21839 tSirFWStatsGetReq *pData)
21840{
21841
21842 WDI_Status wdiStatus;
21843 tSirFWStatsInfo *fwStatsinfo;
21844
21845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21846 "------> %s" , __func__);
21847
21848 fwStatsinfo =
21849 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
21850 if (NULL == fwStatsinfo)
21851 {
21852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21853 "%s: VOS MEM Alloc Failure", __func__);
21854 VOS_ASSERT(0);
21855 vos_mem_free(pData);
21856 return;
21857 }
21858
21859 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
21860 fwStatsinfo->data = pData->data;
21861
21862 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
21863 WDA_FWStatsGetRspCallback,
21864 pData->stats);
21865 if (WDI_STATUS_PENDING == wdiStatus)
21866 {
21867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21868 "Pending received for %s:%d ", __func__, __LINE__);
21869 }
21870 else if (WDI_STATUS_SUCCESS != wdiStatus)
21871 {
21872 if (fwStatsinfo->callback)
21873 {
21874 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
21875 }
21876 vos_mem_free(fwStatsinfo);
21877 }
21878 vos_mem_free(pData);
21879}
21880
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053021881/*==========================================================================
21882 FUNCTION WDA_EncryptMsgRspCallback
21883
21884 DESCRIPTION
21885 API to send Encrypt message response to HDD
21886
21887 PARAMETERS
21888 pEventData: Response from FW
21889 pUserData: Data sent to firmware as part of request
21890===========================================================================*/
21891void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
21892 void* pUserData)
21893{
21894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21895 tWDA_CbContext *pWDA = NULL;
21896 tpAniSirGlobal pMac;
21897 vos_msg_t vosMsg;
21898 tpSirEncryptedDataRspParams pEncRspParams;
21899 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21900
21901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21902 FL("%s:"), __func__);
21903 if (NULL == pWdaParams)
21904 {
21905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21906 FL("%s: pWdaParams received NULL"), __func__);
21907 VOS_ASSERT(0);
21908 return;
21909 }
21910
21911 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21912
21913 if (NULL == pWDA)
21914 {
21915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21916 FL("%s: pWDA received NULL"), __func__);
21917 VOS_ASSERT(0);
21918 goto error;
21919 }
21920
21921 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21922 if (NULL == pMac)
21923 {
21924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21925 FL("%s:pMac is NULL"), __func__);
21926 VOS_ASSERT(0);
21927 goto error;
21928 }
21929
21930 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21931
21932 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21933 if (NULL == pEncRspParams)
21934 {
21935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21936 FL("%s: VOS MEM Alloc Failure"), __func__);
21937 VOS_ASSERT(0);
21938 goto error;
21939 }
21940
21941 /* Message Header */
21942 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21943 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21944 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21945 pEncryptedDataRsp->encryptedPayload.length;
21946 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21947 pEncryptedDataRsp->encryptedPayload.data,
21948 pEncryptedDataRsp->encryptedPayload.length);
21949
21950 /* VOS message wrapper */
21951 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21952 vosMsg.bodyptr = (void *)pEncRspParams;
21953 vosMsg.bodyval = 0;
21954
21955 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21956 {
21957 /* free the mem */
21958 vos_mem_free((v_VOID_t *) pEncRspParams);
21959 }
21960
21961error:
21962
21963 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21964 {
21965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21966 }
21967 if (pWdaParams->wdaMsgParam != NULL)
21968 {
21969 vos_mem_free(pWdaParams->wdaMsgParam);
21970 }
21971 vos_mem_free(pWdaParams) ;
21972
21973 return;
21974}
21975/*==========================================================================
21976 FUNCTION WDA_ProcessEncryptMsgReq
21977
21978 DESCRIPTION
21979 API to send Encrypt message Request to WDI
21980
21981 PARAMETERS
21982 pWDA: Pointer to WDA context
21983 wdaRequest: Pointer to Encrypt_msg req parameters
21984===========================================================================*/
21985VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21986 u8 *wdaRequest)
21987{
21988 WDI_Status status = WDI_STATUS_SUCCESS;
21989 tWDA_ReqParams *pWdaParams;
21990
21991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21992 FL("%s: "), __func__);
21993 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21994 if (NULL == pWdaParams)
21995 {
21996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21997 FL("%s: VOS MEM Alloc Failure"), __func__);
21998 VOS_ASSERT(0);
21999 return VOS_STATUS_E_NOMEM;
22000 }
22001 pWdaParams->pWdaContext = pWDA;
22002 pWdaParams->wdaMsgParam = wdaRequest;
22003 pWdaParams->wdaWdiApiMsgParam = NULL;
22004
22005 status = WDI_EncryptMsgReq((void *)wdaRequest,
22006 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
22007 (void *)pWdaParams);
22008 if (IS_WDI_STATUS_FAILURE(status))
22009 {
22010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22011 FL("Failure to request. Free all the memory " ));
22012 vos_mem_free(pWdaParams->wdaMsgParam);
22013 vos_mem_free(pWdaParams);
22014 }
22015 return CONVERT_WDI2VOS_STATUS(status);
22016}
Abhishek Singh41988ba2015-05-25 19:42:29 +053022017/*==========================================================================
22018 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
22019
22020 DESCRIPTION
22021 API to enable/disable RTS/CTS for different modes.
22022
22023 PARAMETERS
22024 pWDA: Pointer to WDA context
22025 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
22026===========================================================================*/
22027
22028VOS_STATUS
22029WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
22030 tANI_U32 rtsCtsVal)
22031{
22032 WDI_Status status;
22033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22034 FL("---> %s"), __func__);
22035 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
22036 if (WDI_STATUS_PENDING == status)
22037 {
22038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22039 FL("pending status received "));
22040 }
22041 else if (WDI_STATUS_SUCCESS_SYNC != status)
22042 {
22043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22044 FL("Failure status %d"), status);
22045 }
22046 return CONVERT_WDI2VOS_STATUS(status) ;
22047}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022048
22049void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053022050{
22051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022052 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053022053
22054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22055 "<------ %s " ,__func__);
22056 if (NULL == pWdaParams)
22057 {
22058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22059 "%s: pWdaParams received NULL", __func__);
22060 VOS_ASSERT(0) ;
22061 return ;
22062 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022063 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
22064 if (pData != NULL) {
22065 pData->callback(pData->magic, pData->cmpVar);
22066 vos_mem_free(pWdaParams->wdaMsgParam);
22067 }
Katya Nigamf0511f62015-05-05 16:40:57 +053022068 vos_mem_free(pWdaParams) ;
22069
22070 return;
22071}
22072
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022073VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053022074{
22075
22076 WDI_Status status = WDI_STATUS_SUCCESS;
22077 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022078 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053022079
22080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22081 FL("%s: "), __func__);
22082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22083 if (NULL == pWdaParams)
22084 {
22085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22086 FL("%s: VOS MEM Alloc Failure"), __func__);
22087 VOS_ASSERT(0);
22088 return VOS_STATUS_E_NOMEM;
22089 }
22090 pWdaParams->pWdaContext = pWDA;
22091 pWdaParams->wdaMsgParam = wdaRequest;
22092 pWdaParams->wdaWdiApiMsgParam = NULL;
22093
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022094 status = WDI_MonStartReq(pMonModeData->data,
22095 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022096 (void *)pWdaParams);
22097 if (IS_WDI_STATUS_FAILURE(status))
22098 {
22099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22100 "Failure to request. Free all the memory " );
22101 vos_mem_free(pWdaParams->wdaMsgParam);
22102 vos_mem_free(pWdaParams);
22103 }
22104 return CONVERT_WDI2VOS_STATUS(status);
22105}
22106
Katya Nigamf0511f62015-05-05 16:40:57 +053022107VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
22108{
22109
22110 WDI_Status status = WDI_STATUS_SUCCESS;
22111 tWDA_ReqParams *pWdaParams;
22112
22113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22114 FL("%s: "), __func__);
22115 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22116 if (NULL == pWdaParams)
22117 {
22118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22119 FL("%s: VOS MEM Alloc Failure"), __func__);
22120 VOS_ASSERT(0);
22121 return VOS_STATUS_E_NOMEM;
22122 }
22123 pWdaParams->pWdaContext = pWDA;
22124 pWdaParams->wdaMsgParam = wdaRequest;
22125 pWdaParams->wdaWdiApiMsgParam = NULL;
22126
Bhargav Shah1ae5de02015-07-20 13:32:31 +053022127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22128 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022129 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022130 (void *)pWdaParams);
22131
22132 if (IS_WDI_STATUS_FAILURE(status))
22133 {
22134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22135 "Failure to request. Free all the memory " );
22136 vos_mem_free(pWdaParams->wdaMsgParam);
22137 vos_mem_free(pWdaParams);
22138 }
22139 return CONVERT_WDI2VOS_STATUS(status);
22140}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053022141
22142VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
22143{
22144 WDI_Status status;
22145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22146 FL("---> %s"), __func__);
22147 status = WDI_EnableDisableCAEventInd(val);
22148 if (WDI_STATUS_PENDING == status)
22149 {
22150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22151 FL("pending status received "));
22152 }
22153 else if (WDI_STATUS_SUCCESS_SYNC != status)
22154 {
22155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22156 FL("Failure status %d"), status);
22157 }
22158 return CONVERT_WDI2VOS_STATUS(status) ;
22159}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022160
22161/*==========================================================================
22162 FUNCTION WDA_WifiConfigSetRspCallback
22163
22164 DESCRIPTION
22165 API to process set WifiConfig response from FW
22166
22167 PARAMETERS
22168 pRsp: Pointer to set WifiConfig response
22169 pUserData: Pointer to user data
22170
22171 RETURN VALUE
22172 NONE
22173
22174===========================================================================*/
22175void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
22176{
22177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22178
22179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22180 "<------ %s " ,__func__);
22181
22182 if(NULL == pWdaParams)
22183 {
22184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22185 "%s: pWdaParams received NULL", __func__);
22186 VOS_ASSERT(0);
22187 return ;
22188 }
22189
22190 if(NULL == pWdaParams->wdaMsgParam)
22191 {
22192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22193 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
22194 VOS_ASSERT(0);
22195 vos_mem_free(pWdaParams);
22196 return ;
22197 }
22198
22199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22200 vos_mem_free(pWdaParams->wdaMsgParam);
22201 vos_mem_free(pWdaParams);
22202
22203 return;
22204}
22205
22206/*==========================================================================
22207 FUNCTION WDA_ProcessWifiConfigReq
22208
22209 DESCRIPTION
22210 API to send Set WifiConfig params request to WDI
22211
22212 PARAMETERS
22213 pWDA: Pointer to WDA context
22214 wdaRequest: Pointer to set WifiConfig req parameters
22215===========================================================================*/
22216
22217VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
22218 tSetWifiConfigParams *pwdaWificonfig)
22219{
22220 WDI_Status status = WDI_STATUS_SUCCESS;
22221 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
22222 tWDA_ReqParams *pWdaParams ;
22223 WDI_Status wstatus;
22224
22225 /* Sanity Check*/
22226 if(NULL == pwdaWificonfig)
22227 {
22228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22229 "%s: tSetWifiConfigParams received NULL", __func__);
22230 VOS_ASSERT(0) ;
22231 return VOS_STATUS_E_FAULT;
22232 }
22233
22234 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
22235 sizeof(WDI_WifiConfigSetReqType));
22236 if(NULL == pwdiWifConfigSetReqParams)
22237 {
22238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22239 "%s: VOS MEM Alloc Failure", __func__);
22240 VOS_ASSERT(0);
22241 vos_mem_free(pwdaWificonfig);
22242 return VOS_STATUS_E_NOMEM;
22243 }
22244
22245 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
22246 if(NULL == pWdaParams)
22247 {
22248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22249 "%s: VOS MEM Alloc Failure", __func__);
22250 VOS_ASSERT(0);
22251 vos_mem_free(pwdiWifConfigSetReqParams);
22252 vos_mem_free(pwdaWificonfig);
22253 return VOS_STATUS_E_NOMEM;
22254 }
22255 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
22256 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
22257 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
22258 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
22259
22260 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053022261 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022262 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
22263
22264 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
22265 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
22266 pWdaParams);
22267 if(IS_WDI_STATUS_FAILURE(wstatus))
22268 {
22269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22270 "Failure in sendind WifiConfigReq, free all the memory" );
22271 status = CONVERT_WDI2VOS_STATUS(wstatus);
22272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
22273 vos_mem_free(pWdaParams->wdaMsgParam);
22274 vos_mem_free(pWdaParams);
22275 }
22276
22277 return status;
22278
22279}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022280
22281#ifdef FEATURE_OEM_DATA_SUPPORT
22282/*
22283 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
22284 * Request to WDI.
22285 */
22286VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
22287 tOemDataReqNewConfig *pOemDataReqNewConfig)
22288{
22289 VOS_STATUS status = VOS_STATUS_SUCCESS;
22290 WDI_Status wstatus;
22291 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
22292
22293 /* Sanity Check*/
22294 if(NULL == pOemDataReqNewConfig)
22295 {
22296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22297 "%s: pOemDataReqNewConfig received NULL", __func__);
22298 VOS_ASSERT(0) ;
22299 return VOS_STATUS_E_FAULT;
22300 }
22301
22302 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
22303 sizeof(WDI_OemDataReqNewConfig));
22304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22305 "------> %s " ,__func__);
22306
22307 if(NULL == wdiOemDataReqNewConfig)
22308 {
22309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22310 "%s: VOS MEM Alloc Failure", __func__);
22311 VOS_ASSERT(0);
22312 vos_mem_free(pOemDataReqNewConfig);
22313 return VOS_STATUS_E_NOMEM;
22314 }
22315
22316 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
22317 sizeof(WDI_OemDataReqNewConfig));
22318
22319 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
22320
22321 if (WDI_STATUS_PENDING == wstatus)
22322 {
22323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22324 FL("pending status received "));
22325 }
22326 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
22327 {
22328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22329 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022330 }
22331
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053022332 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022333 vos_mem_free(pOemDataReqNewConfig);
22334
22335 return status;
22336}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053022337
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053022338void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
22339 void *pUserData)
22340{
22341 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
22342 (tSirAntennaDiversitySelectionInfo *)pUserData;
22343
22344 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
22345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22346 "<------ %s " ,__func__);
22347 if (NULL == pAntennaDivSelInfo)
22348 {
22349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22350 "%s: pWdaParams received NULL", __func__);
22351 VOS_ASSERT(0) ;
22352 return ;
22353 }
22354 if (NULL == resParams)
22355 {
22356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22357 "%s: resParams received NULL", __func__);
22358 VOS_ASSERT(0) ;
22359 return ;
22360 }
22361
22362 if (pAntennaDivSelInfo->callback)
22363 {
22364 if (WDI_STATUS_SUCCESS == status)
22365 {
22366 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
22367 pAntennaDivSelInfo->data);
22368 }
22369 else
22370 {
22371 pAntennaDivSelInfo->callback(-1,
22372 pAntennaDivSelInfo->data);
22373 }
22374 }
22375
22376 vos_mem_free(pUserData);
22377 return;
22378}
22379
22380/*
22381 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
22382 * Request to WDI.
22383 */
22384v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
22385 tSirAntennaDiversitySelectionReq *pData)
22386{
22387 WDI_Status wdiStatus;
22388 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
22389
22390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22391 "------> %s " , __func__);
22392
22393 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
22394 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
22395 if (NULL == pAntennaDivSelInfo)
22396 {
22397 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22398 "%s: VOS MEM Alloc Failure", __func__);
22399 VOS_ASSERT(0);
22400 vos_mem_free(pData);
22401 return;
22402 }
22403
22404 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
22405 pAntennaDivSelInfo->data = pData->data;
22406
22407 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
22408 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
22409
22410 if (WDI_STATUS_PENDING == wdiStatus)
22411 {
22412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22413 "Pending received for %s:%d ", __func__, __LINE__);
22414 }
22415 else if (WDI_STATUS_SUCCESS != wdiStatus)
22416 {
22417 if (pAntennaDivSelInfo->callback)
22418 {
22419 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
22420 }
22421 }
22422
22423 vos_mem_free(pData);
22424 return;
22425}
22426
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053022427/*
22428 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
22429 * Request to WDI.
22430 */
22431VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
22432 tModifyRoamParamsReqParams *params)
22433{
22434 WDI_Status status;
22435
22436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22437 FL("---> %s"), __func__);
22438
22439 if (NULL == params)
22440 {
22441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22442 FL("tModifyRoamParamsReqParams is received NULL"));
22443 return VOS_STATUS_E_NOMEM;
22444 }
22445
22446 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
22447 if (WDI_STATUS_PENDING == status)
22448 {
22449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22450 FL("pending status received "));
22451 }
22452 else if (WDI_STATUS_SUCCESS_SYNC != status)
22453 {
22454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22455 FL("Failure status %d"), status);
22456 }
22457 vos_mem_free(params);
22458 return CONVERT_WDI2VOS_STATUS(status) ;
22459}
22460
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053022461#endif